Pada dasarnya, saya ingin memindahkan / menyalin beberapa volume logis (lv) ke grup volume baru (vg). Grup volume baru berada pada set volume fisik baru. Adakah yang tahu cara melakukannya dengan aman tanpa merusak data di dalam volume logis itu ??
Pada dasarnya, saya ingin memindahkan / menyalin beberapa volume logis (lv) ke grup volume baru (vg). Grup volume baru berada pada set volume fisik baru. Adakah yang tahu cara melakukannya dengan aman tanpa merusak data di dalam volume logis itu ??
Jawaban:
Tidak ada alasan untuk menyalinnya ke file .img terlebih dahulu, cukup lakukan lvcreate dulu, lalu salin langsung ke:
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
dd if=/dev/volume-group/snapshot-name of=/dev/new-volume-group/new-logical-volume
Oke, saya bisa menangani situasi dengan cara saya sendiri. Berikut langkah-langkah yang saya ambil:
1) Ambil snapshot dari volume logis penargetan.
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
Catatan: Ukuran snapshot bisa sebesar atau sekecil yang Anda inginkan. Yang penting adalah memiliki cukup ruang untuk menangkap perubahan selama periode snapshot.
2) Buat salinan gambar dari konten snapshot menggunakan dd
dd if=/dev/volume-group/snapshot-name of=/tmp/backup.img
3) Buat volume logis baru dengan ukuran yang cukup di grup volume penargetan (baru).
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
4) Tulis data ke volume logis baru dari cadangan gambar menggunakan dd
dd if=/tmp/backup.img of=/dev/new-volume-group/new-logical-volume
5) hapus snapshot dan cadangan gambar menggunakan lvremove
dan rm
masing - masing.
Itu semua orang ... Semoga ini bisa membantu seseorang :)
Sampai dengan LVM di Debian peregangan (9.0), yaitu 2.02.168-2, itu mungkin untuk melakukan copy dari volume logis di seluruh kelompok volume dengan menggunakan kombinasi dari vgmerge
, lvconvert
, dan vgsplit
. Karena langkah adalah kombinasi dari salinan dan penghapusan, ini juga akan berfungsi untuk bergerak.
Atau, Anda dapat menggunakan pvmove
untuk hanya memindahkan volume.
Sesi contoh lengkap mandiri menggunakan perangkat loop dan
lvconvert
ikuti.
Ringkasan: kami membuat grup volume vg1 dengan volume logis lv1, dan vg2 dengan lv2, dan membuat salinan lv1 di vg2.
Buat file.
truncate pv1 --size 100MB
truncate pv2 --size 100MB
Atur perangkat loop pada file.
losetup /dev/loop1 pv1
losetup /dev/loop2 pv2
Buat volume fisik pada perangkat loop (inisialisasi perangkat loop untuk digunakan oleh LVM).
pvcreate /dev/loop1 /dev/loop2
Buat grup volume vg1 dan vg2 di / dev / loop1 dan / dev / loop2 masing-masing.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
Buat volume logis lv1 dan lv2 masing-masing pada vg1 dan vg2.
lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2
Buat filesystem ext4 di lv1 dan lv2.
mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2
Secara opsional, tulis sesuatu di lv1 sehingga nanti Anda dapat memeriksa salinan yang dibuat dengan benar. Jadikan vg1 tidak aktif.
vgchange -a n vg1
Jalankan perintah gabung dalam mode uji. Ini menggabungkan lv1 menjadi lv2.
vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1
Dan kemudian nyata.
vgmerge -A y -l -v vg2 vg1
Kemudian buat pasangan cermin RAID 1 dari lv1
menggunakan lvconvert
. Argumen <> memberi tahu lvconvert
untuk membuat salinan mirror
lv1_copy
aktif /dev/loop2
.
lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2
Lalu belah cermin. LV baru sekarang lv1_copy.
lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1
Jadikan vg2 tidak aktif.
vgchange -a n vg2
Kemudian (mode pengujian)
vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1
Nyata
vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1
Output yang dihasilkan:
lvs
[...]
lv1 vg1 -wi-a----- 12.00m
lv1_copy vg2 -wi-a----- 12.00m
lv2 vg2 -wi-a----- 12.00m
CATATAN:
1) Sebagian besar dari perintah ini perlu dijalankan sebagai root.
2) Jika ada duplikasi nama volume logis dalam dua grup volume, vgmerge
akan menolak untuk melanjutkan.
3) Saat digabung:
Logical volumes in `vg1` must be inactive
Dan di split:
Logical volume `vg2/lv1` must be inactive.
Keempat jawaban sejauh ini semuanya kehilangan bahwa ukuran pasti dari volume seringkali tidak diketahui. lvdisplay
hanya menunjukkan nilai yang dibulatkan ke 2 tempat desimal dan man lvdisplay
hanya menunjuk ke perintah lain untuk opsi yang tersedia. Berikut ini memilih MiB, yang cukup akurat dengan ukuran blok LVM standar 4 MiB:
lvdisplay --units m
MiB juga unit default untuk --size
dari lvcreate
. Jika ragu, periksa kembali ukuran yang benar dengan lvdisplay
setelah membuat volume target. Kemudian lanjutkan seperti pada jawaban lain untuk membuat salinan. Selanjutnya, saya akan merekomendasikan untuk memverifikasi salinan , misalnya dengan cmp
.
Di sini mengapa snapshot digunakan dan apa yang dilindungi dan tidak dilindungi:
Snapshot dibuat agar semua data disalin seperti pada saat snapshot dibuat. Aktivitas pada volume sumber selama proses penyalinan tidak akan tercermin dalam salinan.
Cuplikan juga melindungi volume sumber dari kesalahan manusia di dd
baris perintah. Jika Anda secara tidak sengaja menulis ke snapshot, hanya data snapshot yang akan rusak dan Anda cukup menghapus snapshot dan memulai dari awal.
Volume target tidak dilindungi selama proses penyalinan. Jika admin lain (atau proses otomatis seperti os-prober of dracut
) me-mount volume yang tidak lengkap, mount mungkin mengacaukan hal-hal. (Bahkan mount baca-saja masih dapat menulis entri jurnal ke volume.)
Saya akan menawarkan sendiri:
umount /somedir/
lvdisplay /dev/vgsource/lv0 --units b
lvcreate -L 12345b -n lv0 vgtarget
dd if=/dev/vgsource/lv0 of=/dev/vgtarget/lv0 bs=1024K conv=noerror,sync status=progress
mount /dev/vgtarget/lv0 /somedir/
jika semuanya baik, hapus sumbernya
lvremove vgsource/lv0
Jika Anda perlu menyalin volume logis dari VG A ke VG B lainnya, saya menemukan varian menarik yang digunakan partclone
. Cuplikan kemudian salin dengan dd adalah metode yang baik tetapi mungkin lambat jika sistem file Anda tidak penuh. Solusi ini sangat cepat karena hanya menyalin blok yang digunakan.
lvcreate --snapshot --size 1G /dev/sourcevg/lv --name lv-backup
di --size
sini adalah berapa banyak penulisan dapat terjadi sebelum snapshot akan dinonaktifkan
lvcreate --size <new_lv_size> /dev/destvg --name newlv
new_lv_size
minimal harus ukuran sumber LV
partclone.<fs_type> --dev-to-dev --source /dev/sourcevg/lv-backup --output /dev/destvg/newlv
fs_type
bisa ext4
, fat32
, btrfs
, xfs
, ... setiap FS didukung oleh partclone
lvremove /dev/sourcevg/lv-backup