让系统在虚拟机中启动
四年前,我在裸金属二进制翻译器的时候,调研过程中发现了空客写了一个叫 ramooflax 的项目,其基本想法是,对于一个正常使用的普通的操作系统,如果我插上一个 U 盘,这个 U 盘里面有一个 Hypervisor , 那么系统引导先启动这个 Hypervisor ,然后这个 Hypervisor 来启动原来的操作系统,这样原来的操作系统相当于被架空了一层,他不再是直接运行在物理硬件, 而不是运行在虚拟化环境中的。这个想法很有趣,我当时意识到这个可以通过 QEMU 实现,但是我对于 QEMU / edk2 / seabios 的理解还很薄弱,就一直搁置起来了。 不过今天(2025-12-27),各种条件都成熟了,我尝试了一下走通这个操作,实际结果我想想还要顺利。
通过 qemu 安装
首先将 nvme 盘直通到虚拟机中,然后安装系统 关键的启动参数为:
-drive file=/home/martins3/data/hack/iso/Fedora-Server-dvd-x86_64-43-1.6.iso,format=raw,if=none,id=cd0,readonly=on \
-device scsi-cd,bus=scsi1.0,channel=0,scsi-id=20,lun=1,drive=cd0,bootindex=0 \
-device virtio-blk-pci,drive=boot1,bootindex=1
-drive file=/home/martins3/data/bios/ovmf_binary/usr/share/edk2/ovmf/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on \
-drive file=/home/martins3/data/hack/vm/yyds-nvme-boot/OVMF_VARS.fd,if=pflash,format=raw,unit=1 \
这里需要注意两个事情:
- 因为现在物理机中使用默认方式安装了一个 fedora ,如果安装虚拟机也直接用默认方法,会出现 lvm 的 logical volume 名称冲突的问题,
导致两个系统都无法进入系统。具体报错参考这个
nvme2n1 259:5 0 3.6T 0 disk ├─nvme2n1p1 259:6 0 600M 0 part /boot/efi ├─nvme2n1p2 259:7 0 1G 0 part /boot └─nvme2n1p3 259:8 0 3.6T 0 part └─fedora-root 252:0 0 3.6T 0 lvm / - 启动虚拟机需要使用 ovmf ,而不是 seabios ,因为物理机的启动方式也是 UEFI 的。
虚拟机中安装好之后:
🧀 fastfetch
.',;::::;,'. martins3@localhost
.';:cccccccccccc:;,. ------------------
.;cccccccccccccccccccccc;. OS: Fedora Linux 43 (Server Edition) x86_64
.:cccccccccccccccccccccccccc:. Host: KVM/QEMU Standard PC (i440FX + PIIX, 1996) (pc-i440fx-9.2)
.;ccccccccccccc;.:dddl:.;ccccccc;. Kernel: Linux 6.17.1-300.fc43.x86_64
.:ccccccccccccc;OWMKOOXMWd;ccccccc:. Uptime: 28 mins
.:ccccccccccccc;KMMc;cc;xMMc;ccccccc:. Packages: 1317 (nix-user)
,cccccccccccccc;MMM.;cc;;WW:;cccccccc, Shell: zsh 5.9
:cccccccccccccc;MMM.;cccccccccccccccc: Display (QEMU Monitor): 1280x800 @ 75 Hz in 15"
:ccccccc;oxOOOo;MMM000k.;cccccccccccc: Terminal: /dev/pts/1
cccccc;0MMKxdd:;MMMkddc.;cccccccccccc; CPU: 13th Gen Intel(R) Core(TM) i9-13900K (32) @ 3.00 GHz
ccccc;XMO';cccc;MMM.;cccccccccccccccc' GPU: Unknown Device 1111 (VGA compatible)
ccccc;MMo;ccccc;MMW.;ccccccccccccccc; Memory: 2.08 GiB / 31.32 GiB (7%)
ccccc;0MNc.ccc.xMMd;ccccccccccccccc; Swap: 0 B / 8.00 GiB (0%)
cccccc;dNMWXXXWM0:;cccccccccccccc:, Disk (/): 32.12 GiB / 950.82 GiB (3%) - xfs
cccccccc;.:odl:.;cccccccccccccc:,. Local IP (ens7): 10.0.2.15/24
ccccccccccccccccccccccccccccc:'. Locale: en_US.UTF-8
:ccccccccccccccccccccccc:;,..
':cccccccccccccccc::;,.
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 10G 0 disk
sdb 8:16 0 10G 0 disk
sr0 11:0 1 3.2G 0 rom
zram0 251:0 0 8G 0 disk [SWAP]
vda 253:0 0 350G 0 disk
nvme0n1 259:0 0 953.9G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 2G 0 part /boot
└─nvme0n1p3 259:3 0 951.3G 0 part /
root@localhost:~# blkid
/dev/nvme0n1p3: UUID="1eea5666-0bc7-48c1-a3ba-8e4156107f41" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="be4b4958-2c4d-474c-a9c3-6b807ef1cd00"
/dev/nvme0n1p1: UUID="AE26-2141" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="9512a2cb-5f8c-4c8a-a2ac-8b9cadb0aef6"
/dev/nvme0n1p2: UUID="06daf7d3-0d10-4a6d-a1a7-d28204877b97" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="822fe3cf-3f8c-46e8-8ea9-11648f4816bb"
/dev/sr0: BLOCK_SIZE="2048" UUID="2025-10-23-03-25-56-00" LABEL="Fedora-S-dvd-x86_64-43" TYPE="iso9660" PTTYPE="PMBR"
/dev/zram0: LABEL="zram0" UUID="07038a94-efb1-487f-accb-2de7b185d679" TYPE="swap"
通过 QEMU 安装好虚拟机后,物理机中,盘的形态为:
🧀 lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 1.8T 0 disk
├─sda1 8:1 0 600M 0 part
├─sda2 8:2 0 1G 0 part
└─sda3 8:3 0 1.8T 0 part
sdb 8:16 0 476.9G 0 disk
├─sdb1 8:17 0 600M 0 part
├─sdb2 8:18 0 1G 0 part
└─sdb3 8:19 0 15G 0 part
zram0 251:0 0 8G 0 disk [SWAP]
nvme0n1 259:0 0 953.9G 0 disk
nvme1n1 259:1 0 953.9G 0 disk
├─nvme1n1p1 259:2 0 600M 0 part (新系统的 efi 分区)
├─nvme1n1p2 259:3 0 2G 0 part
└─nvme1n1p3 259:4 0 951.3G 0 part
nvme2n1 259:5 0 3.6T 0 disk
├─nvme2n1p1 259:6 0 600M 0 part /boot/efi
├─nvme2n1p2 259:7 0 1G 0 part /boot
└─nvme2n1p3 259:8 0 3.6T 0 part
└─fedora-root 252:0 0 3.6T 0 lvm /
配置 grub
在 /etc/grub.d/40_custom 里加入,这里的 AE26-2141 是执行 blkid 获取的,需要具体的调整:
menuentry "Fedora on nvme1n1 (EFI)" {
search --no-floppy --fs-uuid --set=root AE26-2141
chainloader /EFI/fedora/grubx64.efi
}
然后:
sudo grub2-mkconfig -o /etc/grub2-efi.cfg
验证结果
进入到 grub 界面后,选择最下面的一行,选择内核进入:
从物理机中进入,再次观察,可以发现还是之前的盘,但是硬件都切换为物理的硬件了:
🧀 fastfetch
.',;::::;,'. martins3@localhost
.';:cccccccccccc:;,. ------------------
.;cccccccccccccccccccccc;. OS: Fedora Linux 43 (Server Edition) x86_64
.:cccccccccccccccccccccccccc:. Kernel: Linux 6.17.1-300.fc43.x86_64
.;ccccccccccccc;.:dddl:.;ccccccc;. Uptime: 4 mins
.:ccccccccccccc;OWMKOOXMWd;ccccccc:. Packages: 1317 (nix-user)
.:ccccccccccccc;KMMc;cc;xMMc;ccccccc:. Shell: zsh 5.9
,cccccccccccccc;MMM.;cc;;WW:;cccccccc, Display (DELL S2721QS): 3840x2160 @ 60 Hz in 27" [External]
:cccccccccccccc;MMM.;cccccccccccccccc: Terminal: /dev/pts/0
:ccccccc;oxOOOo;MMM000k.;cccccccccccc: CPU: 13th Gen Intel(R) Core(TM) i9-13900K (32) @ 5.80 GHz
cccccc;0MMKxdd:;MMMkddc.;cccccccccccc; GPU 1: NVIDIA GeForce GTX 1060 3GB [Discrete]
ccccc;XMO';cccc;MMM.;cccccccccccccccc' GPU 2: Intel UHD Graphics 770 @ 1.65 GHz [Integrated]
ccccc;MMo;ccccc;MMW.;ccccccccccccccc; Memory: 1.75 GiB / 125.52 GiB (1%)
ccccc;0MNc.ccc.xMMd;ccccccccccccccc; Swap: 0 B / 8.00 GiB (0%)
cccccc;dNMWXXXWM0:;cccccccccccccc:, Disk (/): 32.16 GiB / 950.82 GiB (3%) - xfs
cccccccc;.:odl:.;cccccccccccccc:,. Locale: en_US.UTF-8
ccccccccccccccccccccccccccccc:'.
:ccccccccccccccccccccccc:;,..
':cccccccccccccccc::;,.
~ 🦁
🧀 lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 1.8T 0 disk
├─sda1 8:1 0 600M 0 part
├─sda2 8:2 0 1G 0 part
└─sda3 8:3 0 1.8T 0 part
sdb 8:16 0 476.9G 0 disk
├─sdb1 8:17 0 600M 0 part
├─sdb2 8:18 0 1G 0 part
└─sdb3 8:19 0 15G 0 part
zram0 251:0 0 8G 0 disk [SWAP]
nvme0n1 259:0 0 953.9G 0 disk
nvme1n1 259:1 0 953.9G 0 disk
├─nvme1n1p1 259:2 0 600M 0 part /boot/efi
├─nvme1n1p2 259:3 0 2G 0 part /boot
└─nvme1n1p3 259:4 0 951.3G 0 part /
nvme2n1 259:5 0 3.6T 0 disk
├─nvme2n1p1 259:6 0 600M 0 part
├─nvme2n1p2 259:7 0 1G 0 part
└─nvme2n1p3 259:8 0 3.6T 0 part
└─fedora-root 252:0 0 3.6T 0 lvm
本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。