ข้ามไปที่เนื้อหา

ชุดข้อมูล 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 ตรวจว่าชุดข้อมูลเมานต์อยู่ มองเห็นได้ และเขียนได้ หนึ่งครั้งก่อนเริ่มและอีกครั้งก่อนเขียน ตำแหน่งที่มีชุดข้อมูลลูกเมานต์อยู่ภายในจะไม่ถูกเขียนอะไร ลูกจะคงไฟล์ เจ้าของ และสิทธิ์ของตัวเองไว้ และถูกกู้คืนจากข้อมูลสำรองของตัวเอง
  • กู้คืนไปยังโฟลเดอร์ เลือกโฟลเดอร์ใต้ /mnt BombVault ตรวจว่าโฟลเดอร์อยู่บนพูลหรือแชร์ที่เมานต์อยู่ และมีพื้นที่ว่างพอ ใช้ได้โดยไม่ต้องมีการเชื่อมต่อ 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 หลักพอดีเท่านั้น สแนปช็อตเพื่อความปลอดภัย สแนปช็อตของคุณเอง และสแนปช็อตอัตโนมัติจะไม่ถูกแตะต้อง หากต้องการลบเองด้วยมือ:

zfs destroy -r cache/appdata@bombvault-20260924021500

ความผิดปกติ

ลูกที่ถูกทำให้ว่างแทบไม่เปลี่ยนผลรวมของต้นไม้ขนาดใหญ่ การตรวจจับความผิดปกติจึงเฝ้าดูชุดข้อมูลแต่ละชุดของรายการแยกกัน ขนาด จำนวนไฟล์ ข้อมูลใหม่ และเวลาของ 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 สำหรับชุดข้อมูลแต่ละชุด แล้วลบทิ้งอีกครั้ง นี่เป็นวิธีที่เร็วที่สุดในการพิสูจน์เส้นทางทั้งหมดก่อนการรันตามกำหนดเวลาครั้งแรก

หากต้องการดูเอง ให้รันคำสั่งนี้บนเซิร์ฟเวอร์:

docker exec BombVault grep zfs /proc/self/mountinfo

แต่ละบรรทัดคือการเมานต์หนึ่งรายการภายในคอนเทนเนอร์ บรรทัดของชุดข้อมูลแสดงพาธภายในคอนเทนเนอร์ (ใต้ /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 ต้องมีสิทธิ์บนชุดข้อมูลบนสุดของรายการ ซึ่งจะครอบคลุมชุดข้อมูลทุกชุดที่อยู่ใต้มัน:
zfs allow <user> snapshot,destroy,mount <dataset>

การกู้คืนไปยังชุดข้อมูลใหม่ต้องมีสิทธิ์ create บนชุดข้อมูลด้านบนด้วย และการตั้งคุณสมบัติที่บันทึกไว้ต้องมีสิทธิ์สำหรับคุณสมบัติเหล่านั้น

เซสชัน SSH ที่ไม่ใช่ root บน TrueNAS ไม่มี /usr/sbin ในพาธ BombVault จึงเรียก /usr/sbin/zfs โดยตรง - Host Data ของแอปต้องเป็นพาธของโฮสต์ที่อยู่เหนือชุดข้อมูล เช่น /mnt/tank ไม่ใช่ ixVolume เมื่อใช้พาธของโฮสต์ แอปจะส่งต่อการเมานต์ใหม่ของโฮสต์ไปยัง BombVault (rslave) ซึ่งการเข้าถึงสแนปช็อตต้องการ