ฉันถามคำถามที่คล้ายกันเมื่อ 2 ปีที่แล้ว
อย่างไรก็ตามในกรณีของฉันฉันวางแผนที่จะคัดลอกอุปกรณ์เดียวไปยัง raid0 เท่านั้น
ฉันในที่สุดก็พบวิธีการแก้ปัญหา ในขณะที่คุณไม่สามารถแปลงจาก raid0 เป็น raid10 ได้ แต่ดูเหมือนว่าตั้งแต่เคอร์เนล 3.3 ตอนนี้คุณสามารถทำได้ ดังนั้นทางออกนั้นอาจใช้ได้ผลกับคุณในที่สุด
ปัญหาเกี่ยวกับวิธีการนั้นคือการคัดลอก fsuid ซึ่งหมายความว่าคุณไม่สามารถติดตั้งทั้ง FS และสำเนาบนเครื่องเดียวกันได้ ในตอนนั้นไม่มีเครื่องมือในการเปลี่ยนfsuid
FS แต่อาจมีการเปลี่ยนแปลงในขณะนี้
แนวคิดคือการเพิ่มเลเยอร์การทำสำเนาการเขียนที่ด้านบนของอุปกรณ์ดั้งเดิมเพื่อให้สามารถเขียนได้ แต่การแก้ไขใด ๆ จะกระทำในที่อื่นซึ่งคุณสามารถละทิ้งได้ในภายหลัง นั่นหมายความว่าคุณต้องการพื้นที่เก็บข้อมูลเพิ่มเติม (เช่นในไดรฟ์ภายนอก)
จากนั้นติดตั้ง 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 นั่นอาจเป็นตัวเลือกสำหรับคุณ