Который действительно нарушает мой план резервного копирования этой машины ...
У меня есть сервер, который является гипервизором KVM для нескольких виртуальных машин. Одним из них является запуск Docker. Он имеет свои тома Docker в / dev / vdb, который настроен как PV LVM, на котором Docker использует свой драйвер direct-lvm для хранения данных контейнера Docker. Этот виртуальный диск является LVM LV на локальном диске хоста.
И хозяин, и гость запускают Fedora 21.
Хост-версия этого тома (отображается только соответствующий том):
[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)
Гость просматривает этот том (опять же, отображается только соответствующий том):
[root@docker2 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb docker-volumes lvm2 a-- 40.00g 0
Со всеми другими томами LVM на хосте я могу сделать снимок lvcreate --snapshot
, сделать резервную копию снимка и затем lvremove
без проблем. Но с этим конкретным томом я не могу, lvremove
потому что он используется:
[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.
В конце концов я выяснил, что устройство отображения устройств на хосте каким-то образом выяснило, что этот снимок логического тома содержит PV LVM, а затем приступил к сопоставлению логических томов в снимке с хостом (показаны только соответствующие тома):
[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)
Они точно соответствуют логическим томам внутри ВМ:
[root@docker2 ~]# lvs
LV VG Attr LSize
docker-data docker-volumes -wi-ao---- 39.95g
docker-meta docker-volumes -wi-ao---- 44.00m
Примечательно, что он не пытается сделать это с LVM LV при загрузке системы, а только когда я делаю снимок.
Что здесь происходит? Я действительно не хочу, чтобы устройство отображения отображало содержимое снимков LVM, чтобы увидеть, есть ли в них что-то, что оно может бесполезно отобразить для меня. Могу ли я подавить это поведение? Или мне нужно создать снимок с помощью другого метода?
источник
pvscan --cache
чтобы сообщить lvmetad о новом фильтре, иpvscan
теперь заявляет, что PV отклоняется фильтром, но проблема сохраняется.Я столкнулся примерно с той же проблемой в сочетании с
vgimportclone
. Иногда было бы не с этим:В этот момент, если я хотел уничтожить снимок, мне сначала пришлось временно отключить его
udev
из-за ошибки, описанной по адресу https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1088081.Но даже тогда, после, казалось бы, успешной деактивации вложенной группы томов LVM, отображение разделов для вложенного PV, созданного с помощью
kpartx
, каким-то образом оставалось в использовании.Уловка заключалась в том, что устройство отображения сохраняло дополнительное родительское отображение, используя старое имя группы томов, например, в древовидном списке:
Решением было просто удалить это конкретное сопоставление
dmsetup remove insidevgname-lvroot
. После этого,kpartx -d
иlvremove
работал отлично.источник