Pindahkan volume logis dari satu grup volume ke yang lain

18

Apakah mungkin untuk memindahkan volume logis dari satu grup volume ke yang lain secara keseluruhan?

Dimungkinkan untuk membuat (kurang lebih) pencocokan lv dan menyalin data, tetapi apakah ada cara untuk melakukan ini dengan alat LVM saja?

Jika tidak, apakah ada alasan teoretis atau batasan teknis (ukuran luas)?

XTL
sumber

Jawaban:

13

Grup volume terdiri dari seluruh volume fisik. Volume fisik terdiri dari banyak luasan (luasnya biasanya 4MB); setiap tingkat dapat dimiliki oleh volume logis yang berbeda. Untuk mentransfer volume logis ke grup yang berbeda, Anda tidak bisa hanya mentransfer luasan, karena itu mungkin membagi volume fisik antara VG sumber dan VG target.

Yang dapat Anda lakukan adalah mentransfer satu atau lebih PV dari sumber VG ke target VG, dengan vgsplitperintah. Anda dapat menentukan PV mana yang ingin Anda transfer, atau yang LV (tetapi hanya satu per satu). Jika Anda menentukan LV, itu dan LV lain di sumber VG harus pada PV terpisah. VG tujuan akan dibuat jika tidak ada VG dengan nama yang ditentukan.

vgsplit -n source_group/volume_to_copy source_group target_group
vgsplit source_group target_group /dev/sdy99 /dev/sdz99

Anda mungkin perlu menggunakan pvmoveterlebih dahulu untuk mengatur volume logis yang ingin Anda pindahkan pada PV terpisah.

Jika Anda bermaksud mempertahankan batas fisik VG dan memindahkan data, tidak ada alat bawaan, tetapi Anda bisa membuat cermin lalu menghapus yang asli .

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Sepertinya target_group dapat menjadi yang sudah ada sebelumnya?
XTL
8

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 pvmoveuntuk hanya memindahkan volume.

Sesi contoh lengkap mandiri menggunakan perangkat loop dan lvconvertikuti.

Ringkasan: kita menciptakan kelompok volume vg1dengan volume logis lv1, dan vg2dengan lv2, dan membuat salinan dari lv1dalam vg2.

Buat file.

truncate pv1 --size 100MB
truncate pv2 --size 100MB

Siapkan 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 vg1 menjadi vg2.

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 lv1menggunakan lvconvert. The dest-pvArgumen mengatakan lvconvertuntuk membuat salinan cermin di /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/lv1tidak aktif.

lvchange -a n /dev/vg2/lv1

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, vgmergeakan menolak untuk melanjutkan.

3) Saat digabung, volume logis di vg1harus tidak aktif. Dan pada split, volume logis dalam vg2milik vg1harus tidak aktif. Dalam kasus kami, ini lv1.

Faheem Mitha
sumber
2

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
conan
sumber
Ini agak kebalikan dari pertanyaan. Intinya adalah untuk memindahkan volume alih-alih menyalin data ke yang baru.
XTL