Cara mengkloning sistem file btrfs ke dalam media yang berbeda yang menjaga data berbagi snapshots

9

Saya telah memutuskan untuk mencoba kemampuan serangan btrfs. Saya mengatur btrfs dengan

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

Sekarang saya ingin mengkloning partisi btrf saya yang ada, (yang berada di atas linux-raid). tidak dapat menggunakan yang sederhana cp -a, karena ada lebih dari 40 backup berbasis snapshot (yang ingin saya pertahankan), dan saya hanya akan memenuhi semua penyimpanan yang dapat saya simpan beberapa kali.

Sejauh ini saya bisa melihat dua opsi:

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

dan saya kira saya juga perlu btrfs balance start /dev/sda9

dan

lakukan: incrementaly copy dengan cp -asebanyak yang cocok ke dalam penyimpanan, dan kemudian gunakan bedupuntuk menghapus duplikat file, dan loop.

Apa metode yang disukai (praktik terbaik)? Saya lebih suka yang pertama; itu harus memakan waktu jauh lebih sedikit. Atau mungkin ada beberapa "gotcha" jahat yang bersembunyi di salah satu prosedur ini (di samping fakta bahwa btrfs bersifat eksperimental, tentu saja)


Pertanyaan pertama hanyalah pertanyaan; betapapun hebatnya alat partclone.btrfsini, jelas tidak mendukung sistem file multi-perangkat. :-(

Adam Ryczkowski
sumber

Jawaban:

7

Saya mengajukan pertanyaan serupa 2 tahun yang lalu.

Namun dalam kasus saya, saya hanya berencana untuk menyalin satu perangkat ke raid0.

Saya akhirnya menemukan solusi . Pada saat itu Anda tidak dapat mengkonversi dari raid0 ke raid10, tetapi sepertinya itu sejak kernel 3.3, Anda sekarang bisa. Sehingga solusi itu mungkin bekerja untuk Anda pada akhirnya.

Masalah dengan pendekatan itu adalah bahwa ia menyalin fsuid. Yang berarti Anda tidak dapat memasang FS dan salinannya pada mesin yang sama. Pada saat itu, tidak ada alat untuk mengubah fsuidFS, tetapi mungkin sudah berubah sekarang.

Idenya adalah untuk menambahkan lapisan copy-on-write di atas perangkat asli sehingga dapat ditulis, tetapi modifikasi dilakukan di tempat lain yang dapat Anda buang nanti. Itu berarti Anda memerlukan ruang penyimpanan tambahan (misalnya pada drive eksternal).

Kemudian pasang COW'd FS bukan yang asli, tambahkan perangkat untuk salinan FS dan hapus perangkat COW.

Untuk copy-on-write, Anda dapat menggunakan mapper perangkat.

Untuk salinan sekali pakai pada area tulis, di sini saya menggunakan perangkat loop.

Katakanlah Anda ingin dikloning /dev/sdake /dev/sd[bcde]:

Buat toko belakang SAP:

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

Sekarang unmount FS asal jika di-mount dan modprobe -r btrfspastikan tidak akan mengganggu dan lupakan pemindaian perangkatnya.

Kemudian buat perangkat COW'd:

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

Sekarang /dev/mapper/cowedseperti /dev/sdakecuali bahwa segala sesuatu yang tertulis padanya akan berakhir /dev/loop0dan tidak /dev/sdaakan disentuh.

Sekarang, Anda bisa memasangnya:

mount /dev/mapper/cowed /mnt

Tambahkan perangkat lain:

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

Dan hapus yang lama:

btrfs dev del /dev/mapper/cowed /mnt

Ketika itu selesai, Anda mungkin ingin mematikan dan mencabut atau membuat hanya /dev/sdabaca karena punya fsuid yang sama seperti yang lain, btrfsmungkin masih mengacaukannya.

Sekarang, jika saya mengerti dengan benar, dengan anggapan Anda memiliki btrfs-prog baru-baru ini, Anda harus dapat melakukan:

btrfs balance start -d convert=raid10 /mnt

Untuk mengkonversi ke raid10. Secara teori, itu harus memastikan bahwa setiap potongan data disalin pada setidaknya 2 disk.

Saya akan sangat menyarankan agar Anda melakukan tes pada dummy btrfs pada perangkat loop pertama karena semua yang dari memori dan saya mungkin salah (lihat misalnya jawaban awal saya sebelum edit saya).

Perhatikan bahwa sejak kernel 3.6, btrf mengimplementasikan mengirim / menerima sedikit seperti di zfs. Itu mungkin menjadi pilihan bagi Anda.

Stéphane Chazelas
sumber
Jawaban yang bagus, terima kasih. Saya akan mengujinya. Sekarang saya bereksperimen dengan mengirim / menerima.
Adam Ryczkowski
@ Stéphane Chazelas Tautan gmane sudah mati (mungkin untuk selamanya). Bisakah Anda menyesuaikan jawaban Anda?
Jonas Stein
4

Gagasan Stephane dapat dilakukan melalui alat btrfs builtin (itu sebabnya itu keren): membuat btrfs lama menjadi perangkat seed via btrfstune -S 1 /dev/device, menambah perangkat, menghapus perangkat seed, lakukan btrfs balance start. Perangkat seed adalah perangkat read-only yang mungkin menjadi bagian dari sistem file read-writable.

ignis
sumber
1

Saya mencoba mengikuti saran @ ignis untuk menggunakan seeding tetapi memiliki masalah dengannya; sistem melempar kesalahan ketika mencoba untuk menghapus perangkat seed dan saya tidak bisa mengatasinya. Kemudian saya menemukan bahwa ada (sekarang - btrfs-progs v3.19-64-g19a806f, mungkin tidak sebelumnya) perintah:

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

yang membuat kloning filesystem btrfs saya yang ada (yang ada dalam volume logis LVM) ke partisi baru menjadi doddle. Perhatikan bahwa pada Mei 2015 ini tidak berfungsi untuk profil RAID5 / 6 - periksa halaman manual untuk info lengkap.

gogoud
sumber
1
Jangan pernah gunakan btrfs replace startuntuk keperluan cadangan !! Ini merusak pohon perangkat Anda dan membuat drive tidak dapat dilepas! Tidak mungkin bagi saya untuk pulih dari kesalahan, jadi saya mengembalikan salinan gambar dari perangkat blok lain dengan dd -tool. Hanya digunakan btrfs replaceuntuk migrasi final drive.
Karmus
0

Opsi 1 - Salinan data kemudian ubah UUID

Pastikan partisi sumber tidak di-mount dan tidak akan di-otomatiskan.

Gunakan salah satu dd(lambat, bisu) ataupartclone.btrfs -b -s /dev/src -o /dev/target

Gunakan btrfstune -uuntuk mengubah UUID setelah menyalin dan sebelum pemasangan.

Data kerugian peringatan : Do NOT mencoba untuk (auto) me-mount baik asli atau salinan sampai UUID telah berubah


Pilihan 2 - btrfs-clone

Saya belum mencoba secara pribadi btrfs-clone, tetapi dimaksudkan untuk mengkloning sistem file BTRFS yang ada ke yang baru, mengkloning setiap subvolume secara berurutan.

Tom Hale
sumber