Was meinen Plan, diese Maschine zu sichern, wirklich durcheinander bringt ...
Ich habe einen Server, der ein KVM-Hypervisor für mehrere virtuelle Maschinen ist. Eine davon ist Docker. Die Docker-Volumes befinden sich in / dev / vdb, das als LVM-PV eingerichtet ist und auf dem Docker seinen Direct-LVM-Treiber zum Speichern von Docker-Containerdaten verwendet. Diese virtuelle Festplatte ist eine LVM-LV auf der lokalen Festplatte des Hosts.
Sowohl Gastgeber als auch Gast betreiben Fedora 21.
Die Ansicht des Hosts zu diesem Volume lautet (nur das relevante Volume wird angezeigt):
[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)
Die Ansicht des Gastes zu diesem Band ist (wieder wird nur der relevante Band angezeigt):
[root@docker2 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb docker-volumes lvm2 a-- 40.00g 0
Mit allen anderen LVM-Volumes auf dem Host kann ich einen Snapshot lvcreate --snapshot
erstellen, den Snapshot sichern und dann lvremove
ohne Probleme. Aber mit diesem speziellen Band kann ich es nicht lvremove
, weil es verwendet wird:
[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.
Schließlich stellte ich fest, dass der Geräte-Mapper auf dem Host irgendwie herausgefunden hatte, dass dieser Snapshot für logische Volumes eine LVM-PV enthielt, und fuhr dann fort, die logischen Volumes innerhalb des Snapshots dem Host zuzuordnen (nur die relevanten Volumes werden angezeigt):
[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)
Diese entsprechen genau den logischen Volumes in der VM:
[root@docker2 ~]# lvs
LV VG Attr LSize
docker-data docker-volumes -wi-ao---- 39.95g
docker-meta docker-volumes -wi-ao---- 44.00m
Insbesondere wird nicht versucht, dies mit dem LVM-LV zu tun, wenn das System gestartet wird, sondern nur, wenn ich einen Snapshot mache.
Was geht hier vor sich? Ich möchte wirklich nicht, dass der Geräte-Mapper den Inhalt von LVM-Snapshots überprüft, um festzustellen, ob sich darin etwas befindet, das für mich nicht hilfreich zugeordnet werden kann. Kann ich dieses Verhalten unterdrücken? Oder muss ich den Schnappschuss mit einer anderen Methode erstellen?
quelle
pvscan --cache
, um lvmetad über den neuen Filter zu informieren.pvscan
Jetzt wird angegeben, dass die PV von einem Filter abgelehnt wird, das Problem besteht jedoch weiterhin.Ich bin in Kombination mit ungefähr dem gleichen Problem aufgetreten
vgimportclone
. Es würde manchmal damit scheitern:Wenn ich den Snapshot zu diesem Zeitpunkt zerstören wollte, musste ich ihn zunächst vorübergehend deaktivieren,
udev
da unter https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1088081 ein Fehler beschrieben wurdeAber selbst dann, nachdem die Volumengruppe des verschachtelten LVM scheinbar erfolgreich deaktiviert worden war, blieb die Partitionszuordnung für die verschachtelte PV, die von erstellt wurde
kpartx
, irgendwie in Gebrauch.Der Trick schien zu sein, dass der Geräte-Mapper eine zusätzliche übergeordnete Zuordnung unter Verwendung des alten Datenträgergruppennamens beibehielt, wie in der Baumliste angegeben:
Die Lösung bestand darin, diese bestimmte Zuordnung einfach mit zu entfernen
dmsetup remove insidevgname-lvroot
. Danachkpartx -d
und hat gutlvremove
funktioniert.quelle