archlinux 安装kvm QEMU 替代pve和unraid 做all in one 服务器

pve 不够灵活,unraid不单收费也不灵活,通过一段时间的使用,决定还是arch神教。已经基本安装了一个archlinux系统

内容占用 150-170M 硬盘占用1.9G左右。我efi分区有一个 功能完整带网络的winpe,还有一个 alpine 所以占用有700M,实际不会这么大

df -h
Filesystem      Size  Used Avail Use% Mounted on
dev             7.8G     0  7.8G   0% /dev
run             7.8G  1.1M  7.8G   1% /run
/dev/nvme0n1p3  4.9G  1.9G  2.7G  42% /
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           7.8G     0  7.8G   0% /tmp
/dev/nvme0n1p1  5.0G  710M  4.3G  14% /boot/efi
tmpfs           1.6G     0  1.6G   0% /run/user/1000

初始教程基于arch,后面可能会尝试用alpine 看时间和精力吧。

安装组件

sudo pacman -S qemu-base  # 大概 329M  84个包 保护 qemu-img工具

          capstone-4.0.2-6  dtc-1.6.1-4  edk2-ovmf-202208-1  fuse3-3.12.0-1  hicolor-icon-theme-0.17-2  libcacard-2.7.0-2  libdrm-2.4.114-1  libepoxy-1.5.10-1
          libglvnd-1.5.0-1  libnfs-5.0.2-1  libomxil-bellagio-0.9.3-3  libslirp-4.7.0-1  libssh-0.10.4-1  liburcu-0.13.2-1  libxdamage-1.1.5-4
          libxkbcommon-1.4.1-1  libxshmfence-1.3.1-1  libxxf86vm-1.1.5-1  libyaml-0.2.5-1  llvm-libs-14.0.6-3  lm_sensors-1:3.6.0.r41.g31d1f125-1  lzo-2.10-3
          mesa-22.2.1-1  multipath-tools-0.9.3-1  ndctl-74-1  numactl-2.0.16-1  pixman-0.42.2-1  qemu-audio-spice-7.1.0-10  qemu-block-curl-7.1.0-10
          qemu-block-dmg-7.1.0-10  qemu-block-nfs-7.1.0-10  qemu-block-ssh-7.1.0-10  qemu-chardev-spice-7.1.0-10  qemu-common-7.1.0-10
          qemu-hw-display-qxl-7.1.0-10  qemu-hw-display-virtio-gpu-7.1.0-10  qemu-hw-display-virtio-gpu-gl-7.1.0-10  qemu-hw-display-virtio-gpu-pci-7.1.0-10
          qemu-hw-display-virtio-gpu-pci-gl-7.1.0-10  qemu-hw-display-virtio-vga-7.1.0-10  qemu-hw-display-virtio-vga-gl-7.1.0-10
          qemu-hw-s390x-virtio-gpu-ccw-7.1.0-10  qemu-hw-usb-host-7.1.0-10  qemu-hw-usb-redirect-7.1.0-10  qemu-hw-usb-smartcard-7.1.0-10  qemu-img-7.1.0-10
          qemu-pr-helper-7.1.0-10  qemu-system-x86-7.1.0-10  qemu-system-x86-firmware-7.1.0-10  qemu-tools-7.1.0-10  qemu-ui-curses-7.1.0-10
          qemu-ui-opengl-7.1.0-10  qemu-ui-spice-app-7.1.0-10  qemu-ui-spice-core-7.1.0-10  qemu-virtiofsd-7.1.0-10  seabios-1.16.0-3  snappy-1.1.9-2
          spice-0.15.0-1  usbredir-0.13.0-1  vde2-2.3.3-3  virglrenderer-0.9.1-1  vulkan-icd-loader-1.3.226-1  wayland-1.21.0-1  wolfssl-5.5.3-1
          xkeyboard-config-2.37-1  qemu-base-7.1.0-10

sudo usermod -a -G kvm user_name 
sudo pacman -S ovmf  # efi的支持 可选安装 前面装qemu的时候 应该自动安装上了 edk2-ovmf  17M

kvm是内核内置的,不需要另外安装。

我是不建议使用libvirt的,因为shell方式更加灵活 也更简单。对了解qemu-system的也由帮助,后面所有教程和记录 全部基于shell

libvirt

sudo pacman -S libvirt  #可选,命令行模式用的习惯,就不用这个工具,可以用xml管理虚拟机,libvirt是Linux上实现虚拟化功能的库,是长期稳定的C语言API,支持KVM/QEMU、Xen、LXC等主流虚拟化方案。 50M左右 5个包

查看其他相关包的包sudo pacman -Ss qemu

音频映射,你能需要 多几个包: qemu-audio-alsa qemu-audio-pa 等几个包

挂载exfat 和机械盘分区

1
2
3
4
sudo pacman -S exfat-utils
sudo mkdir /mnt/hdd /mnt/ssd
sudo mount /dev/nvme0n1p2 /mnt/ssd
sudo mount /dev/sda1 /mnt/hdd

基本系统

只安装了一下包

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
base linux linux-headers linux-firmware
#基本工具
openssh sudo nano
#网络
dhcpd networkmanager
#引导
grub efibootmgr
#个人需要的 exfat 和 fish
exfat-utils
fish
# kvm相关的
qemu-base

qemu-system-x86_64 命令行方式 灵活 创建虚拟机

参数 参考 :https://man.archlinux.org/man/qemu.1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
-name 设置虚拟机名称
-m 指定虚拟机内存大小
-smp 设置虚拟机CPU数
-cpu 选择CPU
-hda 选择使用*.qcow2 作为IDE硬盘镜像
-cdrom 选择使用*.iso作为cdrom安装镜像
-boot 选择启动类型: floppy (a), hard disk ©, CD-ROM (d), network (n)
-enable-kvm 使能KVM支持:enable KVM full virtualization support
-netdev 配置主机的虚拟网卡:configure a host TAP network backend with ID ‘str’
type 类型 ifname 名称 connected to a bridge (default=br0)
script:use network scripts ‘file’ (default=/etc/qemu-ifup)
-device 配置虚拟机的网卡类型
-vnc 配置VNC端口

实例: 先弄一个win10虚拟机

创建磁盘

如果能自己 估算每一个虚拟机的磁盘占用,建议用raw格式,因为img文件兼容性更好一些,qcow2 在win下需要转换才可以访问。而且img文件可以用ventoy直接在物理机启动。各有优势吧,自己选择。

 qemu-img create -f raw  -o size=16G /mnt/exfat/win10.img
 #qcows2多一个是否初始分配空间的选项,也就是类似vhd的动态磁盘 具体含义这里不解释
 qemu-img create -f qcow2 -o preallocation=falloc|off|full|metadata    size=10G  q4.qcow2

准备安装镜像和驱动iso

/mnt/hdd/iso/windows/Win10-21H2.iso
/mnt/hdd/iso/virtio-win-0.1.225.iso  

virtio驱动iso下载地址: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

查看机型和接口参数

机型尽量用q35,对新特性支持好一些,新linux 或win8以上win 或者mac 接口尽量用virtio,accel当然多数情况都用kvm,或者直接 -enable-kvm 也可以

qemu-system-x86_64 -machine help

后面都选 pc-q35-7.1

启动一个virtio硬盘和桥接网卡的win10虚拟机 q35

 qemu-system-x86_64 -enable-kvm -machine pc-q35-7.1  -m 8192   \
 -drive index=1,media=disk,format=raw,if=virtio,file=/mnt/exfat/win10.img,cache=unsafe \
 -drive index=2,media=cdrom,file=/mnt/hdd/iso/windows/Win10-21H2.iso \
 -drive index=3,media=cdrom,file=/mnt/hdd/iso/virtio-win-0.1.225.iso \
 -vnc :1

不指定vnc的话,他默认是监听本地 类似::1:5900,其他机器是连不上的。所以这里指定一下:x

外部机器 vnc 链接 ip:5901 即可,鼠标可能会错位,多用键盘配合 可以顺利安装上win10

性能优化

上了个厕所发现还没装完。。

安装过程并不快,感觉还少了点什么。,然后想起来。。没指定cpu。。。大概是单核。。。哈哈哈

-smp 2,sockets=1  #一个cpu2个核心的意思
-smp 12,sockets=1,cores=6 # 单cpu 双核4线程

重新执行 。顺带加上引导菜单 -boot menu=on,strict=off windows主机可以再加 -cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time 开启 Hyper-V enlightenments 提升性能 如果linux虚拟机可以 -drive file=disk_image,if=virtio,aio=native,cache.direct=on 可以 启用内核页归并节省内 网络 可以暂时用-netdev user,id=mynet0,hostfwd=tcp::13389-:3389 -device e1000,netdev=mynet0 并映射端口13389到虚拟机的3389里面

使用一个ICH-9 AHCI控制器的仿真层 -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0 显卡也可以指定一下-vga 如果linux和win建议 virtio-vga / virtio-gpu,如果要跑黑苹果建议 vmware,我这里 选择vmware

同时再加多一个winpe /mnt/hdd/iso/pe/FirPE-V1.8.1.iso方便学习测试

鼠标指针偏移尝试 -usb -device usb-tablet 测试有效 重启后开机按esc 选择 3 win10安装盘,重新安装

源码: https://github.com/joyanhui/file.leiyanhui.com/blob/main/pve-unraid-kvm/kvm-baseNet-seaeBois.sh

注释如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
qemu-system-x86_64 -enable-kvm -machine pc-q35-7.1  -m 8192   \  # 使用kvm加速  q35 机型 内存 8g
-name  w10 \ # 名称 可以不需要这行
-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time \  # 针对Windows开启 hyper的一个虚拟化加速支持
-smp 12,sockets=1,cores=6 \ # cpu 单路6核12线
-netdev user,id=mynet0,hostfwd=tcp::13389-:3389 -device e1000,netdev=mynet0 \  # 网络 :用户网络,映射远程端口,设备e1000
-boot menu=on,splash-time=15000 \ # 显示开机 菜单 等待15秒
-usb -device usb-tablet \ # 修正vnc鼠标漂移 直接穿透
-vga vmware \ #显示器 用vmware
-drive index=1,media=disk,format=raw,if=virtio,file=/mnt/exfat/win10.img,cache=unsafe \  # 主磁盘
-drive index=2,media=cdrom,file=/mnt/hdd/iso/windows/Win10-21H2.iso \ # 安装磁盘
-drive index=3,media=cdrom,file=/mnt/hdd/iso/virtio-win-0.1.225.iso \ # 驱动
-drive index=4,media=cdrom,file=/mnt/hdd/iso/pe/FirPE-V1.8.1.iso \ #一个集成virtio驱动的winpe 可以上网
-vnc :1  #允许外部机器vnc链接到 5901

进阶功能和相关记录文章

基本安装

查看这里: https://dev.leiyanhui.com/arch/install-kvm/

关于efi模式启动

查看这里: https://dev.leiyanhui.com/kvm/ovmf/

进阶:配置桥接网络

桥接网络:https://dev.leiyanhui.com/kvm/net-br/

硬件直通 pci 和usb

查看这里 https://dev.leiyanhui.com/kvm/pci-usb/

声卡的直通/穿透

查看这里 https://dev.leiyanhui.com/kvm/sound-pass/

我的一些配置文件记录

查看这里 https://github.com/joyanhui/file.leiyanhui.com/tree/main/pve-unraid-kvm

kvm 开机自动启动

查看这里 https://dev.leiyanhui.com/kvm/auto_start_vm/

kvm安装macos

查看这里:https://dev.leiyanhui.com/kvm/install-macos-base/

kvm安装macos附加上一个win

查看这里:https://dev.leiyanhui.com/kvm/macos_add_win10/

我的kvm脚本参考

https://github.com/joyanhui/file.leiyanhui.com/tree/main/pve-unraid-kvm

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计