AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 678642
Accepted
Michael Hampton
Michael Hampton
Asked: 2015-03-27 21:22:12 +0800 CST2015-03-27 21:22:12 +0800 CST 2015-03-27 21:22:12 +0800 CST

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

  • 772

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

我有一台服务器,它是多个虚拟机的 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)

客人对该卷的看法是(同样,仅显示相关卷):

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

最终我发现主机上的设备映射器以某种方式发现这个逻辑卷快照包含一个 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 快照的内容以查看其中是否有任何内容无法为我映射。我可以抑制这种行为吗?还是我需要通过其他方法创建快照?

linux
  • 3 3 个回答
  • 5077 Views

3 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2015-03-27T22:31:30+08:002015-03-27T22:31:30+08:00

    有时相关文档隐藏在配置文件中,而不是文档中。所以它似乎与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'"
    

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

    因此,我只需将过滤器设置为包含主机的两个卷组;其他任何内容都不会匹配过滤器并且不会自动激活。

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

    来宾的 LVM 卷不再出现在主机上,最后,我的备份正在运行...

    • 10
  2. Craig Miskell
    2015-03-27T22:02:23+08:002015-03-27T22:02:23+08:00

    您想编辑 /etc/lvm/lvm.conf 中的“过滤器”值以仅检查 KVM 主机上的物理设备;默认值接受“每个块设备”,其中包括 LV 本身。默认值上方的注释相当全面,可以比我更好地解释用法。

    • 5
  3. Josip Rodin
    2016-09-29T01:26:07+08:002016-09-29T01:26:07+08:00

    我遇到了大致相同的问题vgimportclone。它有时会失败:

      WARNING: Activation disabled. No device-mapper interaction will be attempted.
      Physical volume "/tmp/snap.iwOkcP9B/vgimport0" changed
      1 physical volume changed / 0 physical volumes not changed
      WARNING: Activation disabled. No device-mapper interaction will be attempted.
      Volume group "insidevgname" successfully changed
      /dev/myvm-vg: already exists in filesystem
      New volume group name "myvm-vg" is invalid
    Fatal: Unable to rename insidevgname to myvm-vg, error: 5
    

    那时,如果我想销毁快照,我首先不得不暂时禁用,因为https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1088081udev中描述的错误

    但即便如此,在看似成功地停用了嵌套 LVM 的卷组之后,由 创建的嵌套 PV 的分区映射kpartx仍然在使用中。

    诀窍似乎是设备映射器使用旧的卷组名称保留了一个额外的父映射,就像树列表中的这样:

    insidevgname-lvroot (252:44)
     └─outsidevgname-myvm--root-p2 (252:43)
        └─outsidevgname-myvm--root (252:36)
    

    解决方案是使用 . 简单地删除该特定映射dmsetup remove insidevgname-lvroot。之后,kpartx -d并且lvremove工作正常。

    • 2

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve