ชุดข้อมูล ZFS¶
หน้า ZFS สำรองข้อมูลชุดข้อมูล ZFS รายการหนึ่งคือชุดข้อมูลหนึ่งชุดรวมกับชุดข้อมูลทุกชุดที่อยู่ใต้มัน ในการสำรองแต่ละครั้ง BombVault จะสร้างสแนปช็อต ZFS เพียงหนึ่งอันของทั้งต้นไม้ ชุดข้อมูลทุกชุดในนั้นจึงถูกบันทึกในช่วงเวลาเดียวกัน จากนั้นจะอ่านไฟล์ของแต่ละชุดข้อมูลจากสแนปช็อตนั้น เก็บด้วย restic แบบเดียวกับที่เก็บโฟลเดอร์ แล้วลบสแนปช็อตทิ้งทันที ข้อมูลสำรองผ่านการตัดข้อมูลซ้ำ เปิดดูได้ทุกชุด และกู้คืนไฟล์ทีละไฟล์ได้
BombVault ไม่เคยใช้ zfs send กับชุดข้อมูล ไม่เคยย้อนชุดข้อมูลกลับ และไม่เคยทำลายชุดข้อมูลใด
สิ่งที่ต้องมี¶
- การเชื่อมต่อ SSH ไปยังเซิร์ฟเวอร์นี้ ชุดข้อมูล ZFS ใช้คีย์ โฮสต์ และผู้ใช้เดียวกับการสำรองข้อมูล VM ถ้าการสำรองข้อมูล VM ใช้งานได้อยู่แล้ว ส่วนนี้ก็ใช้ได้เช่นกัน ไม่เช่นนั้นให้ทำตามคู่มือการสำรองข้อมูล VM ผ่าน SSHบน GitHub ช่องในเทมเพลตชื่อ Host SSH: Address, Host SSH: Port และ Host SSH: User
- คำสั่ง
zfsบนโฮสต์นั้น Unraid 6.12 ขึ้นไปและ TrueNAS SCALE มีคำสั่งนี้ - Host Data แมปเป็น
/mntโดยใช้ Access Mode แบบ Read/Write - Slave นี่คือค่าเริ่มต้นของเทมเพลต สแนปช็อตของชุดข้อมูลจะปรากฏในโฟลเดอร์.zfs/snapshotของชุดข้อมูลหลังจาก BombVault เริ่มทำงานแล้วเท่านั้น คอนเทนเนอร์จึงต้องได้รับการเมานต์ที่โฮสต์ทำภายหลัง - ชุดข้อมูลเมานต์อยู่ใต้
/mntบน Unraid พูลอยู่ที่/mnt/<pool>จึงเป็นเช่นนี้อยู่แล้ว
เปิดโดเมนใน การตั้งค่า, ทั่วไป (ชุดข้อมูล ZFS) แล้วหน้า ZFS จะแสดงการ์ด การเชื่อมต่อกับเซิร์ฟเวอร์นี้ การ์ดนี้ทดสอบการเชื่อมต่อ SSH บอกผู้ใช้และโฮสต์ที่เชื่อมต่อไป และบอกว่าขาดอะไรเมื่อมีสิ่งใดขาดไป การตรวจการผสานกับโฮสต์ (/spike) แสดงผลเดียวกัน
รายการและชุดข้อมูลลูก¶
เปิด เพิ่มชุดข้อมูล ในหน้า ZFS รายการมาจากเซิร์ฟเวอร์ เลือกชุดข้อมูลที่อยู่บนสุดของสิ่งที่คุณต้องการสำรอง เช่น cache/appdata แล้วรายการจะครอบคลุมชุดข้อมูลนั้นและชุดข้อมูลทุกชุดที่อยู่ใต้มัน
- ชุดข้อมูลลูกใหม่จะเข้ามาเอง ชุดข้อมูลที่สร้างภายหลังใต้รายการจะถูกสำรองในการรันครั้งถัดไป และการรันนั้นจะระบุว่าเป็นชุดใหม่ การสำรองครั้งแรกจะอ่านทั้งหมดหนึ่งครั้ง หลังจากนั้นจะอ่านเฉพาะส่วนที่เปลี่ยน
- คุณเว้นลูกบางชุดได้ ปิดลูกชุดหนึ่งในการตั้งค่าของรายการ แล้วมันจะถูกเว้นไว้พร้อมทุกอย่างที่อยู่ใต้มัน ลูกที่ถูกเว้นไว้และไม่มีอยู่บนเซิร์ฟเวอร์แล้วจะถูกทำเครื่องหมายไว้ และนำออกจากรายการได้
- ลูกที่อ่านไม่ได้จะถูกข้าม แต่ไม่เคยข้ามอย่างเงียบ ๆ การรันจะแสดงรายชื่อ รายการจะแสดงจำนวนที่ถูกข้าม และการ์ดความครอบคลุมบนแดชบอร์ดจะนับแต่ละชุดว่าไม่ได้รับการป้องกัน การรันยังคงสำรองทุกอย่างที่เหลือและไม่ล้มเหลวเพราะลูกที่ถูกข้าม เหตุผลอยู่ในตารางรหัสเหตุผล: ชุดข้อมูลที่ไม่ได้เมานต์ มี
canmount=offมีจุดเมานต์แบบlegacyหรือไม่มีจุดเมานต์ คีย์เข้ารหัสยังไม่ได้โหลด การเข้าถึงสแนปช็อตถูกปิด หรือจุดเมานต์ที่ BombVault มองไม่เห็น - ชุดข้อมูลที่ถูกข้ามจะไม่ลากลูกของมันไปด้วย ชุดข้อมูล
canmount=offที่มีแต่ชุดข้อมูลอื่นจะถูกข้าม (แสดงว่า "โครงสร้างเท่านั้น") และลูกที่เมานต์อยู่จะถูกสำรอง ชุดข้อมูลที่เข้ารหัสและยังไม่ได้โหลดคีย์จะถูกข้ามพร้อมกับลูกที่ใช้คีย์เดียวกัน - ลูกที่เป็นดิสก์ VM หรือข้อมูลระบบจะเริ่มต้นแบบปิด ในหน้าต่างเพิ่ม พร้อมเหตุผลข้างสวิตช์ การเพิ่มทั้งพูลจะต้องยืนยันในหน้าต่างที่แสดงสิ่งที่พูลมี
วอลุ่ม¶
วอลุ่ม (zvol) เก็บดิสก์เสมือนแทนไฟล์ และหน้า ZFS ไม่เคยสำรองวอลุ่ม
- วอลุ่มที่ VM ใช้จะถูกสำรองพร้อม VM นั้นในหน้า VMs
- วอลุ่มที่ไม่มี VM ใดใช้ (iSCSI extent หรือดิสก์ที่คุณถอดออก) จะไม่ถูกสำรองโดย BombVault หน้าต่างเพิ่มและหน้า ZFS จะนับวอลุ่มเหล่านี้และแจ้งไว้ เวอร์ชันถัดไปจะสำรองวอลุ่มเหล่านี้
วอลุ่มในต้นไม้ของรายการจะถูกข้ามและระบุชื่อในทุกการรัน
ที่เก็บของ Docker¶
เมื่อใช้ไดรเวอร์ที่เก็บ ZFS ของ Docker แต่ละเลเยอร์ของอิมเมจเป็นชุดข้อมูลที่มีจุดเมานต์แบบ legacy หน้าต่างเพิ่มจะรวมเลเยอร์เหล่านี้เป็นหนึ่งบรรทัดต่อพาเรนต์ ต้นไม้ที่มีชุดข้อมูลแบบนี้มากกว่า 20 ชุดจะเป็นรายการไม่ได้ เพราะตราบใดที่มีสแนปช็อตของมันอยู่ Docker จะลบเลเยอร์อิมเมจไม่ได้ ให้เพิ่มชุดข้อมูลที่อยู่ใต้มันแทน เช่น appdata
รายการไม่ซ้อนทับกัน¶
ชุดข้อมูลหนึ่งอยู่ในรายการได้เพียงรายการเดียว BombVault จะปฏิเสธรายการใหม่ที่อยู่ภายในรายการที่มีอยู่ หรือที่จะครอบรายการที่มีอยู่ หากต้องการรวมรายการลูกหลายรายการเป็นรายการพาเรนต์เดียว ให้ลบรายการลูกก่อนโดยเลือกเก็บข้อมูลสำรองไว้ แล้วจึงเพิ่มพาเรนต์ ชุดข้อมูลแต่ละชุดเก็บประวัติไว้ภายใต้ชื่อของตัวเอง การสำรองครั้งถัดไปจึงทำต่อจากจุดที่รายการเก่าหยุดไว้ และไม่อ่านทุกอย่างใหม่
หยุดคอนเทนเนอร์และคำสั่งรอบสแนปช็อต¶
สแนปช็อตของฐานข้อมูลที่กำลังทำงานเหมือนไฟดับกะทันหัน ฐานข้อมูลมักจะฟื้นตัวได้ แต่ต้องผ่านขั้นตอนการฟื้นตัว แต่ละรายการทำได้สองอย่างเพื่อรับมือ และทั้งสองอย่างมีผลเฉพาะช่วงเวลาของสแนปช็อต ไม่ใช่ทั้งการสำรอง
- หยุดคอนเทนเนอร์เหล่านี้เพื่อถ่ายสแนปช็อต BombVault หยุดคอนเทนเนอร์ในรายการ สร้างสแนปช็อต แล้วเริ่มคอนเทนเนอร์ใหม่ทันที คอนเทนเนอร์ในระดับการพึ่งพาเดียวกันจะหยุดพร้อมกัน โดยตัวที่พึ่งพาหยุดก่อน ช่วงเวลาทั้งหมดจึงมักใช้เพียงไม่กี่วินาที และการรันจะแสดงว่าใช้เวลานานเท่าใด จากนั้นการสำรองจะอ่านสแนปช็อตที่หยุดนิ่งไว้ขณะที่แอปกลับมาทำงานแล้ว จะหยุดเฉพาะคอนเทนเนอร์ที่กำลังทำงานอยู่
- คำสั่งก่อนและหลังสแนปช็อต คำสั่งนี้ทำงานภายในคอนเทนเนอร์ที่คุณเลือก เช่น เพื่อดัมพ์ฐานข้อมูลลงในชุดข้อมูลก่อนสแนปช็อตโดยไม่ต้องหยุดอะไร ถ้าคำสั่งก่อนสแนปช็อตล้มเหลว การสำรองจะล้มเหลวและไม่มีการสร้างสแนปช็อต คำสั่งหลังสแนปช็อตที่ล้มเหลวจะแสดงในการรัน แต่ไม่ทำให้การสำรองล้มเหลว
เมื่อเกิดปัญหา:
- ถ้าหยุดคอนเทนเนอร์ใดไม่ได้ BombVault จะเริ่มคอนเทนเนอร์ที่หยุดไปแล้ว และการสำรองจะล้มเหลวพร้อมชื่อคอนเทนเนอร์นั้น มันไม่เคยหันไปใช้สแนปช็อตของแอปที่กำลังทำงานแทน
- การหยุดจะรอให้การสำรองคอนเทนเนอร์ที่กำลังทำอยู่เสร็จก่อน (สูงสุด 30 นาทีสำหรับการรันด้วยตนเอง และถึงขีดจำกัดเวลาของการสำรองสำหรับการรันตามกำหนดเวลา) ทั้งสองจึงไม่เคยหยุดและเริ่มคอนเทนเนอร์เดียวกันพร้อมกัน
- ก่อนหยุดคอนเทนเนอร์แรก BombVault จะจดไว้ว่าจะหยุดคอนเทนเนอร์ใด ถ้า BombVault ถูกปิดกลางคันในช่วงนั้น เมื่อเริ่มครั้งถัดไปจะเริ่มคอนเทนเนอร์เหล่านั้นใหม่ ส่งการแจ้งเตือน และรายการจะแสดงหมายเหตุสีแดงสำหรับคอนเทนเนอร์แต่ละตัวที่เริ่มไม่ได้
การดัมพ์ฐานข้อมูลอัตโนมัติ (ดู Features) ทำงานพร้อมการสำรองของคอนเทนเนอร์เองในหน้า Containers ไม่ใช่พร้อมรายการ ZFS ฐานข้อมูลที่คอนเทนเนอร์ถูกสำรองผ่านชุดข้อมูลเท่านั้นจะไม่ได้รับการดัมพ์ ดังนั้นให้กำหนดคำสั่งไว้ที่นี่
คอนเทนเนอร์หนึ่งอยู่ในรายการนี้และในหน้า Containers พร้อมกันได้ ข้อมูลของมันจะถูกเก็บสองครั้งในสองรีพอสิทอรี และ สำรองข้อมูลทั้งหมด จะหยุดมันสองครั้ง รายการจะแจ้งเรื่องนี้
การกู้คืน¶
เปิด การสำรองข้อมูล ที่รายการ เลือกข้อมูลสำรอง แล้วเลือกชุดข้อมูล ค่าเริ่มต้นคือชุดข้อมูลบนสุดของรายการ
- กู้คืนกลับเข้าชุดข้อมูล ไฟล์จากข้อมูลสำรองจะถูกเขียนลงในจุดเมานต์ของชุดข้อมูล ไฟล์ที่ชื่อซ้ำจะถูกเขียนทับ ไฟล์อื่นยังคงอยู่ ชุดข้อมูลจะไม่ถูกย้อนกลับหรือแทนที่ BombVault ตรวจว่าชุดข้อมูลเมานต์อยู่ มองเห็นได้ และเขียนได้ หนึ่งครั้งก่อนเริ่มและอีกครั้งก่อนเขียน ตำแหน่งที่มีชุดข้อมูลลูกเมานต์อยู่ภายในจะไม่ถูกเขียนอะไร ลูกจะคงไฟล์ เจ้าของ และสิทธิ์ของตัวเองไว้ และถูกกู้คืนจากข้อมูลสำรองของตัวเอง
- กู้คืนไปยังโฟลเดอร์ เลือกโฟลเดอร์ใต้
/mntBombVault ตรวจว่าโฟลเดอร์อยู่บนพูลหรือแชร์ที่เมานต์อยู่ และมีพื้นที่ว่างพอ ใช้ได้โดยไม่ต้องมีการเชื่อมต่อ SSH และใช้กับชุดข้อมูลที่ไม่มีอยู่แล้วได้ - ไปยังชุดข้อมูลใหม่ ระบุชุดข้อมูลที่ยังไม่มี BombVault จะสร้างชุดข้อมูลนั้นด้วยคุณสมบัติ ZFS ที่บันทึกไว้ในข้อมูลสำรองแล้วกู้คืนลงไป ดู กู้คืนเป็นชุดข้อมูลใหม่
- เลือกไฟล์ (ขั้นสูง): เขียนกลับเข้าชุดข้อมูลเฉพาะไฟล์และโฟลเดอร์ที่คุณเลือก
- ชุดข้อมูลทั้งหมดของการสำรองนี้ (ขั้นสูง): ชุดข้อมูลแต่ละชุดในต้นไม้ไปยังโฟลเดอร์ย่อยของตัวเองในโฟลเดอร์ที่คุณเลือก ชุดข้อมูลที่ถูกข้ามในการสำรองนั้นจะถูกระบุชื่อ
- จากเซิร์ฟเวอร์อื่น: หน้า การกู้คืน กู้คืนจากรีพอสิทอรีของ BombVault อื่น ไปยังโฟลเดอร์เสมอ: ชุดข้อมูลทั้งหมดของข้อมูลสำรองหนึ่งชุด แต่ละชุดไปยังโฟลเดอร์ย่อยของตัวเอง หรือชุดข้อมูลหนึ่งชุดในต้นไม้ ทั้งชุดหรือเฉพาะไฟล์ที่เลือก
รายการคอนเทนเนอร์ที่ต้องหยุดของรายการนั้นจะถูกเสนอให้ใช้เมื่อกู้คืนกลับเข้าชุดข้อมูลด้วย คอนเทนเนอร์เหล่านั้นจะหยุดอยู่ตลอดการกู้คืน และระหว่างนั้นการสำรองคอนเทนเนอร์จะรอ
สแนปช็อตเพื่อความปลอดภัย¶
ก่อนเขียนลงในชุดข้อมูล BombVault จะสร้างสแนปช็อต ZFS ของชุดข้อมูลนั้นชุดเดียวในชื่อ bombvault-prerestore-<เวลา> เปิดใช้งานเป็นค่าเริ่มต้น การปิดต้องยืนยันครั้งที่สอง ถ้าสร้างสแนปช็อตไม่ได้ จะไม่มีการกู้คืนใด ๆ
BombVault ไม่เคยลบสแนปช็อตเพื่อความปลอดภัยเอง รายการจะแสดงสแนปช็อตเหล่านี้พร้อมอายุและขนาด แต่ละอันมีปุ่ม ลบ และจะเตือนเมื่ออันที่เก่าที่สุดมีอายุเกิน 30 วัน เพราะมันยึดข้อมูลที่ถูกลบและเปลี่ยนแปลงไว้ในพูล
หากต้องการย้อนกลับหลังการกู้คืน ให้คัดลอกไฟล์ทีละไฟล์จาก .zfs/snapshot/bombvault-prerestore-<เวลา> ภายในชุดข้อมูล zfs rollback <dataset>@bombvault-prerestore-<เวลา> ใช้ได้เฉพาะเมื่อเป็นสแนปช็อตล่าสุดของชุดข้อมูลนั้น zfs rollback -r จะลบสแนปช็อตที่ใหม่กว่าทั้งหมด รวมถึงสแนปช็อตอัตโนมัติ
กู้คืนเป็นชุดข้อมูลใหม่¶
BombVault บันทึกคุณสมบัติ ZFS ที่ตั้งไว้เฉพาะของทุกชุดข้อมูลไปกับข้อมูลสำรองทุกครั้ง ได้แก่ compression, recordsize, quota, reservation, atime, xattr, acltype, casesensitivity และคุณสมบัติผู้ใช้ของคุณเอง ค่าที่สืบทอดและค่าแบบอ่านอย่างเดียวจะไม่ถูกบันทึก เพราะกลับมาเอง ข้อมูลสำรองจากก่อนที่ BombVault จะเริ่มบันทึกจะไม่มีคุณสมบัติเหล่านี้
- ไปยังชุดข้อมูลใหม่ จะรัน
zfs createพร้อมคุณสมบัติที่บันทึกไว้ทั้งหมด casesensitivity, normalization และ utf8only ตั้งได้ด้วยวิธีนี้เท่านั้น ส่วนโควตาและการจองพื้นที่จะตั้งหลังเขียนไฟล์ เพื่อไม่ให้ปฏิเสธการเขียนไฟล์ จุดเมานต์จะไม่ถูกนำไปใช้เพื่อให้สำเนาไม่ชนกับต้นฉบับcanmount,readonlyและการเข้ารหัสก็เช่นกัน เพื่อให้การกู้คืนเขียนได้ ชุดข้อมูลใหม่ที่อยู่ใต้ชุดข้อมูลที่เข้ารหัสจะได้การเข้ารหัสนั้นไปด้วย ชุดข้อมูลที่อยู่ด้านบนต้องมีอยู่ ถ้ามีอะไรล้มเหลวหลังการสร้าง ชุดข้อมูลใหม่จะยังอยู่บนเซิร์ฟเวอร์ เพราะ BombVault ไม่ทำลายชุดข้อมูลเลย - กู้คืนกลับเข้าชุดข้อมูล จะแสดงคุณสมบัติที่บันทึกไว้ข้างการกู้คืน ตั้งคุณสมบัติเหล่านี้ด้วย จะตั้งคุณสมบัติที่ชุดข้อมูลที่มีอยู่ยังรับได้ก่อนเขียนไฟล์ใดๆ ส่วนโควตาและการจองพื้นที่จะตั้งหลังเขียนไฟล์ เพื่อไม่ให้ปฏิเสธการเขียนไฟล์ ถ้าไม่เปิดสวิตช์นี้ ชุดข้อมูลจะคงการตั้งค่าเดิมไว้
สิ่งที่อยู่ในข้อมูลสำรอง¶
อยู่ในข้อมูลสำรอง: ไฟล์และโฟลเดอร์ของทุกชุดข้อมูลที่สำรอง พร้อมเจ้าของ โหมด เวลา และแอตทริบิวต์เพิ่มเติมตามที่ restic เก็บ รวมถึงคุณสมบัติ ZFS ที่ตั้งไว้เฉพาะของแต่ละชุดข้อมูล
ไม่อยู่ในข้อมูลสำรอง:
- เจ้าของและโหมดของโฟลเดอร์บนสุดของแต่ละชุดข้อมูลเอง (ทุกอย่างที่อยู่ใต้โฟลเดอร์นั้นรวมอยู่ด้วย) การกู้คืนกลับเข้าชุดข้อมูลจะคงโฟลเดอร์บนสุดเดิมไว้ ส่วนการกู้คืนไปยังโฟลเดอร์จะสร้างโฟลเดอร์นั้นด้วยโหมด
0755 - สแนปช็อต ZFS ที่มีอยู่
- ลูกที่ถูกข้ามหรือถูกเว้นไว้
- วอลุ่ม
หากจะกู้คืนไปยังพูลใหม่ ให้สร้างพูลแล้วกู้คืนแต่ละชุดข้อมูลไปยังชุดข้อมูลใหม่ ยังไม่ได้ตรวจสอบว่า NFSv4 ACL แบบที่ TrueNAS ใช้กับชุดข้อมูล SMB จะกลับมาตามที่คุณคาดหรือไม่ จึงควรทดลองกู้คืนกับข้อมูลของคุณเองก่อนจะพึ่งพา
ชุดข้อมูลที่เข้ารหัส¶
ชุดข้อมูลที่เข้ารหัสจะถูกสำรองเฉพาะเมื่อโหลดคีย์ไว้แล้ว ไม่เช่นนั้นจะถูกข้ามพร้อมคำเตือน ให้โหลดคีย์ด้วย zfs load-key แล้วเมานต์ชุดข้อมูล BombVault อ่านข้อมูลที่ถอดรหัสแล้วและเก็บลงในรีพอสิทอรีของ restic ซึ่งเข้ารหัสไว้ ถ้าคุณปิดการเข้ารหัสใน BombVault รีพอสิทอรีนั้นก็จะไม่ถูกเข้ารหัส
สแนปช็อตที่ค้างอยู่¶
สแนปช็อตของการสำรองมีชื่อ <dataset>@bombvault-<ตัวเลข 14 หลัก> เช่น cache/appdata@bombvault-20260924021500 (UTC) BombVault จะลบมันทันทีหลังการสำรอง ถ้าลบไม่สำเร็จ เช่น เพราะชุดข้อมูลกำลังถูกใช้งานหรือ BombVault ถูกหยุด BombVault จะลบมันในเวลาต่อไปนี้:
- ก่อนการสำรองครั้งถัดไปของรายการนั้น
- เมื่อ BombVault เริ่มทำงาน สำหรับทุกรายการ แม้โดเมนจะปิดอยู่
- เมื่อคุณลบรายการ
- เมื่อคุณกด ลบตอนนี้ ที่รายการ ซึ่งจะแสดงจำนวนที่เหลือด้วย
จะลบเฉพาะชื่อที่ตรงกับ bombvault- ตามด้วยตัวเลข 14 หลักพอดีเท่านั้น สแนปช็อตเพื่อความปลอดภัย สแนปช็อตของคุณเอง และสแนปช็อตอัตโนมัติจะไม่ถูกแตะต้อง หากต้องการลบเองด้วยมือ:
ความผิดปกติ¶
ลูกที่ถูกทำให้ว่างแทบไม่เปลี่ยนผลรวมของต้นไม้ขนาดใหญ่ การตรวจจับความผิดปกติจึงเฝ้าดูชุดข้อมูลแต่ละชุดของรายการแยกกัน ขนาด จำนวนไฟล์ ข้อมูลใหม่ และเวลาของ restic ต่างมีประวัติของตัวเอง ประวัตินี้ผูกกับชื่อของชุดข้อมูล จึงยังคงอยู่เมื่อรายการอื่นสำรองต้นไม้นั้นในภายหลัง
ชุดข้อมูลที่การรันครั้งก่อนสำรองไว้แต่การรันครั้งนี้อ่านไม่ได้จะนับว่าถูกทำให้ว่าง ตราบใดที่การเลือกของรายการไม่เปลี่ยน ซึ่งครอบคลุมคีย์ที่ยังไม่ได้โหลด ชุดข้อมูลที่ไม่ได้เมานต์ และชุดข้อมูลที่หายไปจากต้นไม้ ลูกที่คุณยกเว้นเองจะเปลี่ยนการเลือก ประวัติของมันจึงเริ่มใหม่ ตราบใดที่สิ่งที่พบเกี่ยวกับข้อมูลสูญหายยังเปิดอยู่ นโยบายการเก็บรักษาจะเก็บข้อมูลสำรองเก่าของชุดข้อมูลนั้นชุดเดียว และตัดส่วนที่เหลือของต้นไม้ตามปกติ
ในหน้า ความผิดปกติ ชุดข้อมูลแต่ละชุดมีบรรทัดของตัวเองในแผงของรายการ ซึ่งเปิดได้จาก การเฝ้าติดตาม บนการ์ดของรายการ หรือถ้ารายการนั้นไม่มีสิ่งที่เปิดอยู่ ก็เปิดจากบรรทัดของมันในการ์ด ไม่มีรายการที่เปิดอยู่ และต้นไม้ของรายการในหน้านี้จะแสดงสิ่งที่พบที่ยังเปิดอยู่ข้างชุดข้อมูลแต่ละชุด ลิงก์ในสิ่งที่พบจะเปิดแผงกู้คืนของรายการที่ข้อมูลสำรองดีล่าสุดของชุดข้อมูลนั้น การรันจะเสร็จสมบูรณ์หรือไม่จะตัดสินสำหรับทั้งรายการ เพราะการรันสำเร็จหรือล้มเหลวทั้งชุด
การตรวจเหล่านี้อธิบายไว้ใน Features ผู้ช่วยที่เชื่อมต่อผ่านเซิร์ฟเวอร์ MCP สามารถแสดงจุดกู้คืนของรายการ ZFS เริ่มการสำรอง และอ่านสิ่งที่พบได้ แต่การรับทราบสิ่งที่พบต้องทำในหน้า ความผิดปกติ
รหัสเหตุผล¶
หน้า ประวัติการรัน และการแจ้งเตือนจะระบุปัญหาด้วยรหัสใดรหัสหนึ่งต่อไปนี้ รหัสส่วนใหญ่มีวิธีแก้แสดงอยู่ข้าง ๆ บนหน้าด้วย
| รหัส | ความหมาย | สิ่งที่ต้องทำ |
|---|---|---|
ssh-missing |
ยังไม่ได้ตั้งค่าการเชื่อมต่อ SSH ในคอนเทนเนอร์นี้ | ตั้งค่าการเชื่อมต่อ SSH แบบเดียวกับการสำรองข้อมูล VM |
host-placeholder |
Host SSH: Address ยังเป็นค่าตัวอย่าง และ host.docker.internal ก็ไม่ตอบ |
ตั้ง Host SSH: Address เป็น IP ใน LAN ของเซิร์ฟเวอร์นี้ |
host-fallback |
Host SSH: Address ยังเป็นค่าตัวอย่าง แต่ host.docker.internal ใช้งานได้ |
ไม่ต้องทำอะไร หรือตั้ง IP ใน LAN |
ssh-unreachable |
เข้าถึงเซิร์ฟเวอร์ผ่าน SSH ไม่ได้ | ตรวจที่อยู่และพอร์ต และตรวจว่าเปิด SSH อยู่ |
ssh-auth |
เซิร์ฟเวอร์ปฏิเสธคีย์ของ BombVault | รันคำสั่งที่แสดงบนการ์ดการเชื่อมต่อบนเซิร์ฟเวอร์หนึ่งครั้ง |
zfs-not-found |
โฮสต์ SSH ไม่มีคำสั่ง zfs |
ชี้ Host SSH: Address ไปยังเครื่องที่เป็นเจ้าของพูล |
zfs-permission |
ผู้ใช้ SSH ไม่มีสิทธิ์รันคำสั่ง zfs นี้ | ใช้ root หรือดู TrueNAS SCALE |
uri-mismatch |
LIBVIRT_URI ระบุโฮสต์หรือผู้ใช้ต่างจากช่อง SSH |
ทำให้ตรงกัน หรือล้างช่อง SSH เพื่อให้ทั้งสองมาจาก URI |
zfs-error |
zfs รายงานข้อผิดพลาดอื่น | รายละเอียดจะแสดงข้อความของมัน |
propagation-missing |
การเมานต์ใหม่บนโฮสต์ไม่ถึงคอนเทนเนอร์ | ตั้ง Access Mode ของ Host Data เป็น Read/Write - Slave แล้วรีสตาร์ท BombVault |
invalid-name |
ชื่อชุดข้อมูลที่ BombVault ไม่รับ | เปลี่ยนชื่อชุดข้อมูล |
name-too-long |
ชุดข้อมูลในต้นไม้ยาวเกินกว่าจะใช้เป็นชื่อสแนปช็อต | เปลี่ยนชื่อ หรือเพิ่มชุดข้อมูลที่อยู่ใต้มันเป็นรายการ |
invalid-exclude |
รูปแบบการยกเว้นหรือลูกที่ถูกเว้นไว้ไม่ตรงกับรายการ | แก้รายการที่ข้อความระบุ หากต้องการเว้นชุดข้อมูลลูกทั้งชุด ให้ปิดมันแทนการเขียนรูปแบบ |
not-found |
ไม่มีชุดข้อมูลนี้บนเซิร์ฟเวอร์ | ลบรายการ หรือสร้างชุดข้อมูลใหม่ ข้อมูลสำรองของมันยังกู้คืนได้ |
not-filesystem |
นี่เป็นวอลุ่ม ไม่ใช่ระบบไฟล์ | ดู วอลุ่ม |
overlaps-item |
ชุดข้อมูลซ้อนทับกับรายการที่มีอยู่ | ดู รายการไม่ซ้อนทับกัน |
docker-storage |
ต้นไม้มีที่เก็บอิมเมจของ Docker | ดู ที่เก็บของ Docker |
nothing-readable |
ขณะนี้อ่านชุดข้อมูลใดในรายการไม่ได้เลย | ดูรหัสของชุดข้อมูลที่ถูกข้าม |
snapshot-failed |
สร้างสแนปช็อตไม่ได้ | รายละเอียดจะแสดงข้อความของ zfs |
containers-busy |
การสำรองคอนเทนเนอร์ยังทำงานอยู่ตอนที่ต้องหยุดคอนเทนเนอร์ | เริ่มใหม่ภายหลัง การรันตามกำหนดเวลาจะรอเอง |
consistency-stop-failed |
หยุดคอนเทนเนอร์ไม่ได้ จึงไม่มีการสร้างสแนปช็อต | ตรวจคอนเทนเนอร์ หรือนำออกจากรายการ |
pre-snapshot-failed |
คำสั่งก่อนสแนปช็อตล้มเหลว | รายละเอียดของการรันจะแสดงผลลัพธ์ของคำสั่ง |
container-unknown |
ไม่มีคอนเทนเนอร์ที่อยู่ในรายการ | นำออกจากรายการ |
container-is-self |
BombVault หยุดคอนเทนเนอร์ของตัวเองไม่ได้ | นำออกจากรายการ |
leftover-snapshots |
ยังมีสแนปช็อตที่ BombVault ลบไม่ได้ค้างอยู่บนเซิร์ฟเวอร์ | กด ลบตอนนี้ ดู สแนปช็อตที่ค้างอยู่ |
zvol |
วอลุ่มในต้นไม้ ถูกข้าม | ดู วอลุ่ม |
canmount-off |
ไม่เคยถูกเมานต์ (canmount=off) ถูกข้าม |
ถ้ามีข้อมูลอยู่ ให้เมานต์ หรือย้ายข้อมูลไปยังชุดข้อมูลลูก |
legacy-mount |
จุดเมานต์แบบ legacy ถูกข้าม | กำหนดจุดเมานต์ใต้ /mnt ให้ |
no-mountpoint |
ไม่มีจุดเมานต์ ถูกข้าม | กำหนดจุดเมานต์ใต้ /mnt ให้ |
not-mounted |
ไม่ได้เมานต์บนเซิร์ฟเวอร์ ถูกข้าม | เมานต์ด้วย zfs mount หรือตั้ง canmount=on |
key-not-loaded |
เข้ารหัสไว้และยังไม่ได้โหลดคีย์ ถูกข้าม | zfs load-key แล้วเมานต์ |
snapdir-disabled |
ปิดการเข้าถึงสแนปช็อตไว้ ถูกข้าม | zfs set snapdir=hidden <dataset> โฟลเดอร์ .zfs จะยังซ่อนอยู่ |
not-visible |
BombVault มองไม่เห็นจุดเมานต์ของชุดข้อมูล | ย้ายจุดเมานต์ไปไว้ใต้พาธ Host Data หรือแมปเข้าไปในคอนเทนเนอร์ที่พาธเดียวกันด้วย Read/Write - Slave |
shfs-only |
ชุดข้อมูลมองเห็นได้ผ่าน /mnt/user เท่านั้น ซึ่งซ่อนสแนปช็อต |
แมป /mnt ไม่ใช่ /mnt/user เป็น Host Data |
snapshot-not-visible |
สร้างสแนปช็อตแล้วแต่ไม่ปรากฏภายใน BombVault | รัน ทดสอบการเข้าถึงสแนปช็อต ดูด้านล่าง |
snapshot-loop |
สแนปช็อตไปไม่ถึง BombVault เพราะ Host Data ไม่ส่งต่อการเมานต์ใหม่ | ตั้ง Access Mode ของ Host Data เป็น Read/Write - Slave แล้วรีสตาร์ท BombVault |
backup-failed |
restic ล้มเหลวสำหรับชุดข้อมูลนี้ | รายละเอียดของการรันจะแสดงสาเหตุ |
not-reached |
การรันจบก่อนถึงชุดข้อมูลนี้ | รันการสำรองอีกครั้ง |
gone |
ชุดข้อมูลไม่อยู่บนเซิร์ฟเวอร์แล้ว | ไม่ต้องทำอะไร ข้อมูลสำรองของมันยังกู้คืนได้ |
read-only-mount |
BombVault อ่านชุดข้อมูลได้อย่างเดียว จึงกู้คืนเข้าไปไม่ได้ | ตั้งการแมปเป็น Read/Write - Slave หรือกู้คืนไปยังโฟลเดอร์ |
destination-not-mounted |
โฟลเดอร์ไม่ได้อยู่บนพูลหรือแชร์ที่เมานต์อยู่ | เลือกโฟลเดอร์บนพูลหรือแชร์ |
not-enough-space |
ปลายทางมีพื้นที่ว่างไม่พอ | เพิ่มพื้นที่ว่าง หรือเลือกโฟลเดอร์อื่น |
safety-snapshot-failed |
สร้างสแนปช็อตเพื่อความปลอดภัยไม่ได้ จึงไม่มีการกู้คืนใด ๆ | รายละเอียดจะแสดงข้อความของ zfs |
safety-name-too-long |
ชื่อชุดข้อมูลยาวเกินกว่าจะใช้กับสแนปช็อตเพื่อความปลอดภัย | ปิดสแนปช็อตเพื่อความปลอดภัย หรือกู้คืนไปยังโฟลเดอร์ |
dataset-exists |
มีชุดข้อมูลชื่อนี้อยู่แล้ว | เลือกชื่อใหม่ หรือกู้คืนลงในชุดข้อมูลนั้นเอง |
create-failed |
สร้างชุดข้อมูลใหม่ไม่ได้ | รายละเอียดแสดงข้อความจาก zfs ตรวจสอบว่าชุดข้อมูลด้านบนมีอยู่ |
new-dataset-not-visible |
สร้างชุดข้อมูลใหม่แล้ว แต่ BombVault มองไม่เห็น จึงไม่มีการกู้คืนใดๆ | ชุดข้อมูลยังอยู่บนเซิร์ฟเวอร์ เมานต์ไว้ใต้พาธ Host Data แล้วกู้คืนลงไป |
set-properties-failed |
ตั้งคุณสมบัติที่บันทึกไว้ไม่ได้ จึงไม่มีการกู้คืนใดๆ | รายละเอียดจะแสดงข้อความของ zfs |
set-limits-failed |
กู้คืนไฟล์แล้ว แต่ตั้งโควตาหรือการจองพื้นที่ที่บันทึกไว้ไม่ได้ | รายละเอียดแสดงข้อความจาก zfs ตั้งโควตาหรือการจองพื้นที่เองด้วย zfs set |
ตรวจว่าคอนเทนเนอร์มองเห็นอะไร¶
ทดสอบการเข้าถึงสแนปช็อต ที่รายการจะสร้างสแนปช็อตจริงของต้นไม้ ค้นหามันภายใน BombVault สำหรับชุดข้อมูลแต่ละชุด แล้วลบทิ้งอีกครั้ง นี่เป็นวิธีที่เร็วที่สุดในการพิสูจน์เส้นทางทั้งหมดก่อนการรันตามกำหนดเวลาครั้งแรก
หากต้องการดูเอง ให้รันคำสั่งนี้บนเซิร์ฟเวอร์:
แต่ละบรรทัดคือการเมานต์หนึ่งรายการภายในคอนเทนเนอร์ บรรทัดของชุดข้อมูลแสดงพาธภายในคอนเทนเนอร์ (ใต้ /host/user) และชื่อชุดข้อมูล ช่อง master:N ในบรรทัดนั้นหมายความว่าการเมานต์นี้ได้รับการเมานต์ที่โฮสต์ทำภายหลัง ซึ่งการเข้าถึงสแนปช็อตต้องการ ถ้าไม่มี ให้ตั้ง Access Mode ของ Host Data เป็น Read/Write - Slave แล้วรีสตาร์ท BombVault
TrueNAS SCALE¶
- เมื่อตั้งค่า
LIBVIRT_URIไว้ (เหมือนการสำรองข้อมูล VM บน TrueNAS) BombVault จะนำโฮสต์ ผู้ใช้ และพอร์ต SSH สำหรับคำสั่ง zfs จาก URI สำหรับค่าที่ไม่ได้ตั้งแยกไว้ หากไม่ได้สำรองข้อมูล VM ให้ตั้งLIBVIRT_HOST,LIBVIRT_SSH_USERและLIBVIRT_SSH_PORTแทน เพิ่มตัวแปรใน Additional Environment Variables - ผู้ใช้ที่ไม่ใช่ root ต้องมีสิทธิ์บนชุดข้อมูลบนสุดของรายการ ซึ่งจะครอบคลุมชุดข้อมูลทุกชุดที่อยู่ใต้มัน:
การกู้คืนไปยังชุดข้อมูลใหม่ต้องมีสิทธิ์ create บนชุดข้อมูลด้านบนด้วย และการตั้งคุณสมบัติที่บันทึกไว้ต้องมีสิทธิ์สำหรับคุณสมบัติเหล่านั้น
เซสชัน SSH ที่ไม่ใช่ root บน TrueNAS ไม่มี /usr/sbin ในพาธ BombVault จึงเรียก /usr/sbin/zfs โดยตรง
- Host Data ของแอปต้องเป็นพาธของโฮสต์ที่อยู่เหนือชุดข้อมูล เช่น /mnt/tank ไม่ใช่ ixVolume เมื่อใช้พาธของโฮสต์ แอปจะส่งต่อการเมานต์ใหม่ของโฮสต์ไปยัง BombVault (rslave) ซึ่งการเข้าถึงสแนปช็อตต้องการ