Mic*_*ton 14 linux lvm device-mapper
这真的扰乱了我备份这台机器的计划......
我有一台服务器,它是多个虚拟机的 KVM 管理程序。其中之一是运行 Docker。它在 /dev/vdb 上有它的 Docker 卷,它被设置为一个 LVM PV,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)
Run Code Online (Sandbox Code Playgroud)
客人对这个卷的看法是(同样,只显示了相关卷):
[root@docker2 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb docker-volumes lvm2 a-- 40.00g 0
Run Code Online (Sandbox Code Playgroud)
使用主机上的所有其他 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.
Run Code Online (Sandbox Code Playgroud)
最终我发现主机上的设备映射器以某种方式发现这个逻辑卷快照包含一个 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)
Run Code Online (Sandbox Code Playgroud)
这些与 VM 内的逻辑卷完全对应:
[root@docker2 ~]# lvs
LV VG Attr LSize
docker-data docker-volumes -wi-ao---- 39.95g
docker-meta docker-volumes -wi-ao---- 44.00m
Run Code Online (Sandbox Code Playgroud)
值得注意的是,它不会在系统启动时尝试对 LVM LV 执行此操作,而仅在我拍摄快照时执行此操作。
这里发生了什么?我真的不希望设备映射器检查 LVM 快照的内容以查看其中是否有任何内容对我无益地映射。我可以抑制这种行为吗?还是我需要通过其他方法创建快照?
Mic*_*ton 10
有时相关文档隐藏在配置文件中,而不是在文档中。所以它似乎与 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'"
Run Code Online (Sandbox Code Playgroud)
这种行为可以通过设置auto_activation_volume_list
in来控制/etc/lvm/lvm.conf
。它允许您设置允许自动激活哪些卷组、卷或标签。
因此,我只需将过滤器设置为包含主机的两个卷组;其他任何东西都不会与过滤器匹配,也不会自动激活。
auto_activation_volume_list = [ "mandragora", "vm-volumes" ]
Run Code Online (Sandbox Code Playgroud)
来宾的 LVM 卷不再出现在主机上,最后,我的备份正在运行...
您想编辑 /etc/lvm/lvm.conf 中的“过滤器”值以仅检查 KVM 主机上的物理设备;默认值接受“每个块设备”,其中包括 LV 本身。默认值上方的注释相当全面,可以比我更好地解释用法。
归档时间: |
|
查看次数: |
4692 次 |
最近记录: |