我想用物理机直接启动 pve 创建的虚拟机,pve 使用 lvm thin 逻辑卷来存储虚拟机的磁盘,如果虚拟机是 fedora 的话很容易就能实现,比如我对 fedora 虚拟机的 dracut 做了以下的一点修改:
root@develop:/lib/dracut/modules.d# diff -u 90lvm/module-setup.sh 90lvm/module-setup.sh.bak --- 90lvm/module-setup.sh 2025-08-18 19:38:58.989838506 +0800 +++ 90lvm/module-setup.sh.bak 2025-08-18 19:30:54.839828659 +0800 @@ -49,7 +49,6 @@ # called by dracut install() { inst_multiple lvm grep - inst_multiple kpartx if [[ $hostonly_cmdline == "yes" ]]; then local _lvmconf root@develop:/lib/dracut/modules.d# root@develop:/lib/dracut/modules.d# diff -u 90lvm/lvm_scan.sh 90lvm/lvm_scan.sh.bak --- 90lvm/lvm_scan.sh 2025-08-18 19:39:06.604838587 +0800 +++ 90lvm/lvm_scan.sh.bak 2025-08-18 13:59:44.755601855 +0800 @@ -150,7 +150,6 @@ # if the LV is not lised as complete. # shellcheck disable=SC2086 lvm lvchange --yes -K -ay $activate_args "$LV" 2>&1 | vinfo - kpartx -av "/dev/$LV" fi done fi root@develop:/lib/dracut/modules.d# root@develop:/lib/dracut/modules.d#
然后用以下命令在虚拟机里生成一个用于物理机直接启动用的 initramfs:
dracut -f ~/initramfs-6.14.0-63.fc42.x86_64.guest.img -a "lvm" --add-drivers "nvme"
然后把这个 initramfs 和虚拟机的内核以及虚拟机 /boot/loader/entries/ 目录下的 grub 启动项拷贝到物理机的 boot 分区,然后再给内核命令行上加上一个 "rd.lvm=1 rd.lvm.lv=thin/desktop" 这样的配置就能实现直接从物理机启动虚拟机的系统了,这个内核命令行结合上面对 dracut 的修改可以实现在 initramfs 里把名为 thin 的 thin pool 里的名为 desktop 逻辑卷上的分区激活,然后 dracut 就能通过虚拟机的根文件系统的 UUID 找到根分区了,也就和正常的启动没有区别了,启动后用 lsblk 查看效果如下:
d@fedora-desktop:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS nvme1n1 259:0 0 3.6T 0 disk thin-pool_tmeta 252:0 0 3.6G 0 lvm thin-pool-tpool 252:2 0 3.6T 0 lvm thin-desktop 252:3 0 200G 0 lvm thin-desktop1 252:4 0 600M 0 part /boot/efi thin-desktop2 252:5 0 1G 0 part /boot thin-desktop3 252:6 0 198.4G 0 part /home / thin-pool 252:7 0 3.6T 1 lvm thin-pool_tdata 252:1 0 3.6T 0 lvm thin-pool-tpool 252:2 0 3.6T 0 lvm thin-desktop 252:3 0 200G 0 lvm thin-desktop1 252:4 0 600M 0 part /boot/efi thin-desktop2 252:5 0 1G 0 part /boot thin-desktop3 252:6 0 198.4G 0 part /home / thin-pool 252:7 0 3.6T 1 lvm
可以看到根文件系统所在的块设备是/dev/mapper/thin-desktop3 ,这个块设备是/dev/mapper/thin-desktop 这个 lvm thin 逻辑卷的一个分区。
我想在 debian 13 系统上实现一样的效果,但是我对 debian 不熟悉,有没有非常熟悉 debian 或 ubuntu 的老哥们能帮我想一个简单一点的办法搞定这个,真的不想去啃 debian 系的 initramfs 的生成逻辑,感觉那一套和 redhat 系用 dracut 制作 initramfs 的方式比起来实在是太落后了。
![]() | 1 pagxir 52 天前 via Android 那你可以直接使用 Fedora 的 initramfs+kernel+module 其他的用 Debian 就好了 |
![]() | 2 oott123 52 天前 via Android 一般不是会有生成 fallback 的 initramfs 吗,啥也不改用那个直接启动就行了吧 |