Tôi đã hỏi một câu hỏi tương tự 2 năm trước.
Tuy nhiên, trong trường hợp của tôi, tôi chỉ dự định sao chép một thiết bị duy nhất lên raid0.
Cuối cùng tôi đã tìm thấy một giải pháp . Tại thời điểm bạn không thể chuyển đổi từ raid0 sang raid10, nhưng có vẻ như vậy kể từ kernel 3.3, bây giờ bạn có thể. Vì vậy, giải pháp đó có thể làm việc cho bạn cuối cùng.
Một vấn đề với cách tiếp cận đó là nó sao chép fsuid. Điều đó có nghĩa là bạn không thể gắn cả FS và bản sao của nó trên cùng một máy. Vào thời điểm đó, không có công cụ nào để thay đổi fsuid
FS, nhưng giờ đây nó có thể đã thay đổi.
Ý tưởng là thêm một lớp sao chép trên đầu thiết bị gốc để có thể ghi nó vào, nhưng mọi sửa đổi đều được thực hiện ở một nơi khác mà bạn có thể loại bỏ sau này. Điều đó có nghĩa là bạn cần thêm dung lượng lưu trữ (ví dụ trên ổ đĩa ngoài).
Sau đó gắn FS đó của COW thay vì bản gốc, thêm các thiết bị cho bản sao FS và xóa thiết bị của COW.
Để sao chép khi ghi, bạn có thể sử dụng trình ánh xạ thiết bị.
Đối với bản sao dùng một lần trên khu vực ghi, ở đây tôi sử dụng một thiết bị lặp.
Giả sử bạn muốn sao chép /dev/sda
vào /dev/sd[bcde]
:
Tạo cửa hàng trở lại COW:
truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store
Bây giờ hãy ngắt kết nối FS gốc nếu được gắn và modprobe -r btrfs
để đảm bảo rằng nó sẽ không can thiệp và khiến thiết bị quên thiết bị quét.
Sau đó tạo thiết bị COW'd:
echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed
Bây giờ /dev/mapper/cowed
giống như /dev/sda
ngoại trừ rằng bất cứ điều gì được viết cho nó sẽ kết thúc /dev/loop0
và /dev/sda
sẽ không bị ảnh hưởng.
Bây giờ, bạn có thể gắn kết nó:
mount /dev/mapper/cowed /mnt
Thêm các thiết bị khác:
btrfs dev add /dev/sd[bcde] /mnt
Và loại bỏ cái cũ:
btrfs dev del /dev/mapper/cowed /mnt
Khi điều đó kết thúc, bạn có thể muốn tắt máy và rút phích cắm hoặc /dev/sda
đọc thành công vì nó có cùng tính năng như những cái khác, btrfs
vẫn có thể gây rối với nó.
Bây giờ, nếu tôi hiểu chính xác, giả sử bạn đã có btrfs-prog gần đây, bạn sẽ có thể thực hiện:
btrfs balance start -d convert=raid10 /mnt
Để chuyển đổi sang raid10. Về lý thuyết, điều đó sẽ đảm bảo rằng mọi đoạn dữ liệu được sao chép trên ít nhất 2 đĩa.
Tôi thực sự khuyên bạn nên thực hiện kiểm tra trên một btrfs giả trên các thiết bị lặp trước vì tất cả những gì là từ bộ nhớ và tôi có thể đã hiểu sai (ví dụ: xem câu trả lời ban đầu của tôi trước khi chỉnh sửa).
Lưu ý rằng vì kernel 3.6, btrfs thực hiện gửi / nhận một chút như trong zfs. Đó có thể là một lựa chọn cho bạn.