一直想着在 macos 上利用 qemu 整一个独立的 linux 子系统,于是学习了一下 qemu 不过一般情况来说启动虚拟机之后都直接打开了一个窗口终端,然后我就发现了 tty 重定向到终端这个有意思的东西。

1、配置 GRUB

我这里安装的操作系统是 debian,并且使用了 GNU GRUB 作为启动引导。grub 配置文件路径在 /etc/default/grub ,直接使用 nano /etc/default/grub 编辑配置文件

GRUB_CMDLINE_LINUX="text console=tty0 console=ttyS0,115200"

GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speef=115200 --unit=0 --word=8 --parity=on --stop=1"

主要就是修改上面三个配置项目,保存配置文件后执行 update-grub 生成更新 grub 引导配置文件 /boot/grub/grub.cfg 更新成功的话在文件中应该会看到

…
serial --speef=115200 --unit=0 --word=8 --parity=on --stop=1
terminal_input serial
terminal_output serial
…

2、QEMU 无窗口启动

使用 qemu 的启动参数 -nographic 来无窗口启动虚拟机,我这边就是修改启动脚本

#!/bin/sh
qemu-system-x86_64 \
	-m 8G `# 指定内存大小` \
	-vga virtio \
	-smp cpus=4 `# 指定 CPU 核数` \
	-drive file=debian2.qcow2,if=virtio \
	-cpu host `# 指定使用宿主机 CPU` \
	-display default,show-cursor=on `# 显示配置` \
	-nographic -serial mon:stdio `# 无窗口启动` \
	-machine accel=hvf `# 指定机器类型,使用 Hypervisor.framework 虚拟化环境`

3、隐藏 GRUB 选择菜单

按道理到上面应该搞定了,但是使用的时候我发现每次启动都得等 grub 读秒选择启动系统,于是我就想着能不能把这个菜单关掉,解决方案就是将选择超时时间设置为 0 ,还是在 /etc/default/grub 配置文件,修改保存后 update-grub 更新。

GRUB_DEFAULT=0 # 默认选择项
GRUB_TIMEOUT=0 # 超时时间