Mantıksal bir birimi bir birim grubundan diğerine taşımanın / kopyalamanın basit bir yolu var mı? (Lvm2)


15

Evdeki sunucumdaki bir sürü diski yeniden düzenliyorum ve kendimi bir grup LVM mantıksal birimini başka bir birim grubuna taşımak istemek durumunda buluyorum. Bunu yapmanın kolay bir yolu var mı? Bir cplvkomuttan bahsetmiştim, ancak bu ya eski ya da Linux için mevcut olan bir şey değil gibi görünüyor.

Yanıtlar:


20

Mantıksal birimin, kaynak birim grubunun geri kalanından fiziksel birimlerin ayrı bir alt kümesinde olmasını ayarlayabilirseniz ( lvconvert sourcevg/sourcelv /dev/pv1 ...yardımcı olabilir), vgsplitlv'yi vgmergeyeni bir vg'ye bölmek ve yeni vg'yi hedef vg.

LVM bir yansıtma özelliğine sahip olmasına rağmen, hacim grupları arasında bir kopya oluşturmak için (akıllıca) kullanamazsınız, çünkü aynanın her iki ayağı da aynı vg üzerinde yaşamalıdır ve ilişki kırılamaz .

Bir LVM birimini herhangi bir birimi diğerine kopyaladığınız şekilde kopyalayabilirsiniz: uygun boyutta bir hedef lv oluşturun ve ardından içeriği kopyalayın dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M. Kaynak birim etkinse, tutarlı bir kopya oluşturmak için LVM'den yararlanabilirsiniz: önce kaynak lv'nin anlık görüntüsünü alın lvcreate -s, sonra anlık görüntüyü kopyalayın.


1
Brilliant Gilles .... vgsplit / vgmerge muhtemelen iyi olacak: Bundan sonra pvmove'u fiziksel uzantıları yeni diske taşımak ve sonra eski birimi VG'den kaldırmak için kullanabilirim.
jkp

Utanç, farklı boyutlar nedeniyle bu benim için işe yaramadı. Bu sizin için bir sorun olmasa da bu yöntemin en kolay olacağını öneririm.
jkp

Sonra dd(eski birimleri atmak için acele etmiyorsanız), yeni dosya sistemlerinin UUID'sini değiştirmeyi unutmayın: tune2fs -U random / dev / targetvg / targetlv
midenok

2
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

pvmove verileri fiziksel birimler arasında taşıyabilir: LVM Yönetici Kılavuzu


10
Ancak hacim grupları arasında değil.
MattBianco

Tekrar ediyorum: Bu iki ayrı ses grubu için işe yaramıyor
kissgyorgy

Önce vgextendyeni bir pv ile vg1, sonra yeni pv'ye pvmovelv , vg2'de vgsplitgeçici bir vg vgmerge. Sonra pvmovetekrar lv - vg2 orijinal pv, vgreducevg2 ara pv okumak için. Veya ara kopyadan kaçınmak için, önce vg1'i vg2, pvmovelv1 ve vgsplittekrar vg1'de vg2'den birleştirebilirsiniz. Bu mattbianco ve @kissgyorgy @ itirazlarını yanıtlamak ve @Gilles çözümüne ama anlık ve lowlevel değiştirilmesi eşdeğerdir gereken ddbir yanpvmove
marcz

1

Yani 2.02.168-2 Debian streç (9.0) 'de LVM gibi, bir arada kullanarak ses grupları arasında mantıklı bir hacimde bir kopyasını yapmak mümkündür vgmerge, lvconvertve vgsplit. Bir taşıma, bir kopya ile silme işleminin bir kombinasyonu olduğu için, bu da bir taşıma için işe yarayacaktır.

Alternatif olarak, pvmoveyalnızca sesi taşımak için kullanabilirsiniz .

Döngü aygıtları ve bunları kullanarak eksiksiz bir bağımsız örnek oturum lvconvert.

Özet: vg1Mantıksal hacimli lv1ve vg2ile birlikte bir hacim grubu oluşturur lv2ve lv1in bir kopyasını oluştururuz vg2.

Dosya oluşturun.

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

Dosyalarda döngü aygıtları ayarlayın.

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

Loop cihazlarında fiziksel birimler oluşturun (LVM tarafından kullanılmak üzere loop cihazlarını başlatın).

pvcreate /dev/loop1 /dev/loop2

Birim grupları oluşturun ve sırasıyla vg1ve vg2üzerinde ./dev/loop1/dev/loop2

vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2

Mantıksal birimler oluşturun ve sırasıyla lv1ve lv2üzerinde .vg1vg2

lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2

Üzerinde ext4 dosya sistemlerini oluşturma lv1ve lv2.

mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2

İsteğe bağlı olarak, lv1daha sonra kopyanın doğru oluşturulup oluşturulmadığını kontrol edebilmeniz için üzerine bir şeyler yazın . Devre vg1dışı bırak.

vgchange -a n vg1

Birleştirme komutunu test modunda çalıştırın. Bu birleştirir lv1içine lv2.

vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1

Ve sonra gerçek için.

vgmerge -A y -l -v vg2 vg1

Sonra kullanarak bir RAID 1 ayna çifti lv1oluşturun lvconvert. <> Argüman söyler lvconvertayna kopyasını yapmak lv1_copyüzerine /dev/loop2.

lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2

Sonra aynayı ayırın. Yeni LV şimdi lv1_copy.

lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1

Devre vg2dışı bırak.

vgchange -a n vg2

Sonra (test modu)

vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1

Gerçek için

vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1

Ortaya çıkan çıktı:

lvs
[...]
lv1        vg1       -wi-a-----  12.00m
lv1_copy   vg2       -wi-a-----  12.00m
lv2        vg2       -wi-a-----  12.00m

NOTLAR:

1) Bu komutların çoğunun root olarak çalıştırılması gerekir.

2) İki birim grubundaki mantıksal birimlerin adlarının herhangi bir kopyası varsa, vgmergedevam etmeyi reddeder.

3) Birleşmede:

Logical volumes in `vg1` must be inactive

Ve bölünmüş halde:

Logical volume `vg2/lv1` must be inactive.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.