两人一机的搭建方案

2019-12-15 [硬件] #hardware #Virtualization #PVE #Debian #Archlinux #Passthrough
更新日志
2021-06-11 更新分类、标签
2022-03-20 更新标签

动机

家里的台式机装了双系统: Windows / Archlinux,使用rEFInd在开机时选择要启动的系统。因笔记本长时间放公司且女友总占用电脑,遂萌生了搭建多人一机的想法(不可否认有Linus白嫖王的影响)。

方案

除CPU和主板外其余设备完全独立: 基于Proxmox Virtual Environment(PVE)虚拟化并为两个不同的系统直通硬盘、显卡、鼠标、键盘等外设,以达到完全独立的配置。

当前硬件配置

在当前配置基础上还需要增加一台显示器、一把键盘、一只鼠标、一张大桌子和增加硬盘容量。其中显卡不需要再购买,独显+核显正好为两个不同系统服务,PVE提供WEB管理界面,所以不需要单独显示器。

最终配置

类型型号数量说明
SSDSamsung 970 EVO Plus 500 G2各一块500G SSD
SSDLenovo 120G SSD1PVE 系统SSD
显示器Dell U2718Q1-
显示器Samsung U32H850UMC1-
鼠标Logitech MX Master 2S1-
鼠标Logitech MX Anywhere 2S1-
键盘IKBC Poker 21-
键盘IKBC C1041-
显卡RTX 2070 + 核显22070 直通给Windows,核显给Archlinux
CPUi7 9700K1共享
内存G.SKILL 幻光戟 8G4各14G
主板ROG STRIX Z390-E GAMING1共享
电源USCorsair RM850x1共享
散热NOCTUA NH-D151共享
散热NOCTUA NF-A12x152共享
机箱JONSBO UMX41共享
桌子200 * 80 * 75 5cm 厚1共享

创建虚拟机

我的目标是装两个系统: Windows、Archlinux,PVE安装虚拟机很简单:

  1. 上传ISO到PVE硬盘并在虚拟机添加CD ROM 选择ISO镜像
  2. 在USB烧录一个Live ISO之后选择通过外置USB启动

任选一种即可,我采用的第二种方案。

例如安装Archlinux系统:

  1. 将下载好的ISO写入到U盘
sudo dd if=archlinux-2019.11.01-x86_64.iso of=/dev/rdisk2 bs=1m
  1. 将U盘插入到PVE宿主机
  2. 创建一个虚拟机
  3. 记住虚拟机的编号(或者查看详情)
  4. 硬盘随意设置,创建完成后删除刚刚创建的硬盘

PVE的直通配置

直通: 将硬件设备直接给虚拟机使用,不采用虚拟化方式。

在PVE中直通需要修改系统配置,官方文档,以下给出Intel CPU的改动:

1. 编辑引导

修改 /etc/default/grub中的 GRUB_CMDLINE_LINUX_DEFAULT="quiet" 为: GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

2. 添加内核模块

添加以下内容到/etc/modules底部

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

改动之后需要重启系统。

硬盘直通

将硬盘直接挂载到虚拟机中,不走虚拟化方式,提高硬盘读写性能。

查看所有硬盘设备

root@fighter:~# lsblk
NAME                 MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                    8:0    0 111.8G  0 disk
├─sda1                 8:1    0  1007K  0 part
├─sda2                 8:2    0   512M  0 part /boot/efi
└─sda3                 8:3    0 111.3G  0 part
  ├─pve-swap         253:0    0     8G  0 lvm  [SWAP]
  ├─pve-root         253:1    0  27.8G  0 lvm  /
  ├─pve-data_tmeta   253:2    0     1G  0 lvm
  │ └─pve-data-tpool 253:4    0  59.7G  0 lvm
  │   └─pve-data     253:5    0  59.7G  0 lvm
  └─pve-data_tdata   253:3    0  59.7G  0 lvm
    └─pve-data-tpool 253:4    0  59.7G  0 lvm
      └─pve-data     253:5    0  59.7G  0 lvm
sdb                    8:16   1  58.4G  0 disk
├─sdb1                 8:17   1   635M  0 part
└─sdb2                 8:18   1    64M  0 part
nvme0n1              259:0    0 465.8G  0 disk
nvme1n1              259:1    0 465.8G  0 disk
├─nvme1n1p1          259:2    0   499M  0 part
├─nvme1n1p2          259:3    0   100M  0 part
├─nvme1n1p3          259:4    0    16M  0 part
├─nvme1n1p4          259:5    0 264.2G  0 part
├─nvme1n1p5          259:6    0     4G  0 part
└─nvme1n1p6          259:7    0   197G  0 part

其中 nvme0n1 是我的一块新硬盘,还未使用,打算将此盘直通到新虚拟机中

确认硬盘ID

root@fighter:~# ls -als /dev/disk/by-id | grep nvme0n1
0 lrwxrwxrwx 1 root root  13 Nov 23 17:06 nvme-eui.0025385791b32198 -> ../../nvme0n1
0 lrwxrwxrwx 1 root root  13 Nov 23 17:06 nvme-Samsung_SSD_970_EVO_Plus_500GB_S4EVNF0M758708E -> ../../nvme0n1

通过nvme0n1 查询到硬盘ID为: nvme-Samsung_SSD_970_EVO_Plus_500GB_S4EVNF0M758708E

执行直通

使用的Qemu/KVM虚拟机管理器的set命令来挂载物理磁盘到虚拟机中,命令格式如下:

qm set <vm_id> –<disk_type>[n] /dev/disk/by-id/-$brand-$model_$serial_number

root@fighter:~# qm set 100 -sata1 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_500GB_S4EVNF0M758708E
update VM 100: -sata1 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_500GB_S4EVNF0M758708E

返回update 消息后,刷新网页查看直通情况,其中我最初的安装步骤将USB也直通进去,所以下图有两块硬盘:

刷新网页查看直通情况

硬盘直通完成后,启动虚拟机按正常装系统的方式配置即可。

在我装好系统使用过程中,发现:

如果为每个系统单独分配一个硬盘,该系统可脱离PVE直接物理机BIOS启动: 【既可以作为PVE的虚拟机使用,又可以作为物理机的单系统使用】。

上面这个特性给我特别大的惊喜,之前都是通VMWare、Virtual Box安装虚拟,虚拟机的磁盘是以文件形式存在硬盘上的,没想到安装到直通的硬盘上后竟然可以非虚拟机方式启动。

所以建议给每个系统直通一个独占的硬盘,增加使用灵活性。

显卡、USB

直通显卡和USB不需要像直通硬盘那样麻烦,直接在虚拟机详情的“硬件”页面中点击添加,选择PCI-E或者USB/串口即可。

在白嫖王的视频中有讲到每个虚拟机的外部设备不能是相同(键鼠),会冲突,但实际上是可以的(可能是他使用的Unraid系统不支):我的两个鼠标都使用罗技优联接收器来连接,可以通过PVE的串口直通功能,将不同的USB口直通到不同的虚拟机中,使每个虚拟机独占该USB口。唯一麻烦的是需要一一测试每个USB口对应的串口。

在显卡方面,PVE启动时默认会使用核显来做输出,一般会认为核显此时已经没法使用了。实际上可以配置指定虚拟机使用核显,当启动该虚拟机时,核显会被虚拟机占用,从而重新输出虚拟机的画面。

可通过 lspci 命令查看不同PCI-E设备的信息找到核显和独显。

网卡

暂时没有考虑为每个系统配置独立网卡,原因有3个:

  1. 虚拟化的网卡速度影响较小
  2. 家里有NAS,在虚拟机大量下载的情况较少
  3. 若对网卡性能有需求,虚拟机可以直接通过BIOS物理启动

结语

文章作者:eightpigs
创作时间:2019-12-15
更新时间:2021-06-11
许可协议:CC by-nc-nd 4.0