家里的台式机装了双系统: Windows / Archlinux,使用rEFInd在开机时选择要启动的系统。因笔记本长时间放公司且女友总占用电脑,遂萌生了搭建多人一机的想法(不可否认有Linus白嫖王的影响)。
除CPU和主板外其余设备完全独立: 基于Proxmox Virtual Environment(PVE)虚拟化并为两个不同的系统直通硬盘、显卡、鼠标、键盘等外设,以达到完全独立的配置。
在当前配置基础上还需要增加一台显示器、一把键盘、一只鼠标、一张大桌子和增加硬盘容量。其中显卡不需要再购买,独显+核显正好为两个不同系统服务,PVE提供WEB管理界面,所以不需要单独显示器。
类型 | 型号 | 数量 | 说明 |
---|---|---|---|
SSD | Samsung 970 EVO Plus 500 G | 2 | 各一块500G SSD |
SSD | Lenovo 120G SSD | 1 | PVE 系统SSD |
显示器 | Dell U2718Q | 1 | - |
显示器 | Samsung U32H850UMC | 1 | - |
鼠标 | Logitech MX Master 2S | 1 | - |
鼠标 | Logitech MX Anywhere 2S | 1 | - |
键盘 | IKBC Poker 2 | 1 | - |
键盘 | IKBC C104 | 1 | - |
显卡 | RTX 2070 + 核显 | 2 | 2070 直通给Windows,核显给Archlinux |
CPU | i7 9700K | 1 | 共享 |
内存 | G.SKILL 幻光戟 8G | 4 | 各14G |
主板 | ROG STRIX Z390-E GAMING | 1 | 共享 |
电源 | USCorsair RM850x | 1 | 共享 |
散热 | NOCTUA NH-D15 | 1 | 共享 |
散热 | NOCTUA NF-A12x15 | 2 | 共享 |
机箱 | JONSBO UMX4 | 1 | 共享 |
桌子 | 200 * 80 * 75 5cm 厚 | 1 | 共享 |
我的目标是装两个系统: Windows、Archlinux,PVE安装虚拟机很简单:
任选一种即可,我采用的第二种方案。
例如安装Archlinux系统:
sudo dd if=archlinux-2019.11.01-x86_64.iso of=/dev/rdisk2 bs=1m
直通: 将硬件设备直接给虚拟机使用,不采用虚拟化方式。
在PVE中直通需要修改系统配置,官方文档,以下给出Intel CPU的改动:
修改 /etc/default/grub
中的 GRUB_CMDLINE_LINUX_DEFAULT="quiet"
为: GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
添加以下内容到/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 是我的一块新硬盘,还未使用,打算将此盘直通到新虚拟机中
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不需要像直通硬盘那样麻烦,直接在虚拟机详情的“硬件”页面中点击添加,选择PCI-E或者USB/串口即可。
在白嫖王的视频中有讲到每个虚拟机的外部设备不能是相同(键鼠),会冲突,但实际上是可以的(可能是他使用的Unraid系统不支):我的两个鼠标都使用罗技优联接收器来连接,可以通过PVE的串口直通功能,将不同的USB口直通到不同的虚拟机中,使每个虚拟机独占该USB口。唯一麻烦的是需要一一测试每个USB口对应的串口。
在显卡方面,PVE启动时默认会使用核显来做输出,一般会认为核显此时已经没法使用了。实际上可以配置指定虚拟机使用核显,当启动该虚拟机时,核显会被虚拟机占用,从而重新输出虚拟机的画面。
可通过 lspci
命令查看不同PCI-E设备的信息找到核显和独显。
暂时没有考虑为每个系统配置独立网卡,原因有3个: