启动时未激活 LVM 卷组

启动时未激活 LVM 卷组

我在物理服务器上安装了 XCP-ng。我使用了 500 GB 的 SSD,并让 XCP-ng 使用整个磁盘,其中 XCP-ng 只使用了 15 GiB;其余的是 VG 中的可用空间。

现在,我使用所有可用空间在该 VG 上创建了一个新的 LV。我在 XCP-ng 中将此 LV 用作 SR 存储(本地 LVM),它按预期运行。

问题是它以某种方式创建了一个“嵌套” VG,至少我创建的 LV 似乎表现得像一个 VG。但是,它不会在启动时自动激活。

系统启动时,会自动激活“主” VG,其中包含所有 LV(包括我创建的 LV),但运行时vgchange -ay,它会激活一个新 VG(大小与我创建的 LV 相同)。只有这样,我才能在 XCP-ng 和 VM 中使用该存储。

您知道如何让它自动激活这些“嵌套”的 VG 吗?

我曾尝试:

  • 创建一个systemd服务来运行vgchange -ay,但它失败并显示退出代码3
  • 修改/etc/lvm/lvm.config为包括auto_activation_volume_list设置为两个 VG 的名称数组。

到目前为止还没有任何帮助。

答案1

我通过将所需命令放入来解决了这个问题crontab

请注意,可以将命令放入脚本中,甚至可以记录输出。此外,我还将命令 ( xe pbd-plug) 附加到尝试将 PBD 插入主机。这样我就可以访问虚拟机的硬盘了。

# cat /var/spool/cron/root
@reboot /usr/sbin/vgchange -ay &> /dev/null; /usr/sbin/vgchange -ay &> /dev/null; /opt/xensource/bin/xe pbd-plug uuid=71389ed2-d0e3-ba07-d734-b907757d9c44 &> /dev/null

答案2

您可以创建一个 systemd 单元并安排它在 XCP 组件之前启动:


# Make sure the file doesn't already exist
$ ls /etc/systemd/system/lvm-activate.service
ls: cannot access /etc/systemd/system/lvm-activate.service

# create it
$ echo >/etc/systemd/system/lvm-activate.service <<END
[Install]
WantedBy=multi-user.target
Before=xenopsd-xc.service
RequiredBy=xenopsd-xc.service

[Service]
Type=oneshot
ExecStart=/usr/sbin/vgchange -ay
END

# enable it
$ systemctl daemon-reload
$ systemctl enable lvm-activate

答案3

在 RHEL8(CentOS8)上,您可以将 VG 激活添加到 /etc/systemd/system/sysinit.target.wants/lvm2-monitor.service

[Unit]
Description=Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling
Documentation=man:dmeventd(8) man:lvcreate(8) man:lvchange(8) man:vgchange(8)
Requires=dm-event.socket
After=dm-event.socket dm-event.service lvm2-activation.service
Before=local-fs-pre.target shutdown.target
DefaultDependencies=no
Conflicts=shutdown.target

[Service]
Type=oneshot
Environment=LVM_SUPPRESS_LOCKING_FAILURE_MESSAGES=1
ExecStart=/usr/sbin/lvm vgchange -ay
ExecStart=/usr/sbin/lvm vgchange --monitor y
ExecStop=/usr/sbin/lvm vgchange --monitor n
RemainAfterExit=yes

[Install]
WantedBy=sysinit.target

相关内容