介绍
Proxmox Virtual Environment 1 is an open source server virtualization management solution based on QEMU/KVM and LXC. You can manage virtual machines, containers, highly available clusters, storage and networks with an integrated, easy-to-use web interface or via CLI. Proxmox VE code is licensed under the GNU Affero General Public License, version 3. The project is developed and maintained by Proxmox Server Solutions GmbH.
简而言之,它是一款开源的、高效的、功能强大的虚拟机管理软件。基于Debian,提供QEMU/KVM(提供硬件级虚拟化能力) 和 LXC(大名鼎鼎的docker基于LXC)多种类型的虚拟化技术。既然是学习Linux难免需要安装各种系统和环境,Proxmox VE提供易用的模板和镜像备份功能,支持储存池。麻雀虽小五内俱全,是个功能强大的小钢炮。搭配DDNS和FRP穿透内网可以实现非常多有趣实验场景。基本能满足绝大多数环境需要。
安装
下载 PVE
你可以在这里下载 PVE 安装镜像。
安装 PVE
将刚刚下载的镜像烧写到一个空U盘,然后插在要安装的设备上。
进入系统 BIOS 页面,推荐使用 UEFI 引导。
设置从U盘启动,开始 PVE 安装过程,全程按提示操作即可。
相关详细操作可以参考官方文档(英文)
常见问题参见此处
配置国内的更新源
cp /etc/apt/sources.list /etc/apt/sources.list.bak
添加国内软件源
修改/etc/apt/sources.list的内容为:
deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib
# deb-src https://mirrors.ustc.edu.cn/debian/ bookworm main contribe
deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib
# deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib
给 PVE 更换国内源
修改/etc/apt/sources.list.d/pve-no-subscription.list的内容为:
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bookworm pve-no-subscription
屏蔽 PVE 的企业源和 ceph 的源
先注释掉pve的企业源:
vi /etc/apt/sources.list.d/pve-enterprise.list
将内容注释即可:
#deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
再注释掉 ceph 的源:
vi /etc/apt/sources.list.d/ceph.list
将内容注释即可:
#deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise
更新
apt update
看一下有哪些可以更新的:
apt list --upgradable
执行更新:
apt upgrade
完成后,习惯性重启。
实用功能
直通
开启直通功能3
可以通过两种方式开启直通功能:
- 手工操作
- 使用 pvetools
准备工作
主板bios设置
必须先在主板 bios 中开启 cpu 的 VD-T 支持和虚拟化支持。
VD-T不支持就无法直通。intel 需要 b75 以上芯片组才支持。也就是需要从 intel 4 代酷睿处理器开始才支持。
虚拟机设置
在创建虚拟机时,芯片组必须使用q35。只有Q35芯片组才能支持 PCIE 直通,否则只能进行 PCI 直通。
手工直通
开启iommu
vi /etc/default/grub
修改 GRUB_CMDLINE_LINUX_DEFAULT,增加 intel_iommu=on 。
使用 intel_iommu=on 后,开机可能会有内核crash,这时可以尝试加一个 iommu=pt。
也就是:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=disable intel_iommu=on iommu=pt pcie_acs_override=downstream pci=realloc=off"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=disable"解释:
- pcie_acs_override=downstream
- pci=realloc=off
修改完成之后,更新 grub:
update-grub
设置虚拟化驱动
vi /etc/modules
增加以下内容:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
升级并更新配置:
update-initramfs -u -k all
之后重启机器。
使用 pvetools
使用 pvetools 就简单了,只要在 pvetools 的菜单中选择 “配置PCI硬件直通” -》“配置开启物理机硬件直通支持”。
完成后重启机器。
检验
检验 iommu 是否开启
dmesg | grep -e DMAR -e IOMMU
正确开启时的输出会类似如下:
[ 0.000000] Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA
[ 0.033632] ACPI: DMAR 0x00000000BC4B0870 0000B8 (v01 INTEL HSW 00000001 INTL 00000001)
[ 0.033687] ACPI: Reserving DMAR table memory at [mem 0xbc4b0870-0xbc4b0927]
[ 0.066765] DMAR: IOMMU enabled
[ 0.186968] DMAR: Host address width 39
[ 0.186972] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[ 0.186988] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap c0000020660462 ecap f0101a
[ 0.186996] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[ 0.187006] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008020660462 ecap f010da
[ 0.187012] DMAR: RMRR base: 0x000000bc1d8000 end: 0x000000bc1e4fff
[ 0.187017] DMAR: RMRR base: 0x000000bf000000 end: 0x000000cf1fffff
[ 0.187024] DMAR-IR: IOAPIC id 8 under DRHD base 0xfed91000 IOMMU 1
[ 0.187030] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[ 0.187034] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.188070] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 0.634998] DMAR: No ATSR found
[ 0.635001] DMAR: No SATC found
[ 0.635004] DMAR: IOMMU feature pgsel_inv inconsistent
[ 0.635008] DMAR: IOMMU feature sc_support inconsistent
[ 0.635011] DMAR: IOMMU feature pass_through inconsistent
[ 0.635014] DMAR: dmar0: Using Queued invalidation
[ 0.635026] DMAR: dmar1: Using Queued invalidation
[ 0.720415] DMAR: Intel(R) Virtualization Technology for Directed I/O
[ 14.512740] i915 0000:00:02.0: [drm] DMAR active, disabling use of stolen memory
可以看到 “DMAR: IOMMU enabled” / “DMAR: Intel(R) Virtualization Technology for Directed I/O” 的字样,说明 IOMMU 开启成功。
执行命令:
dmesg | grep 'remapping'
如果看到类似如下 “Enabled IRQ remapping in x2apic mode” 内容,也说明 IOMMU 开启成功:
[ 0.187034] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.188070] DMAR-IR: Enabled IRQ remapping in x2apic mode
或者执行
dmesg | grep iommu
如果能看到类似内容,也说明 IOMMU 开启成功:
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.2.16-3-pve root=/dev/mapper/pve-root ro quiet intel_pstate=disable intel_iommu=on iommu=pt pcie_acs_override=downstream pci=realloc=off
[ 0.066508] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-6.2.16-3-pve root=/dev/mapper/pve-root ro quiet intel_pstate=disable intel_iommu=on iommu=pt pcie_acs_override=downstream pci=realloc=off
[ 0.558404] iommu: Default domain type: Passthrough (set via kernel command line)
[ 0.719593] pci 0000:00:02.0: Adding to iommu group 0
[ 0.719693] pci 0000:00:00.0: Adding to iommu group 1
[ 0.719725] pci 0000:00:01.0: Adding to iommu group 2
[ 0.719755] pci 0000:00:01.1: Adding to iommu group 3
......
[ 0.720223] pci 0000:05:00.0: Adding to iommu group 17
[ 0.720252] pci 0000:06:00.0: Adding to iommu group 18
[ 0.720278] pci 0000:08:00.0: Adding to iommu group 19
还可以执行命令
find /sys/kernel/iommu_groups/ -type l
如果能看到很多直通组,说明开启成功:
/sys/kernel/iommu_groups/17/devices/0000:05:00.0
/sys/kernel/iommu_groups/7/devices/0000:00:1c.0
/sys/kernel/iommu_groups/15/devices/0000:02:00.0
/sys/kernel/iommu_groups/5/devices/0000:00:16.0
......
/sys/kernel/iommu_groups/19/devices/0000:08:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:1c.3
直通网卡4
设置pve下的网卡直通并检查是否生效
创建虚拟机
在虚拟机的 hardware 设置中,添加 pci device:
注意勾选 All functions 以直通网卡上的所有网口,另外对于 pcie 设置,要勾选 “PCI-Express”。
如果出现PVE下的虚拟主机直通硬件时,不小心把PVE系统主机使用的网卡、硬盘或者是其他硬件直通了,又勾选了开机自启动的选项,导致无法进入PVE系统网页控制界面,重启后也是没用任何反应,多次重启后还是无法解决,请往下看。
您需要通过编辑内核命令行来启用IOMMU,首先打开 grub 的bootloader内核命令行配置文件:
编辑内核命令行
您可以在以下位置修改内核命令行,具体取决于所使用的引导程序
Grub
内核命令行需要在文件/etc/default/grub中放置
GRUB_CMDLINE_LINUX_DEFAULT变量
然后 运行 update-grub将其内容附加到/boot/grub/grub.cfg中的所有linux条目中
Systemd-boot
内核命令行需要在/etc/kernel/cmdline中放置
要应用更改,请运行 pve-efiboot-tool refresh
将其设置为 loader/entries/proxmox-*.conf中的配置文件
首先打开grub的bootloader内核命令行配置文件:
GRUB(传统引导)
nano /etc/default/grub
或者 systemd-boot(UEFI)
nano /etc/kernel/cmdline
GRUB: 找到带有“ GRUB_CMDLINE_LINUX_DEFAULTGRUB_CMDLINE_LINUX_DEFAULT”的行
systemd-boot(UEFI)创建用于systemd-boot的文件(格式为带有选项的单行)
注:这段看着很恶心吧,我当时也是这么想的,因为这是从文档里直接粘过来的
如果看不懂在说什么就回去检查做过的每个步骤是否有遗漏和出错
(比如iommu打成iomuu之类的typo)
直通硬盘5
使用
ls /dev/disk/by-id
来查看设备 id
输出形如
scsi-36234567890abcde02ae710ec11e39fee
scsi-0123456789abcdef0123456789abcdef0
...
ata-WDC_XXXX_XXXX_XXXX
...
等等
其中形如scsi-36234567890abcde02ae710ec11e39fee,ata-WDC_XXXX_XXXX_XXXX的即为硬盘id
使用
qm set <yourVMid> -sata1 /dev/disk/by-id/<your-disk-id>
ata的硬盘设备如果想要直通 SAS(SCSI) 硬盘,则需要把
-sata1更换为-scsi1例如,我想要给 VMid 为
100的虚拟机直通 id 为scsi-36234567890abcde02ae710ec11e39fee的硬盘
则使用
qm set 100 -scsi1 /dev/disk/by-id/scsi-36234567890abcde02ae710ec11e39fee
如果返回以下信息,说明已成功映射:
update VM 100: -scsi1 /dev/disk/by-id/scsi-36234567890abcde02ae710ec11e39fee
进入 PVE 对应虚拟机的硬件页面,查看是否硬盘是否已经在虚拟机里,出现目标设备即为成功。
常见问题排除
更新 CPU 微码6
有时在 pve 启动时,会看到屏幕上有提示要求更新 microcode。
添加仓库7
需要添加 unstable repo:
echo "deb http://deb.debian.org/debian/ unstable non-free-firmware" > /etc/apt/sources.list.d/debian-unstable.list
执行更新:
apt update && apt list --upgradable
安装微码,intel 选择:
apt -y install intel-microcode
amd 选择:
apt -y install amd64-microcode
更新完之后重启,发现之前报告要求更新 microcode 的信息消失了,搞定。
记得把 unstable 仓库删除,避免不小心更新到这个仓库中的其他软件。
rm /etc/apt/sources.list.d/debian-unstable.list
修改locale设置8
默认安装后,有时会遇到 locale 报错:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_IDENTIFICATION = "zh_CN.UTF-8",
LC_NUMERIC = "zh_CN.UTF-8",
LC_TIME = "zh_CN.UTF-8",
LC_PAPER = "zh_CN.UTF-8",
LC_MONETARY = "zh_CN.UTF-8",
LC_TELEPHONE = "zh_CN.UTF-8",
LC_MEASUREMENT = "zh_CN.UTF-8",
LC_NAME = "zh_CN.UTF-8",
LC_ADDRESS = "zh_CN.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
最简单的修改方案:9
vi /etc/default/locale
将内容修改为:10
LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
清理内核
清理不再使用的内核。
使用脚本操作
参见:https://tteck.github.io/Proxmox/
找到 Proxmox VE Kernel Clean 这个脚本,执行:
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/kernel-clean.sh)"
也可以手工把这个脚本下载到本地,方便以后执行本地运行:
mkdir -p ~/work/soft/pve
cd ~/work/soft/pve
wget https://github.com/tteck/Proxmox/raw/main/misc/kernel-clean.sh
chmod +x kernel-clean.sh
以后运行时,就只要执行
~/work/soft/pve/kernel-clean.sh
手工操作
参见:https://asokolsky.github.io/proxmox/kernels.html
其他
我还没有写完,一些详细配置敬请参见:
https://skyao.io/learning-pve/docs/
膜拜大佬,
我是煞笔,看不懂一点