PVE软盘安装系统Tips

前言

在我尝试 PVE 的过程中发现了很多问题,包括但不限于自定义性不足,不支持软盘 (Floppy) 引导等等,但好在 PVE 是基于 qemu-kvm 的, 如此一来,我们利用 Shell 就有很大的操作空间。为此,我通过软盘安装了 MS DOS 7.1,以下是安装过程记录。

过程记录

软盘镜像下载

分享一个很好的镜像站,收录了很多网上较难找的旧系统、软件、游戏等:WinWorld

由于是公益性质网站,每天下载限额25次。

WinWorld
WinWorld

PVE 安装软盘系统

  1. 上传软盘镜像

    由于 PVE 不支持 img 文件,我们可以用 scpsftp 将镜像上传到 PVE 系统上。

    在 PVE 系统中,/var/lib/vz/template/iso 文件夹是 PVE 镜像模版的默认存储位置,建议统一存储在同一位置。

    以下是指令示例:

    # SCP
    scp -O /path/to/file/xxx.img username@remote_ip:/var/lib/vz/template/iso

    # SFTP
    sftp username@remote_ip

    sftp> lcd /path/to/file
    sftp> put -r xxx.img /var/lib/vz/template/iso
    sftp> exit

  2. 创建新的虚拟机

    PVE 右上角创建虚拟机,常规按自己喜好设置,操作系统不使用任何介质,系统默认,硬盘2G,CPU类别保持默认,内存512M,网络无网络设备。

    系统信息
    系统信息
  3. PVE Shell 基本操作

    进入 PVE Shell,PVE 包含操作虚拟机的指令 qm,如下是本文将用到的指令:

    # 显示虚拟机启动指令
    qm showcmd <vmid> [options]

    # 进入虚拟机 kvm 控制台
    qm monitor <vmid> [options]

    # 显示虚拟机列表(包含虚拟机PID等基本信息)
    qm list
  4. 挂载软盘并引导

    使用 qm list 指令,查看刚刚创建的虚拟机的VMID(本文以102举例,请自行替换

    root@truenas[~]# qm list
    VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID
    100 HAOS running 2048 32.00 1853288
    101 xenix stopped 256 0.00 0
    102 MSDOS7.1 stopped 512 2.00 0
    103 PureDarwin running 2048 32.00 139604
    104 pdxmas stopped 2048 32.00 0

    使用 qm showcmd <vmid> 查看 kvm 命令

    root@truenas[~]# qm showcmd 102

    /usr/bin/kvm -id 102 -name 'MSDOS7.1,debug-threads=on' -no-shutdown -chardev 'socket,id=qmp,path=/var/run/qemu-server/102.qmp,server=on,wait=off' -mon 'chardev=qmp,mode=control' -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' -mon 'chardev=qmp-event,mode=control' -pidfile /var/run/qemu-server/102.pid -daemonize -smbios 'type=1,uuid=464448a0-979e-4af4-9cb6-bf4755594c7b' -smp '2,sockets=1,cores=2,maxcpus=2' -nodefaults -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' -vnc 'unix:/var/run/qemu-server/102.vnc,password=on' -cpu qemu64,+aes,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+pni,+popcnt,+sse4.1,+sse4.2,+ssse3 -m 512 -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' -device 'pci-bridge,id=pci.3,chassis_nr=3,bus=pci.0,addr=0x5' -device 'vmgenid,guid=4c87b94b-3216-480b-8308-6c5f5ed9c435' -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' -device 'VGA,id=vga,bus=pci.0,addr=0x2' -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' -iscsi 'initiator-name=iqn.1993-08.org.debian:01:33a44c1b79b' -drive 'file=/dev/zvol/Hack1n-Disk/vm-102-disk-0,if=none,id=drive-ide0,format=raw,cache=none,aio=io_uring,detect-zeroes=on' -device 'ide-hd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0,bootindex=100' -drive 'if=none,id=drive-ide2,media=cdrom,aio=io_uring' -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=101' -machine 'type=pc+pve0'

    在 kvm 中, 软盘挂载参数为 -fda /path/to/file/xxx.img , 如果为 UNIX 系统软盘可能出现无法校验软盘是否存在引导的问题,可以添加参数 -no-fd-bootchk 以跳过软盘引导项检查。

    由于 MS DOS 7.1 的加载项可以直接读出,我们不必跳过加载项,直接添加 -fda 参数即可,后面改成自己的软盘镜像目录。

    环境因人而异!切勿复制指令!

    /usr/bin/kvm -id 102 -name 'MSDOS7.1,debug-threads=on' -no-shutdown -chardev 'socket,id=qmp,path=/var/run/qemu-server/102.qmp,server=on,wait=off' -mon 'chardev=qmp,mode=control' -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' -mon 'chardev=qmp-event,mode=control' -pidfile /var/run/qemu-server/102.pid -daemonize -smbios 'type=1,uuid=464448a0-979e-4af4-9cb6-bf4755594c7b' -smp '2,sockets=1,cores=2,maxcpus=2' -nodefaults -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' -vnc 'unix:/var/run/qemu-server/102.vnc,password=on' -cpu qemu64,+aes,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+pni,+popcnt,+sse4.1,+sse4.2,+ssse3 -m 512 -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' -device 'pci-bridge,id=pci.3,chassis_nr=3,bus=pci.0,addr=0x5' -device 'vmgenid,guid=4c87b94b-3216-480b-8308-6c5f5ed9c435' -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' -device 'VGA,id=vga,bus=pci.0,addr=0x2' -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' -iscsi 'initiator-name=iqn.1993-08.org.debian:01:33a44c1b79b' -drive 'file=/dev/zvol/Hack1n-Disk/vm-102-disk-0,if=none,id=drive-ide0,format=raw,cache=none,aio=io_uring,detect-zeroes=on' -device 'ide-hd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0,bootindex=100' -drive 'if=none,id=drive-ide2,media=cdrom,aio=io_uring' -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=101' -machine 'type=pc+pve0' -fda /var/lib/vz/template/iso/msdos/disk01.img

    回车执行,进入我们虚拟机的控制台,在 BIOS 引导画面出现时进入引导菜单,选择 Floppy [drive A]

    提示换盘
    提示换盘
  5. 进入qm系统管理器

    进入 PVE 的 Shell,使用 qm monitor <vmid> 进入 qm 系统管理器

    root@truenas[~]# qm monitor 102

    Entering QEMU Monitor for VM 102 - type 'help' for help
    qm>
  6. 查看设备树以查找软盘挂载点

    指令:info qtree

    qm> info
    bus: main-system-bus
    type System
    dev: ps2-mouse, id ""
    gpio-out "" 1
    dev: ps2-kbd, id ""
    gpio-out "" 1
    dev: hpet, id ""
    gpio-in "" 2
    gpio-out "" 1
    gpio-out "sysbus-irq" 32
    timers = 3 (0x3)
    msi = false
    hpet-intcap = 4 (0x4)
    hpet-offset-saved = true
    mmio 00000000fed00000/0000000000000400
    dev: kvm-ioapic, id ""
    ......

    会生成许多行,耐心找到 floppy 字段,一般在 ISA 总线下的 floppy 总线,案例结果如下。

    dev: isa-fdc, id ""
    iobase = 1008 (0x3f0)
    irq = 6 (0x6)
    dma = 2 (0x2)
    fdtypeA = "auto"
    fdtypeB = "auto"
    fallback = "288"
    bus: floppy-bus.0
    type floppy-bus
    dev: floppy, id ""
    unit = 0 (0x0)
    drive = "floppy0"
    backend_defaults = "auto"
    logical_block_size = 512 (512 B)
    physical_block_size = 512 (512 B)
    min_io_size = 0 (0 B)
    opt_io_size = 0 (0 B)
    discard_granularity = 4294967295 (4 GiB)
    write-cache = "auto"
    share-rw = false
    account-invalid = "auto"
    account-failed = "auto"
    drive-type = "144"

    我们需要的字段位于设备下的驱动器名,即drive = "floppy0",现在它挂载的内容为我们引导时 -fda 参数后面的镜像,我们利用将其更改为系统安装时需要的另一个附加镜像。

    qm> change floppyID /path/to/file/another_file.img

    对于案例,我们应当执行如下指令:

    qm> change floppy0 /var/lib/vz/template/iso/msdos/disk02.img

    该指令若执行正确无任何返回内容,我们直接返回系统,继续安装步骤即可,如此换盘完成。

完成安装

按照提示继续后续的安装步骤,重启并通过硬盘引导入 MS DOS。

最后的安装步骤
最后的安装步骤
安装成功
安装成功

TroubShooting

暂无,欢迎在评论区留言指出。

结语

MS DOS 还是很经典而且好玩滴,嘿嘿.

后续更新如何在 PVE 安装基于 macOS 开源内核的社区版本 PureDarwin 预览版系统的教程,欢迎收藏网站关注后续更新。