O que está realmente atrapalhando meu plano de fazer backup desta máquina ...
Eu tenho um servidor que é um hypervisor KVM para várias máquinas virtuais. Um deles está executando o Docker. Ele possui seus volumes do Docker em / dev / vdb, que é configurado como um PV LVM, no qual o Docker usa seu driver de lvm direto para armazenar dados do contêiner do Docker. Este disco virtual é um LVM LV no disco local do host.
O host e o convidado executam o Fedora 21.
A visualização deste host pelo volume é (apenas o volume relevante é mostrado):
[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)
A visualização deste hóspede por este volume é (novamente, apenas o volume relevante é mostrado):
[root@docker2 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb docker-volumes lvm2 a-- 40.00g 0
Com todos os outros volumes LVM no host, posso tirar um instantâneo lvcreate --snapshot
, fazer backup do instantâneo e, em seguida lvremove
, sem problemas. Mas com este volume em particular, não posso lvremove
porque está em uso:
[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.
Eventualmente, eu descobri que o mapeador de dispositivos no host de alguma forma descobriu que esse instantâneo de volume lógico continha um PV LVM e, em seguida, procedi ao mapeamento dos volumes lógicos no instantâneo para o host (apenas os volumes relevantes são mostrados):
[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)
Eles correspondem exatamente aos volumes lógicos dentro da VM:
[root@docker2 ~]# lvs
LV VG Attr LSize
docker-data docker-volumes -wi-ao---- 39.95g
docker-meta docker-volumes -wi-ao---- 44.00m
Notavelmente, ele não tenta fazer isso com o LVM LV quando o sistema está inicializando, mas apenas quando tiro um instantâneo.
O que está acontecendo aqui? Eu realmente não quero que o mapeador de dispositivos inspecione o conteúdo dos snapshots do LVM para ver se há algo nele que possa ser mapeado sem ajuda para mim. Posso suprimir esse comportamento? Ou preciso criar o instantâneo por meio de outro método?
fonte
pvscan --cache
para informar o lvmetad sobre o novo filtro epvscan
agora declara que o PV está sendo rejeitado por um filtro, mas o problema persiste.Eu encontrei aproximadamente o mesmo problema em combinação com
vgimportclone
. Às vezes falhava com isso:Nesse ponto, se eu quisesse destruir o instantâneo, primeiro tive que desativar temporariamente
udev
devido ao erro descrito em https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1088081Mas mesmo assim, depois de desativar com êxito o grupo de volumes do LVM aninhado, o mapeamento da partição para o PV aninhado, criado por
kpartx
, de alguma forma permaneceu em uso.O truque parecia ser que o mapeador de dispositivos mantinha um mapeamento pai extra usando o nome do grupo de volumes antigo, como este na lista de árvores:
A solução foi simplesmente remover esse mapeamento específico
dmsetup remove insidevgname-lvroot
. Depois disso,kpartx -d
elvremove
funcionou bem.fonte