Yang benar-benar mengacaukan rencanaku untuk membuat cadangan mesin ini ...
Saya memiliki server yang merupakan hypervisor KVM ke beberapa mesin virtual. Salah satunya adalah menjalankan Docker. Ini memiliki volume Docker pada / dev / vdb, yang diatur sebagai LVM PV, di mana Docker menggunakan driver direct-lvm untuk menyimpan data kontainer Docker. Disk virtual ini adalah LVM LV pada disk lokal host.
Tuan rumah dan tamu menjalankan Fedora 21.
Tampilan host dari volume ini adalah (hanya volume yang relevan ditampilkan):
[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)
Pandangan tamu tentang volume ini adalah (sekali lagi, hanya volume yang relevan ditampilkan):
[root@docker2 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb docker-volumes lvm2 a-- 40.00g 0
Dengan semua volume LVM lainnya di host, saya dapat mengambil snapshot dengan lvcreate --snapshot
, membackup snapshot dan kemudian lvremove
tanpa masalah. Tetapi dengan volume khusus ini, saya tidak bisa lvremove
karena sedang digunakan:
[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.
Akhirnya saya tahu bahwa device-mapper pada host entah bagaimana menemukan bahwa snapshot volume logis ini mengandung LVM PV, dan kemudian melanjutkan untuk memetakan volume logis dalam snapshot ke host (hanya volume yang relevan ditampilkan):
[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)
Ini sesuai persis dengan volume logis di dalam VM:
[root@docker2 ~]# lvs
LV VG Attr LSize
docker-data docker-volumes -wi-ao---- 39.95g
docker-meta docker-volumes -wi-ao---- 44.00m
Khususnya, itu tidak mencoba melakukan ini ke LVM LV ketika sistem boot, tetapi hanya ketika saya mengambil snapshot.
Apa yang terjadi disini? Saya benar-benar tidak ingin device-mapper memeriksa isi snapshot LVM untuk melihat apakah ada sesuatu di dalamnya yang dapat membantu saya memetakannya. Bisakah saya menekan perilaku ini? Atau apakah saya perlu membuat snapshot melalui beberapa metode lain?
sumber
pvscan --cache
untuk memberi tahu lvmetad tentang filter baru, danpvscan
sekarang menyatakan PV ditolak oleh filter, tetapi masalahnya tetap ada.Saya mengalami masalah yang hampir sama dalam kombinasi dengan
vgimportclone
. Terkadang gagal dengan ini:Pada saat itu, jika saya ingin menghancurkan snapshot, pertama-tama saya harus menonaktifkan sementara
udev
karena bug yang dijelaskan di https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1088081Tetapi meskipun begitu, setelah tampaknya berhasil menonaktifkan grup volume LVM bersarang, pemetaan partisi untuk PV bersarang, yang dibuat oleh
kpartx
, entah bagaimana tetap digunakan.Triknya adalah bahwa mapper perangkat menyimpan pemetaan induk tambahan menggunakan nama grup volume lama, seperti ini di daftar pohon:
Solusinya adalah dengan menghapus pemetaan tertentu dengan
dmsetup remove insidevgname-lvroot
. Setelah itu,kpartx -d
danlvremove
bekerja dengan baik.sumber