ZFS Snapshot เป็นไฟล์สำรองข้อมูลพร้อมการหมุน


14

ฉันมีระบบ FreeNAS ในพื้นที่และต้องการใช้ ZFS snapshots สำหรับการสำรองข้อมูล
FreeNAS มีงานการจำลองแบบในตัวซึ่งใช้

zfs send snapshot_name

เพื่อส่งสแน็ปช็อตไปยังระบบรีโมต แต่สิ่งนี้ต้องการระบบที่มี ZFS อยู่อีกด้านหนึ่ง

ฉันต้องการส่งสแนปชอตไปยังไฟล์ aa และส่งไฟล์บีบอัดและเข้ารหัสนี้ไปยังเครื่องระยะไกล

สิ่งนี้เป็นไปได้ด้วย

zfs send snapshot_name | gzip | openssl enc -aes-256-cbc -a -salt > file.gz.ssl

ทุกวันฉันทำสแนปชอตของพูลหน่วยเก็บและเก็บสแน็ปช็อตทุก ๆ 30 วัน
ทุกๆสแน็ปช็อตที่ถ่ายฉันจะไพพ์สแนปช็อตนี้เป็นไฟล์
- snapshot_file 1 มีทุกไฟล์อยู่ในนั้น (สมมติว่า 2GB)
- snapshot_file 2 มีการเปลี่ยนแปลงเป็น snapshot_file 1 เท่านั้น (สมมติว่า 5MB)
- snapshot_file 3 เก็บการเปลี่ยนแปลงเป็น snapshot_file 2; และอื่น ๆ

วันที่ 31 snapshot_file 1 กำลังถูกลบ (เพราะฉันต้องการเปลี่ยนแปลงจาก 30 วันล่าสุดเท่านั้น)

ดังนั้น snapshot_file 2 จำเป็นต้องเก็บทุกไฟล์ (2GB snapshot_file 1 + 5MB การเปลี่ยนแปลง)

แต่ด้วยวิธีนี้ทุกวัน (จากวันที่ 31 เป็นต้นไป) จะต้องสร้างไฟล์ 2GB ใหม่และส่งไปยังระบบระยะไกล นี่คือค่าใช้จ่ายมากเกินไป

อะไรจะเป็นวิธีที่ดีที่สุดในการใช้สแน็ปช็อตไปยังไฟล์เป็นกลยุทธ์การสำรองข้อมูลที่มีประวัติ X วัน

PS: ฉันรู้ว่ามีซอฟต์แวร์สำรองข้อมูลอยู่มากมาย (ตัวอย่างเช่น rdiff-backup) ซึ่งฉันสามารถใช้ได้ แต่ฉันอยากรู้ว่าวิธีนี้สามารถทำได้


ทำไมคุณไม่ใช้zfs recvในส่วนอื่น ๆ (ในสระว่ายน้ำที่มีzfs set compression=gzip-9เป็นต้น) การจัดเก็บไฟล์สแน็ปช็อตนั้นไม่มีประสิทธิภาพมากสำหรับฉัน
Stéphane Chazelas

1
@StephaneChazelas เพราะฉันไม่มีระบบไฟล์ ZFS ที่ปลายอีกด้าน ระบบระยะไกลของฉันคือกล่อง Gentoo กับ ext4 (ฉันรู้ว่าฉันสามารถติดตั้ง zfsonlinux แต่ผมค่อนข้างไม่)
มาร์ติน Grohmann

คำตอบ:


12

หากคุณเก็บสแน็ปช็อตไว้ในไฟล์ต่างกับระบบไฟล์ (เช่นกับzfs receive) ฉันเกรงว่าจะไม่สามารถทำได้

ZFS ทางด้านรับ

หากคุณใช้ ZFS ทางด้านการส่งและทางด้านรับคุณสามารถหลีกเลี่ยงการถ่ายโอนสแน๊ปช็อตทั้งหมดและถ่ายโอนความแตกต่างของสแน็ปช็อตเมื่อเปรียบเทียบกับสแน็ปช็อตก่อนหน้า:

ssh myserver 'zfs send -i pool/dataset@2014-02-04 pool/dataset@2014-02-05' | \
  zfs receive

ZFS รู้เกี่ยวกับสแนปชอตและเก็บบล็อกร่วมกันเพียงครั้งเดียว การมีระบบไฟล์ที่เข้าใจว่าสแน็ปช็อตช่วยให้คุณสามารถลบไฟล์เก่าได้โดยไม่มีปัญหา

ระบบไฟล์อื่น ๆ ทางด้านการรับ

ในกรณีของคุณคุณจัดเก็บสแน็ปช็อตในแต่ละไฟล์และระบบไฟล์ของคุณไม่รู้จักสแน็ปช็อต เมื่อคุณสังเกตเห็นแล้วการหมุนจะเป็นการหยุดพัก คุณต้องส่งสแนปชอตทั้งหมดซึ่งจะทำให้สิ้นเปลืองแบนด์วิดท์และพื้นที่เก็บข้อมูล แต่ช่วยให้คุณสามารถลบสแนปชอตแต่ละรายการได้ พวกเขาไม่ได้พึ่งพาซึ่งกันและกัน คุณสามารถทำภาพรวมที่เพิ่มขึ้นเช่นนี้:

ssh myserver 'zfs send -i pool/dataset@2014-02-04 pool/dataset@2014-02-05' \
  > incremental-2014-02-04:05

ในการกู้คืนสแน็ปช็อตที่เพิ่มขึ้นคุณต้องมีสแนปชอตก่อนหน้าเช่นกัน ซึ่งหมายความว่าคุณไม่สามารถลบส่วนเพิ่มเก่าได้

การแก้ปัญหาที่เป็นไปได้

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

หรือคุณสามารถดูวิธีการสำรองข้อมูลอื่น ๆ มี rsnapshotซึ่งใช้rsyncและลิงค์ยาก มันทำงานได้ดีมากในการหมุนและมีแบนด์วิดท์ที่มีประสิทธิภาพมากเนื่องจากมันต้องการการสำรองข้อมูลเต็มรูปแบบเพียงครั้งเดียวเท่านั้น

จากนั้นก็มีbareos มันเพิ่มขึ้นซึ่งเป็น bandwith- และประหยัดพื้นที่ มันมีคุณสมบัติที่ดีมาก มันสามารถคำนวณการสำรองข้อมูลเต็มรูปแบบจากชุดของส่วนเพิ่ม สิ่งนี้ทำให้คุณสามารถลบส่วนเพิ่มเก่าได้ แต่มันเป็นระบบที่ค่อนข้างซับซ้อนและมีไว้สำหรับการตั้งค่าที่ใหญ่กว่า

อย่างไรก็ตามทางออกที่ดีที่สุดคือการใช้ ZFS ทางด้านรับ มันจะเป็นแบนด์วิดธ์ที่มีประสิทธิภาพการจัดเก็บที่มีประสิทธิภาพและเร็วกว่าโซลูชั่นอื่น ๆ ข้อเสียเปรียบอย่างเดียวที่ฉันคิดได้ก็คือคุณควรมีหน่วยความจำอย่างน้อย 8 GiB ECC ในกล่องนั้น (คุณอาจใช้ได้กับ 4 GiB หากคุณไม่ได้ใช้บริการใด ๆ และใช้เพื่อใช้เท่านั้นzfs receive)


ใช่ฉันรู้ แต่ถ้าฉันลบ (เพราะฉันต้องการมีประวัติ 30 วันเท่านั้น) ชุดข้อมูลไฟล์ @ 2014-02-04 ฉันมีการเปลี่ยนแปลงที่เกิดขึ้นหลังจากวันที่ 4 ก.พ. แต่ไม่ใช่ทุกไฟล์
Martin Grohmann

2
@MartinGrohmann ฉันเห็นสิ่งที่คุณหมายถึงตอนนี้ นั่นคือความสวยงามของ ZFS คุณสามารถลบสแนปชอตเก่าบน ZFS ได้โดยไม่มีปัญหา ในระบบไฟล์อื่นคุณต้องเก็บไฟล์เก่าไว้ บางทีคุณก็ยังดีกับสิ่งที่ต้องการrsnapshotแล้ว หรือคุณสามารถเริ่มการเพิ่มขึ้นแบบไม่เพิ่มหลังจากหนึ่งเดือนแล้วลบการเพิ่มครั้งก่อนหน้า
Marco

ขอขอบคุณสำหรับความช่วยเหลือของคุณ; ฉันเพิ่งพบ ความซ้ำซ้อนซึ่งอาจเป็นวิธีที่จะไปกับความสามารถในการเข้ารหัส
Martin Grohmann

2
@MartinGrohmann Duplicity เป็นโปรแกรมที่ดี แต่มันทนทุกข์ทรมานจากปัญหาเดียวกัน หากคุณเพิ่มขึ้นเรื่อย ๆ พื้นที่ของคุณจะเพิ่มขึ้นเรื่อย ๆ คุณไม่สามารถเรียกคืนพื้นที่ได้โดยไม่สูญเสียแบนด์วิดท์และทำการสำรองข้อมูลเต็มรูปแบบใหม่ ไม่ว่าจะใช้ ZFS ทั้งสองด้านหรือดูที่bareosก็สามารถคำนวณการสำรองข้อมูลเต็มรูปแบบใหม่จากส่วนเพิ่มได้ ที่ช่วยให้คุณสามารถลบส่วนเพิ่มเก่าโดยไม่ต้องโอนทุกอย่างอีกครั้ง
Marco

หากแบนด์วิดท์จากแหล่งที่มาของคุณเป็นปัญหาทางออกที่เป็นไปได้ (ซึ่งฉันกำลังนำไปใช้กับ ZFS NAS ที่บ้านของฉันในตอนนี้) คือการส่งเฉพาะส่วนเพิ่มไปยังที่เก็บข้อมูลระยะไกลของคุณเสมอ มหาสมุทรดิจิตอล) ซึ่งจากนั้นสามารถเปิดสแน็ปช็อตเต็มรูปแบบล่าสุด zfs recv # จำนวนส่วนเพิ่มลงไปจากนั้นเก็บผลลัพธ์เป็นสแน็ปช็อตใหม่ VPS จะต้องมีความยาวเพียงพอที่จะสร้างการสำรองฐานใหม่ มหาสมุทรดิจิตอลมี API ช่วยให้สามารถสร้าง / ทำลาย VPS ได้ง่าย และระบบโลคัลของคุณต้องการเพียงส่งข้อมูลสำรองที่เพิ่มขึ้น
6651 stickj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.