我想用物理机直接启动 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 1 天前 via Android
那你可以直接使用 Fedora 的 initramfs+kernel+module 其他的用 Debian 就好了
|
![]() |
2
oott123 1 天前 via Android
一般不是会有生成 fallback 的 initramfs 吗,啥也不改用那个直接启动就行了吧
|