Mantıksal hacim (lv) başka bir birim grubuna (vg) nasıl taşınır / kopyalanır?


17

Temel olarak, birkaç mantıksal birimi (lv) yeni bir birim grubuna (vg) taşımak / kopyalamak istiyorum . Yeni birim grubu yeni bir fiziksel birim kümesinde bulunur. Herkes bu mantıksal birimlerin içindeki verilere zarar vermeden güvenli bir şekilde nasıl yapacağını biliyor mu ??


Daha fazla ayrıntı verebilir misiniz ? Yeni VG ve LV yapmayı biliyor musunuz? Bir veri bölümünü mi yoksa kök disk bölümünü mi taşıyorsunuz?
Panther

@ bodhi.zazen: Aslında bir tür veri bölümünü taşımaya çalışıyordum. "Tür" ile kastettiğim, bu mantıksal hacimler sanal makinelerdi. (yani, bu mantıksal hacimler sanal makinelere blok cihazlar olarak görünür). Her neyse, durumu kendi tarzımda halledebildim. Adımlar cevabımda verilmiştir. Ancak, siz ve hepiniz benim yöntemim hakkında yorum yapabilirsiniz. Bu tür bir şey yapmanın daha iyi bir yolu varsa lütfen paylaşacak kadar nazik olun. :)
kimse

İlk önce yeni PV / LV'yi yaratır, VM'yi kapatır, sonra verileri dd ile kopyalar, yeni VM'yi başlatır ve çalıştığını onaylardım.
Panther

Yanıtlar:


12

vgmerge iki VG birleştirmenizi sağlar. Ayrıca kullanabilirsiniz pvmove bir VG içindeki verileri taşımak ve hiç vgsplit Birden VGS dönmek istiyorum.


Bir not. Bunu yapmak için, çevrimiçi LV'yi başka bir VG'ye aktarmak için kullanılan geçici bir cihazınız olmalıdır. Tabii ki aktarımdan sonra / etc / fstab ve diğer etkilenen yapılandırmaları güncellemeli ve yeniden başlatma için bir kaç çevrimdışı zaman planlamalı ve sonunda bazı yapılandırma güncellemeleri yapmalısınız. Rootfs veya bootfs ile bazı eylemler yaparsanız, kurtarma ana sistemi için bazı linux live dağıtımına sahip olmalısınız.
Znik

10

Önce bir .img dosyasına kopyalamak için bir neden yoktur, sadece önce lvcreate'yi yapın, sonra doğrudan kopyalayın:

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

2
Bu çok kısa. Bahsedilen boyutların tam olarak ne olduğunu söylemez - örneğin <boyut> sadece anlık görüntü farklılıkları için olduğu için çok küçük olabilir.
gorn

1
@gorn geçerli bir nokta, ama aşağıda kimsenin cevabına cevap vermiyordu, ki o sırada ilkdi. Ek bağlam için bunu okuyun.
Tobias J

7

Tamam, ben kendi durumumla başa çıkabildim. İşte attığım adımlar:

1) Hedefleme mantıksal hacminin anlık görüntüsünü alın.

lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume

Not: Anlık görüntünün boyutu istediğiniz kadar büyük veya küçük olabilir. Önemli olan, anlık görüntü süresi boyunca değişiklikleri yakalamak için yeterli alana sahip olmaktır.

2) kullanarak anlık görüntü içeriğinin bir görüntü kopyasını oluşturun dd

dd if=/dev/volume-group/snapshot-name of=/tmp/backup.img

3) Hedefleme (yeni) hacim grubunda yeterli boyutta yeni bir mantıksal hacim oluşturun.

lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name

4) kullanarak görüntü yedeklemesinden yeni mantıksal birime veri yazın dd

dd if=/tmp/backup.img of=/dev/new-volume-group/new-logical-volume

5) kullanılarak anlık ve görüntü yedekleme silmek lvremoveve rmsırasıyla.

Hepsi bu kadar ... Umarım bu birine yardımcı olur :)


Birisi daha iyi bir seçenek / yöntem varsa, bana da bildirin :-)
kimse

ising backup.img geçici olarak depo yedekleme için gerekli değildir. kaynak anlık görüntüden, monte edilmemiş durumdaki hedef LV'ye doğrudan dd yapabilirsiniz.
Znik

3

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, bir taşıma için de 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: Mantıksal hacim lv1 ile vg1 ve lv2 ile vg2 birim grubu oluşturuyoruz ve vg2'de lv1'in bir kopyasını yapıyoruz.

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

/ Dev / loop1 ve / dev / loop2 üzerinde sırasıyla vg1 ve vg2 birim grupları oluşturun.

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

Vg1 ve vg2'de sırasıyla lv1 ve lv2 mantıksal hacimlerini oluşturun.

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

Lv1 ve lv2'de ext4 dosya sistemleri oluşturun.

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

İsteğe bağlı olarak, daha sonra kopyanın doğru oluşturulup oluşturulmadığını kontrol etmek için lv1 üzerine bir şeyler yazın. Vg1'i devre dışı bırakın.

vgchange -a n vg1

Birleştirme komutunu test modunda çalıştırın. Bu, lv1'i lv2 ile birleştirir.

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

Ardından 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'dir.

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

Vg2'yi devre dışı bırakın.

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.

1
sadece anlamsız. Dosya sistemlerini sökmeniz, birimleri devre dışı bırakmanız vb. Gerekir. Sadece dir ve kopya verilerini de çıkarabilirsiniz.
user189142

ilk olarak, user189142'nin dediği gibi, anlamsızdır. ikincisi, taşınan hacmi kullanarak hizmetleri durdurabildiğimiz durumlarda uygulanır. bu 7/24 çalışan hizmetlerle ilgili bir sorundur ve terabaytlarla sayılan verilerle hacim çok büyüktür. Bu nedenle, bu prosedürün çok uzun servis süresine ihtiyacı vardır. Bu nedenle, çok daha kolay yeni bir birim oluşturmak, çevrimiçi rsync, daha sonra güncelleme, yeniden montaj ve sistemi çevrimiçi duruma geri göndermek için kısa süre rsync çevrimdışı. Tabii ki, çok iyi bir fikir, kaynak hacminden gereksiz verileri silmektir. geçici olarak geçici bir yere taşıyabilirsiniz.
Znik

3

4 cevap şimdiye kadar özledim hacmin tam büyüklüğü genellikle bilinmemektedir. lvdisplayyalnızca 2 ondalık basamağa yuvarlanmış değerleri gösterir ve man lvdisplayyalnızca kullanılabilir seçenekler için diğer komutları gösterir. Aşağıdakiler, varsayılan 4 MiB LVM blok boyutu ile yeterince doğru olan MiB'yi seçer:

lvdisplay --units m

SGA için ayrıca varsayılan birimdir --sizearasında lvcreate. Emin lvdisplaydeğilseniz, hedef hacmi oluşturduktan sonra doğru boyutu iki kez kontrol edin . Ardından, bir kopya oluşturmak için diğer yanıtlarda olduğu gibi devam edin. Ayrıca, örneğin kopyasını doğrulamanızı öneririm cmp.

Bir anlık görüntünün neden kullanıldığını ve neleri koruduğunu ve neyi korumadığını burada görebilirsiniz:

  • Anlık görüntü, tüm verilerin anlık görüntü oluşturulduğu zamanki gibi kopyalanacağı şekilde yapılır. Kopyalama işlemi sırasında kaynak birim üzerindeki etkinlikler kopyaya yansıtılmaz.

  • Anlık görüntü ayrıca kaynak birimini ddkomut satırındaki insan hatalarından korur . Anlık görüntüye yanlışlıkla yazarsanız, yalnızca anlık görüntünün verileri zarar görür ve anlık görüntüyü kaldırabilir ve baştan başlayabilirsiniz.

  • Hedef birim kopyalama işlemleri sırasında korunmaz. dracutEksik bir birimi başka bir yönetici (veya os-prober of gibi bir otomatik işlem ) bağlarsa , bağlantı bazı şeyleri berbat edebilir. (Salt okunur bir bağ bile, birime günlük girişleri yazabilir.)


2

Kendi teklifimi sunacağım:

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/

her şey yolundaysa kaynağı kaldırın

lvremove vgsource/lv0

kaynak hacmi çok büyükse ve hizmet veya sistem durdurulmamalıdır?
Znik

0

VG A'dan başka bir VG B'ye mantıksal bir birim kopyalamanız gerekiyorsa, ilginç bir varyant buldum partclone. Anlık görüntü daha sonra dd ile kopyalama iyi bir yöntemdir ancak dosya sistemleriniz dolu değilse yavaş olabilir. Bu çözüm çok hızlıdır çünkü sadece kullanılan blokları kopyalar.

  1. Önce kaynak LV'nin anlık görüntüsünü oluşturun
lvcreate --snapshot --size 1G /dev/sourcevg/lv --name lv-backup

--sizeBurada anlık devre dışı bırakılacak önce çok yazma oluşabilir nasıl

  1. Hedef VG'de hedef LV oluşturma
lvcreate --size <new_lv_size> /dev/destvg --name newlv

new_lv_size en azından LV kaynak büyüklüğünde olmalıdır

  1. Dosya sistemini kaynak lv yedekten hedef LV'ye kopyalayın
partclone.<fs_type> --dev-to-dev --source /dev/sourcevg/lv-backup --output /dev/destvg/newlv

fs_typeolabilir ext4, fat32, btrfs, xfs, ... herhangi FS partclone tarafından desteklenen

  1. Anlık görüntüyü sil
lvremove /dev/sourcevg/lv-backup
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.