ถ้าตัดสินใจใช้ ZFS บนอุปกรณ์จัดเก็บ ยินดีด้วย! ใช้ filesystem ที่ซับซ้อนและ feature-rich ที่สุดบนดาวเคราะห์ ถ้าตัดสินใจจัดเก็บข้อมูลระยะยาว เช่น รูปภาพวิดีโอครอบครัว พิจารณา ZFS อย่างจริงจัง ใน setup redundant เช่น ฮาร์ดดิสก์ 4 ตัว mirror กัน รับประกันว่าไม่สูญเสียบิตเดียวจาก bit rot หรือ storage degradation ตามเวลา ข้อผิดพลาดคอมพิวเตอร์ ZFS self-heal และ recover ข้อมูลอัตโนมัติ อัลกอริทึมซับซ้อน hashes และ Merkle trees รับประกันความสมบูรณ์ของข้อมูล
แต่ tutorial นี้ไม่ครอบคลุมทำไม ZFS ดีที่สุดสำหรับ archive ข้อมูลระยะยาว แตพูดถึง snapshots และ clones ทำอะไรให้คุณได้บ้าง
ZFS Snapshots และ Clones คืออะไร?
Snapshot คือภาพถ่ายสถานะข้อมูลที่แน่นอน ณ จุดเวลาหนึ่ง เช่น ทำเว็บซับซ้อน เก็บโค้ด ฐานข้อมูล รูปภาพบน ZFS dataset เปลี่ยนดีไซน์ แก้ไขรูป เปลี่ยนมิติ layout แก้โค้ดให้เข้ากัน ถ้าต้องการ revert กลับดีไซน์เดิม ต้อง revert การเปลี่ยนแปลงทีละอย่าง ด้วย ZFS สร้าง snapshot ดีไซน์ปัจจุบัน ทำการเปลี่ยนแปลงทั้งหมด ถ้าไม่พอใจดีไซน์ใหม่ roll back กลับ snapshot ก่อนหน้าได้เลย ใช่ มี Git, GitHub และ code editors บางตัวที่ snapshot และ roll back ได้ แต ZFS มีฟีเจอร์เพิ่ม:
- Snapshots เป็น global สร้าง snapshot ข้อมูลทั้งหมดในโปรเจกต์
- Snapshots และ rollbacks เกือบ tức THEN ไม่ว่าขนาดโปรเจกต์ใหญ่แค่ไหน (แม้หลายร้อย GB)
ไม่มี limit จำนวน snapshots สามารถมี "Design 1", "Design 2", "Design 3" สลับไปมาได้ ทำการเปลี่ยนแปลง สร้าง snapshot ใหม่ "Design 2 - Improved"
Clones
Snapshots คือ frozen data states ที่กลับได้ ส่วน clones เหมือน branches เริ่มจากจุดร่วม เข้าใจง่ายจากสถานการณ์: สร้างวิดีโอแคมเปญโฆษณา สร้าง snapshot วิดีโอนี้ (จริงๆคือ ZFS dataset ที่เก็บวิดีโอ) clone snapshot นี้ 3 ครั้ง ให้ "Clone 1" พนักงานคนหนึ่ง "Clone 2" อีกคน "Clone 3" คนที่สาม ตอนนี้แต่ละคนทำงานในพื้นที่ของตัวเอง ทำการเปลี่ยนแปลงที่ต้องการ
ทำไมมีประโยชน์? วิดีโอใช้พื้นที่ดิสก์มาก Raw film ความละเอียดสูงอาจต้องการหลายร้อยหรือพัน GB ถ้าวิดีโอหลักต้อง 500GB และ 3 คนต้อง clone ทำงาน divergent changes จะต้อง >1500GB
ด้วย ZFS snapshot และ 3 (หรือมากกว่า) clones ต้องการไม่เกิน 501GB บล็อกข้อมูลที่ไม่เปลี่ยน (ทุก clone ร่วมกัน) จัดเก็บเพียงครั้งเดียว วิธีนี้แค่ differences ที่แต่ละ editor เพิ่ม จัดเก็บเป็นข้อมูลเพิ่มเต ในสถานการณ์จริง อาจต้อง ~650GB สำหรับ clones ทั้ง 3 ใช้จัดเก็บและทรัพยากรอย่างมีประสิทธิภาพ ข้อมูล isolated อย่างเหมาะสม แต่ละ editor ทำงานเต็มที่
มีประโยชน์สำหรับสถานการณ์อื่นๆ ที่ต้อง branch เนื้อหาเดียวกันหลายทิศทาง แม้พื้นที่ดิสก์ไม่ใช่ปัญหา
คำสั่งทำงานกับ ZFS Snapshots
แม้ distros อื่นใช้ filesystem/volume manager นี้ได้ Ubuntu ให้ support ดีที่สุดจนถึงตอนนี้
เนื่องจากไม่ใช่ทุก user มี whole disk ให้ ZFS อาจประโยชน์รู้ว่าสร้าง pool บน empty partition ได้ด้วยคำสั่งอย่าง sudo zpool create pool_name /dev/sda3 โดย /dev/sda3 คือ device name ของ partition ที่ 3 บนดิสก์แรก
หลังติดตั้งแพ็กเกจที่เหมาะสมและสร้าง ZFS dataset แรก นี่คือวิธีสร้าง snapshot
ก่อน หาชื่อ ZFS dataset ที่ต้องการ snapshot
zfs list
ตัวอย่าง ชื่อ dataset คือ data ชื่อ snapshot จะเป็น snap1 แทนค่าในคำสั่งถัดไปด้วยสิ่งที่ใช้ในกรณีของคุณ สร้าง snapshot ใส่:
sudo zfs snapshot data@snap1
ถ้า dataset ชื่อ videos ต้องการเรียก snapshot first คำสั่งจะเป็น:
sudo zfs snapshot videos@first
Roll back การเปลี่ยนแปลง คืนค่า dataset ให้เป็นเนื้อหาที่แน่นอนตอนสร้าง snapshot ใช้:
sudo zfs rollback data@snap1
ตอนไม่ต้องการ snapshot ลบด้วย:
sudo zfs destroy data@snap1
คำสั่งทำงานกับ ZFS Clones
สมมติมี snapshot ชื่อ "data@snap1" clone ด้วย:
sudo zfs clone data@snap1 data/clone1
ลบ clone:
sudo zfs destroy data/clone3
ยัง snapshot clones ได้อีกด้วย
sudo zfs snapshot data/clone2@snap_of_clone
อนาคตต้องการจำ snapshots และ clones ทั้งหมดที่สร้าง ใช้:
zfs list -t all
สรุป
ครอบคลุม basic operations ทั้งหมดกับ ZFS snapshots และ clones อาจประโยชน์รู้ว่าแต่ละ dataset มี hidden directory ชื่อ ".zfs" ด้วยคำสั่งอย่าง ls /data/.zfs/snapshot/snap1/ สามารถดูสถานะไฟล์ใน snapshot เนื่องจากทำงานเหมือน directory ธรรมดา (read-only) ยัง copy ไฟล์เดี่ยวจาก snapshot ได้ ถ้าไม่ต้อง revert ทั้ง snapshot