Cách sao chép hệ thống tập tin btrfs vào dữ liệu chia sẻ lưu trữ phương tiện khác nhau


9

Tôi đã quyết định thử khả năng đột kích btrfs. Tôi thiết lập một btrfs với

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

Bây giờ tôi muốn sao chép phân vùng btrfs hiện có của mình, (nằm trên đỉnh của linux-raid). không thể sử dụng đơn giản cp -a, vì có hơn 40 bản sao lưu dựa trên ảnh chụp nhanh (mà tôi muốn giữ lại) và tôi chỉ đơn giản sẽ lấp đầy tất cả dung lượng lưu trữ mà tôi có thể dự phòng nhiều lần.

Cho đến nay tôi có thể thấy hai tùy chọn:

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

và tôi cho rằng tôi cũng sẽ cần phải btrfs balance start /dev/sda9

do: sao chép tăng dần với cp -asố lượng vừa với bộ lưu trữ, sau đó sử dụng bedupđể sao chép lại các tệp và vòng lặp.

Phương pháp ưa thích (tức là thực hành tốt nhất) là gì? Tôi rất thích cái đầu tiên; nó sẽ mất ít thời gian hơn Hoặc có thể có một số "gotcha" xấu xa ẩn nấp trong bất kỳ quy trình nào (bên cạnh thực tế là btrfs là thử nghiệm, tất nhiên)


Câu hỏi đầu tiên chỉ đơn giản là hết câu hỏi; tuy nhiên công cụ tuyệt vời partclone.btrfsnày rõ ràng là nó không hỗ trợ các hệ thống tệp đa thiết bị. :-(

Câu trả lời:


7

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 fsuidFS, 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/sdavà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/cowedgiống như /dev/sdangoại trừ rằng bất cứ điều gì được viết cho nó sẽ kết thúc /dev/loop0/dev/sdasẽ 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, btrfsvẫ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.


Câu trả lời tuyệt vời, cảm ơn bạn. Tôi sẽ kiểm tra nó. Bây giờ tôi đang thử nghiệm gửi / nhận.
Adam Ryczkowski

@ Stéphane Chazelas Các liên kết gmane đã chết (có thể là mãi mãi). Bạn có thể điều chỉnh câu trả lời của bạn?
Jonas Stein

4

Ý tưởng của Stephane có thể được thực hiện thông qua các công cụ dựng sẵn btrfs (đó là lý do tại sao nó tuyệt vời): biến btrfs cũ thành một thiết bị hạt giống thông qua btrfstune -S 1 /dev/device, thêm thiết bị, loại bỏ thiết bị hạt giống, làm btrfs balance start. Thiết bị hạt giống là một thiết bị chỉ đọc có thể là một phần của hệ thống tệp có thể ghi.


1

Tôi đã thử làm theo gợi ý của @ ignis để sử dụng seeding nhưng gặp vấn đề với nó; hệ thống đã gây ra lỗi khi cố gắng loại bỏ thiết bị seed và tôi không thể khắc phục điều này. Sau đó, tôi thấy rằng có (bây giờ - btrfs-pross v3.19-64-g19a806f, có thể không sớm hơn) lệnh:

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

mà đã sao chép hệ thống tập tin btrfs hiện có của tôi (trong một khối logic LVM) vào một phân vùng mới một doddle. Lưu ý rằng vào tháng 5 năm 2015, nó không hoạt động đối với cấu hình RAID5 / 6 - kiểm tra trang man để biết thông tin đầy đủ.


1
Không bao giờ sử dụng btrfs replace startcho mục đích sao lưu !! Nó làm hỏng cây thiết bị của bạn và làm cho ổ đĩa không thể đếm được! Tôi không thể phục hồi từ các lỗi, vì vậy tôi đã khôi phục một bản sao hình ảnh từ một thiết bị khối khác bằng dd -tool. Chỉ sử dụng btrfs replaceđể di chuyển ổ đĩa cuối cùng.
Karmus

0

Tùy chọn 1 - Sao chép dữ liệu sau đó thay đổi UUID

Đảm bảo rằng phân vùng nguồn không được đếm và sẽ không được tự động hóa.

Sử dụng dd(chậm, câm) hoặcpartclone.btrfs -b -s /dev/src -o /dev/target

Sử dụng btrfstune -uđể thay đổi UUID sau khi sao chép và trước khi gắn.

Cảnh báo mất dữ liệu : Đỗ KHÔNG cố gắng (tự động) gắn kết hoặc gốc hoặc sao chép cho đến khi UUID đã thay đổi


Lựa chọn 2 - btrfs-clone

Tôi đã không cố gắng cá nhân btrfs-clone, nhưng nó có ý định sao chép một hệ thống tệp BTRFS hiện có sang một hệ thống mới, sao chép từng subvolume theo thứ tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.