Apakah mungkin untuk memindahkan volume logis dari satu grup volume ke grup volume lainnya secara keseluruhan?
Dimungkinkan untuk membuat (kurang lebih) lv yang cocok dan menyalin data, tetapi apakah ada cara untuk melakukannya hanya dengan alat LVM?
Jika tidak, apakah ada alasan teoretis atau batasan teknis (ukuran luas)?
Jawaban yang Diterima:
Pada LVM di Debian stretch (9.0), yaitu 2.02.168-2, itu
dimungkinkan untuk melakukan salinan volume logis di seluruh grup volume menggunakan
kombinasi vgmerge
, lvconvert
, dan vgsplit
. Karena perpindahan adalah
kombinasi dari penyalinan dan penghapusan, ini juga akan berfungsi untuk perpindahan.
Atau, Anda dapat menggunakan pvmove
untuk hanya memindahkan volume.
Sesi contoh lengkap yang lengkap menggunakan perangkat loop dan lvconvert
berikut.
Ringkasan:kami membuat grup volume vg1
dengan volume logis lv1
, dan vg2
dengan lv2
, dan buat salinan lv1
di 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 masing-masing di /dev/loop1 dan /dev/loop2
.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
Buat volume logis lv1 dan lv2 masing-masing di vg1 dan vg2.
lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2
Buat sistem file ext4 di lv1 dan lv2.
mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2
Opsional, tulis sesuatu di lv1 sehingga nanti Anda dapat memeriksa salinan telah
dibuat dengan benar. Jadikan vg1 tidak aktif.
vgchange -a n vg1
Jalankan perintah gabungan 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 lv1
menggunakan lvconvert
. dest-pv
argumen memberitahu lvconvert
untuk membuat salinan cermin
pada /dev/loop2
.
lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2
Kemudian pisahkan cermin. LV baru sekarang lv1_copy
.
lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1
Buat vg2/lv1
tidak 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
Sungguh
vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1
Keluaran 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 perintah ini perlu dijalankan sebagai root.
2) Jika ada duplikasi nama-nama volume logis di
kedua grup volume, vgmerge
akan menolak untuk melanjutkan.
3) Saat penggabungan, volume logis di vg1
harus tidak aktif. Dan pada split, volume logis di vg2
milik vg1
harus tidak aktif. Dalam kasus kami, ini adalah lv1
.