Linux cihaz haritacısı, anlık görüntü çekerken LV içine yerleştirilmiş LVM PV'yi eşler


13

Bu da bu makineyi yedekleme planımla uğraşıyor ...

Birkaç sanal makineye KVM hipervizörü olan bir sunucum var. Bunlardan biri Docker kullanıyor. Docker'ın Docker kapsayıcı verilerini depolamak için doğrudan lvm sürücüsünü kullandığı LVM PV olarak ayarlanan / dev / vdb'de Docker birimlerine sahiptir . Bu sanal disk, ana bilgisayarın yerel diskindeki bir LVM LV'dir.

Hem ev sahibi hem de misafir Fedora 21'i işletiyor.

Ana bilgisayarın bu cilt hakkındaki görüşü şöyledir (yalnızca ilgili birim gösterilir):

[root@host ~]# lvs
  LV                           VG         Attr       LSize
  docker2.example.com-volumes vm-volumes -wi-ao---- 40.00g
[root@host ~]# dmsetup ls --tree
vm--volumes-docker2.example.com--volumes (253:10)
 └─ (9:125)

Misafirin bu cilt hakkındaki görüşü (yine yalnızca ilgili hacim gösterilir):

[root@docker2 ~]# pvs
  PV         VG             Fmt  Attr PSize  PFree
  /dev/vdb   docker-volumes lvm2 a--  40.00g    0 

Ana bilgisayardaki diğer tüm LVM birimleri ile lvcreate --snapshot, bir anlık görüntü alabilir, anlık görüntüyü yedekleyebilir ve ardından lvremovesorun olmadan. Ama bu belirli hacimde lvremovekullanamıyorum çünkü kullanımda:

[root@host ~]# lvremove /dev/vm-volumes/snap-docker2.example.com-volumes 
  Logical volume vm-volumes/snap-docker2.example.com-volumes is used by another device.

Sonunda, ana bilgisayardaki aygıt eşleştiricinin bir şekilde bu mantıksal hacim anlık görüntüsünün bir LVM PV içerdiğini anladım ve sonra anlık görüntüdeki mantıksal hacimleri ana bilgisayara eşlemeye devam ettim (sadece ilgili birimler gösterilir):

[root@host ~]# dmsetup ls --tree
vm--volumes-docker2.example.com--volumes (253:10)
 └─vm--volumes-docker2.example.com--volumes-real (253:14)
    └─ (9:125)
docker--volumes-docker--data (253:18)
 └─vm--volumes-snap--docker2.example.com--volumes (253:16)
    ├─vm--volumes-snap--docker2.example.com--volumes-cow (253:15)
    │  └─ (9:125)
    └─vm--volumes-docker2.example.com--volumes-real (253:14)
       └─ (9:125)
docker--volumes-docker--meta (253:17)
 └─vm--volumes-snap--docker2.example.com--volumes (253:16)
    ├─vm--volumes-snap--docker2.example.com--volumes-cow (253:15)
    │  └─ (9:125)
    └─vm--volumes-docker2.example.com--volumes-real (253:14)
       └─ (9:125)

Bunlar tam olarak VM içindeki mantıksal hacimlere karşılık gelir:

[root@docker2 ~]# lvs
  LV          VG             Attr       LSize
  docker-data docker-volumes -wi-ao---- 39.95g
  docker-meta docker-volumes -wi-ao---- 44.00m

Özellikle, sistem önyüklenirken LVM LV'ye bunu yapmaya çalışmaz, ancak sadece bir anlık görüntü aldığımda.

Burada neler oluyor? LVM anlık görüntülerinin içeriğini inceleyen cihaz eşleştiricinin, içinde yararsız bir şekilde benim için haritalayabileceği bir şey olup olmadığını görmek istemiyorum. Bu davranışı engelleyebilir miyim? Veya başka bir yöntemle anlık görüntü oluşturmam gerekiyor mu?

Yanıtlar:


8

Bazen ilgili belgeler, örneğin belgelerde değil, yapılandırma dosyalarında gizlenir. Yani LVM ile görünüyor.

Varsayılan olarak LVM, tüm PV'ler mevcut olduğu ve lvmetad ve udev (veya son zamanlarda systemd) çalıştığı sürece, önyüklemeden sonra sisteme bağlanan tüm fiziksel cihazlarda birimleri etkinleştirmeye çalışır. LVM anlık görüntüsü oluşturulduğunda, bir udev olayı tetiklenir ve anlık görüntü bir PV içerdiğinden, lvmetad otomatik olarak çalışır pvscanve böyle devam eder.

Bakarak /etc/lvm/backup/docker-volumesbunu lvmetad belirlemek başardı açıkça kaçmış pvscannormalde bu önleyecek LVM filtreleri bypass cihazı büyük ve küçük numaralar kullanarak anlık üzerinde. İçerdiği dosya:

description = "Created *after* executing 'pvscan --cache --activate ay 253:13'"

Bu davranış ayarlayarak kontrol edilebilir auto_activation_volume_listin /etc/lvm/lvm.conf. Hangi birim gruplarının, birimlerin veya etiketlerin otomatik olarak etkinleştirilmesine izin verileceğini ayarlamanızı sağlar.

Filtreyi ana bilgisayar için her iki birim grubunu da içerecek şekilde ayarladım; başka bir şey filtreyle eşleşmez ve otomatik olarak etkinleştirilmez.

auto_activation_volume_list = [ "mandragora", "vm-volumes" ]

Konuğun LVM hacimleri artık ana bilgisayarda görünmüyor ve son olarak yedeklemelerim çalışıyor ...


4

Yalnızca KVM ana bilgisayarındaki fiziksel aygıtları incelemek için /etc/lvm/lvm.conf dosyasındaki 'filtre' değerini düzenlemek istiyorsunuz; varsayılan değer LV'leri içeren 'her blok cihazı' kabul eder. Varsayılan değerin üzerindeki yorum oldukça kapsamlıdır ve kullanımı açıklamak benden daha iyi bir iş yapabilir.


Filtreyi eklediğimi ve pvscan --cachelvmetad'a yeni filtre hakkında bilgi vermek için koştuğumu ve pvscanşimdi PV'nin bir filtre tarafından reddedildiğini belirtti, ancak sorun devam ediyor.
Michael Hampton

Anlık görüntüyü kaldıramamanızı kastediyorsunuz. Bu aşamada, zor olabilir ve sadece belirsiz önerilerde bulunabilirim. KVM konağının yeniden başlatılması söz konusu değilse (ve bunun bir balyoz yaklaşımı olduğunu kabul edersem), belki de ev sahibinden 'lvchange -an / yol / to / LV' bekletmeyi serbest bırakacaktır. Değilse, muhtemelen LVM araçlarını atlamaya çalışmak için çeşitli dmsetup işlemlerini deniyorsunuzdur. Orada kıllı olur ve herhangi bir özel operasyon tavsiye rahat hissetmiyorum.
Craig Miskell

Filtre hiçbir şey yapmaz çünkü lvmetad bir udev olayına yanıt olarak anlık görüntüyü açıkça tarar. Çözüm, yapılandırmada başka bir şey olduğu ortaya çıktı ...
Michael Hampton

2

Kabaca aynı problemle birlikte karşılaştım vgimportclone. Bazen bununla başarısız olur:

  WARNING: Activation disabled. No device-mapper interaction will be attempted.
  Physical volume "/tmp/snap.iwOkcP9B/vgimport0" changed
  1 physical volume changed / 0 physical volumes not changed
  WARNING: Activation disabled. No device-mapper interaction will be attempted.
  Volume group "insidevgname" successfully changed
  /dev/myvm-vg: already exists in filesystem
  New volume group name "myvm-vg" is invalid
Fatal: Unable to rename insidevgname to myvm-vg, error: 5

Bu noktada, anlık görüntüyü yok etmek istersem, ilk önce https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1088081 adresindeudev açıklanan hata nedeniyle geçici olarak devre dışı bırakmak zorunda kaldım.

Ancak o zaman bile, yuvalanmış LVM'nin hacim grubunu başarılı bir şekilde devre dışı bıraktıktan sonra, tarafından oluşturulan yuvalanmış PV için bölüm eşleme bir kpartxşekilde kullanımda kaldı.

Hile, cihaz eşleyicinin, eski cilt grubu adını kullanarak, ağaç listesindeki gibi ekstra bir üst eşleme tutması gibi görünüyordu:

insidevgname-lvroot (252:44)
 └─outsidevgname-myvm--root-p2 (252:43)
    └─outsidevgname-myvm--root (252:36)

Çözüm, söz konusu eşlemeyi basitçe kaldırmaktı dmsetup remove insidevgname-lvroot. Bundan sonra, kpartx -dve lvremovepara cezası çalıştı.

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.