Linux设备映射器在拍摄快照时将LVM PV嵌套在LV内部

这真的搞乱了我备份这台机器的计划……

我有一台服务器,它是几个虚拟机的KVM管理程序.其中一个是运行Docker.它的/ dev / vdb上有Docker卷,它被设置为LVM PV,Docker使用its direct-lvm driver来存储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拍摄快照,备份快照,然后将其删除,没有任何问题.但是对于这个特定的卷,我无法删除它,因为它正在使用中:

[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.

最后我发现主机上的设备映射器以某种方式弄清楚这个逻辑卷快照包含LVM PV,然后继续将快照中的逻辑卷映射到主机(仅显示相关卷):

[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)

这些与VM内部的逻辑卷完全对应:

[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快照的内容,看看它们中是否有任何内容可以帮助我无法映射.我可以抑制这种行为吗?或者我是否需要通过其他方法创建快照?

解决方法

有时,相关文档隐藏在配置文件中,而不是隐藏在文档中.所以LVM似乎也是如此.

默认情况下,LVM将自动尝试激活启动后连接到系统的任何物理设备上的卷,只要所有PV都存在,并且lvmetad和udev(或最近的systemd)正在运行.创建LVM快照时,会触发udev事件,并且由于快照包含PV,因此lvmetad会自动运行pvscan,依此类推.

通过查看/ etc / lvm / backup / docker-volumes,我能够确定lvmetad是否已使用设备主要和次要号码在快照上显式运行pvscan,这会绕过通常会阻止此操作的LVM过滤器.该文件包含:

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

可以通过在/etc/lvm/lvm.conf中设置auto_activation_volume_list来控制此行为.它允许您设置允许自动激活哪些卷组,卷或标签.

因此,我只是将过滤器设置为包含主机的两个卷组;其他任何东西都不会与过滤器匹配,也不会自动激活.

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

guest虚拟机的LVM卷不再出现在主机上,最后,我的备份正在运行…

相关文章

查找全部容器的日志文件 $ sudo find /var/lib/docker/conta...
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型