วิธีการโคลนระบบไฟล์ btrfs ลงในสื่อต่าง ๆ ที่เก็บรักษาข้อมูลการแชร์ของสแน็ปช็อต


9

ฉันตัดสินใจลองใช้ความสามารถของการโจมตี btrfs ฉันตั้งค่า btrfs ด้วย

sudo mkfs.btrfs -m raid10 -d raid10 /dev/sda9 /dev/sdb9 /dev/sdc9 /dev/sdd9

ตอนนี้ฉันต้องการโคลนพาร์ทิชัน btrfs ที่มีอยู่ของฉัน (ซึ่งอยู่ด้านบนของ linux-raid) ไม่สามารถใช้งานง่าย ๆcp -aได้เนื่องจากมีการสำรองข้อมูลตามสแน็ปช็อตมากกว่า 40 รายการ (ซึ่งฉันต้องการเก็บไว้) และฉันจะเติมที่เก็บข้อมูลทั้งหมดจนเต็มฉันสามารถสำรองได้หลายครั้ง

จนถึงตอนนี้ฉันเห็นสองตัวเลือก:

partclone.btrfs -s /path/to/original/fs -o /dev/sda9 -b

และฉันคิดว่าฉันก็ต้อง btrfs balance start /dev/sda9

และ

สิ่งที่ต้องทำ: คัดลอกส่วนเพิ่มที่มีcp -aขนาดพอดีกับที่เก็บข้อมูลจากนั้นใช้bedupเพื่อยกเลิกการทำซ้ำไฟล์และวนซ้ำ

วิธีที่ต้องการ (เช่นแนวปฏิบัติที่ดีที่สุด) คืออะไร? ฉันจะชอบคนแรกมาก ควรใช้เวลาน้อยลง หรืออาจจะมี "gotcha" ที่ชั่วร้ายแฝงตัวอยู่ในขั้นตอนใด ๆ นี้ (นอกเหนือจากความจริงที่ว่า btrfs กำลังทดลองแน่นอน)


คำถามแรกนั้นหมดไปแล้ว อย่างไรก็ตามเครื่องมือที่ยอดเยี่ยมpartclone.btrfsคือมันไม่สนับสนุนระบบไฟล์หลายอุปกรณ์ :-(

คำตอบ:


7

ฉันถามคำถามที่คล้ายกันเมื่อ 2 ปีที่แล้ว

อย่างไรก็ตามในกรณีของฉันฉันวางแผนที่จะคัดลอกอุปกรณ์เดียวไปยัง raid0 เท่านั้น

ฉันในที่สุดก็พบวิธีการแก้ปัญหา ในขณะที่คุณไม่สามารถแปลงจาก raid0 เป็น raid10 ได้ แต่ดูเหมือนว่าตั้งแต่เคอร์เนล 3.3 ตอนนี้คุณสามารถทำได้ ดังนั้นทางออกนั้นอาจใช้ได้ผลกับคุณในที่สุด

ปัญหาเกี่ยวกับวิธีการนั้นคือการคัดลอก fsuid ซึ่งหมายความว่าคุณไม่สามารถติดตั้งทั้ง FS และสำเนาบนเครื่องเดียวกันได้ ในตอนนั้นไม่มีเครื่องมือในการเปลี่ยนfsuidFS แต่อาจมีการเปลี่ยนแปลงในขณะนี้

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

จากนั้นติดตั้ง COW'd FS แทนของเดิมเพิ่มอุปกรณ์สำหรับการคัดลอก FS และลบอุปกรณ์ของ COW

สำหรับการคัดลอกเมื่อเขียนคุณสามารถใช้อุปกรณ์ทำแผนที่

สำหรับสำเนาที่ใช้แล้วทิ้งในพื้นที่เขียนฉันใช้อุปกรณ์วนรอบ

สมมติว่าคุณต้องการที่จะโคลน/dev/sdaบน/dev/sd[bcde]:

สร้างที่เก็บ COW back:

truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store

ตอนนี้เลิกเมานท์ FS ต้นกำเนิดถ้าติดตั้งและmodprobe -r btrfsเพื่อให้แน่ใจว่ามันจะไม่ไปรบกวนและทำให้ลืมการสแกนอุปกรณ์

จากนั้นทำให้อุปกรณ์ COW'd:

echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed

ตอนนี้/dev/mapper/cowedเป็นเหมือน/dev/sdaยกเว้นว่าสิ่งใดที่เขียนถึงมันจะจบลง/dev/loop0และ/dev/sdaจะไม่มีใครแตะต้อง

ตอนนี้คุณสามารถเมานต์:

mount /dev/mapper/cowed /mnt

เพิ่มอุปกรณ์อื่น ๆ :

btrfs dev add /dev/sd[bcde] /mnt

และนำอันเก่าออก:

btrfs dev del /dev/mapper/cowed /mnt

เมื่อจบแล้วคุณอาจต้องการปิดและถอดปลั๊กหรือ/dev/sdaอ่านอย่างเดียวเพราะมันมีคุณสมบัติที่เหมือนกันกับที่อื่น ๆbtrfsอาจยังยุ่งอยู่กับมัน

ตอนนี้ถ้าฉันเข้าใจถูกต้องสมมติว่าคุณมี btrfs-prog เมื่อเร็ว ๆ นี้คุณควรจะทำสิ่งต่อไปนี้

btrfs balance start -d convert=raid10 /mnt

เพื่อแปลงเป็น raid10 ตามทฤษฎีแล้วควรตรวจสอบให้แน่ใจว่าทุก ๆ ชิ้นข้อมูลถูกคัดลอกบนดิสก์อย่างน้อย 2 แผ่น

ฉันขอแนะนำอย่างยิ่งให้คุณทำการทดสอบกับ dummy btrfs บนอุปกรณ์ลูปก่อนเพราะทั้งหมดนี้มาจากหน่วยความจำและฉันอาจได้รับมันผิด (ดูตัวอย่างคำตอบแรกของฉันก่อนที่จะแก้ไข)

โปรดทราบว่าตั้งแต่เคอร์เนล 3.6 btrfs ใช้ส่ง / รับบิตเช่นใน zfs นั่นอาจเป็นตัวเลือกสำหรับคุณ


คำตอบที่ดีขอบคุณ ฉันจะทดสอบมัน ตอนนี้ฉันกำลังทดลองส่ง / รับ
Adam Ryczkowski

@ Stéphane Chazelas ลิงก์ gmane นั้นตายแล้ว คุณสามารถปรับคำตอบของคุณ?
Jonas Stein

4

ความคิดของสเตฟานสามารถทำได้ผ่าน btrfs builtin เครื่องมือ (ที่ว่าทำไมมันเย็น): ทำให้ btrfs เก่าอุปกรณ์เมล็ดผ่านทางเพิ่มอุปกรณ์เอาอุปกรณ์เมล็ดทำbtrfstune -S 1 /dev/device btrfs balance startอุปกรณ์ seed เป็นอุปกรณ์แบบอ่านอย่างเดียวที่อาจเป็นส่วนหนึ่งของระบบไฟล์แบบอ่านได้


1

ฉันลองทำตามคำแนะนำของ @ ignis เพื่อใช้การเพาะ แต่มีปัญหากับมัน ระบบโยนข้อผิดพลาดเมื่อพยายามลบอุปกรณ์เมล็ดและฉันไม่สามารถเอาชนะมันได้ จากนั้นฉันก็พบว่ามี (ตอนนี้ - btrfs-progs v3.19-64-g19a806f อาจจะไม่ใช่ก่อนหน้านี้) คำสั่ง:

  btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>

ซึ่งทำให้การโคลนระบบไฟล์ btrfs ที่มีอยู่ของฉัน (ซึ่งอยู่ในโลจิคัลวอลุ่ม LVM) ไปยังพาร์ติชันใหม่เป็น doddle โปรดทราบว่า ณ เดือนพฤษภาคม 2558 มันไม่ทำงานสำหรับโปรไฟล์ RAID5 / 6 - ตรวจสอบข้อมูลเต็มหน้า


1
อย่าใช้btrfs replace startเพื่อจุดประสงค์ในการสำรองข้อมูล !! มันทำให้โครงสร้างอุปกรณ์ของคุณเสียหายและทำให้ไดร์ฟไม่สามารถต่อเชื่อมได้! ฉันไม่สามารถกู้คืนจากข้อผิดพลาดได้ดังนั้นฉันจึงกู้คืนสำเนารูปภาพจากอุปกรณ์บล็อกอื่นด้วยdd -tool ใช้btrfs replaceสำหรับการโอนย้ายไดรฟ์สุดท้ายเท่านั้น
Karmus

0

ตัวเลือกที่ 1 - การคัดลอกข้อมูลแล้วเปลี่ยน UUID

ตรวจสอบให้แน่ใจว่าพาร์ติชันต้นทางนั้นถูก unmount และจะไม่ถูกเมาต์อัตโนมัติ

ใช้อย่างใดอย่างหนึ่งdd(ช้าใบ้) หรือpartclone.btrfs -b -s /dev/src -o /dev/target

ใช้btrfstune -uเพื่อเปลี่ยน UUID หลังจากทำสำเนาและก่อนทำการติดตั้ง

คำเตือนการสูญเสียข้อมูล : ทำไม่ได้พยายามที่จะ (อัตโนมัติ) ติดทั้งต้นฉบับหรือคัดลอกจน UUID มีการเปลี่ยนแปลง


ตัวเลือก 2 - btrfs-clone

ฉันไม่ได้ลองเป็นการส่วนตัวbtrfs-cloneแต่เป็นการอ้างว่าจะทำการโคลนระบบไฟล์ BTRFS ที่มีอยู่ไปเป็นระบบใหม่โดยทำการโคลนแต่ละชุดย่อยตามลำดับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.