Proxmox VE 中安装 Arch Linux 虚拟机完全指南

家里的 Proxmox VE 上跑了不少虚拟机 ——Ubuntu、Debian、各种 Docker 宿主。但有些场景需要更灵活的环境,比如测试最新内核、跑 AUR 里的冷门包,这时候 Arch Linux 就很合适。

不过 PVE 上装 Arch 不像 Ubuntu 那样选个 ISO 下一步就完事。要手动分区、装引导、配网络,中间还有几个 PVE 特有的坑。踩完一遍,这篇把过程完整记下来。

环境:Proxmox VE 8.x,node zcpve(192.168.3.198)。

准备工作

下载 Arch ISO

SSH 登录 PVE 宿主机:

Terminal window
ssh root@192.168.3.198

下载最新 Arch ISO 到 PVE 的镜像存储:

Terminal window
cd /var/lib/vz/template/iso
wget https://mirrors.ustc.edu.cn/archlinux/iso/latest/archlinux-x86_64.iso

国内镜像更快,任选一个:

镜像站地址
中科大https://mirrors.ustc.edu.cn/archlinux/iso/latest/archlinux-x86_64.iso
清华https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/archlinux-x86_64.iso
阿里云https://mirrors.aliyun.com/archlinux/iso/latest/archlinux-x86_64.iso

确认 PVE 内核模块

确认 virtio 和 ballooning 内核模块已加载:

Terminal window
lsmod | grep -E "virtio|vhost"
modprobe virtio_balloon # 如果没加载

创建虚拟机

登录 PVE Web 界面 https://192.168.3.198:8006,按以下参数创建。

基本设置

参数说明
Nodezcpve
VM ID自动分配记住这个 ID
Namearchlinux自定义

OS 设置

参数
ISO Image选择刚下载的 archlinux-x86_64.iso
Guest OS TypeLinux
Guest OS Version6.x - 2.6 Kernell26

System 设置

参数说明
Graphic cardVMWare compatible兼容性最好
SCSI ControllerVirtIO SCSI最佳性能
BIOSOVMF (UEFI)必须 UEFI,Arch 推荐
EFI Storagelocal-lvm 或你的存储
Pre-Enroll Keys不要勾选Arch ISO 未签 Secure Boot 密钥,勾了会 Access Denied
Qemu Agent✅ 勾选启用 Guest Agent
TPM Storagelocal-lvmOVMF 需要

Disks 设置

参数
Bus/DeviceSCSI
Storage按实际情况选
Disk size32 GiB 起步
CacheWrite back(SSD)或 None
Discard✅ 勾选(SSD TRIM)
SSD emulation✅ 勾选(如果是 SSD)

CPU 设置

参数
Sockets1
Cores24(按需)
Typehost(最佳性能)

Memory 设置

参数
Memory2048 MiB 起步,4096 更好
Ballooning✅ 勾选

Network 设置

参数
Bridgevmbr0
ModelVirtIO (paravirtualized)

检查所有设置,点 Finish

Arch Linux 安装

启动虚拟机

在 PVE Web 中点 VM → ConsoleStart Now

如果你的网络不使用 DHCP,可以先在 PVE 的 VM 选项里把网卡 Model 设为 Intel E1000,装完再改回 VirtIO—— 这样 ISO 启动时自动有网。

验证启动模式

Terminal window
cat /sys/firmware/efi/fw_platform_size

输出 64 表示 UEFI 64 位启动成功。若不是,回到 PVE 检查 BIOS 设置。

网络连接

如果用了 VirtIO 网卡,先加载模块:

Terminal window
modprobe virtio_net

有线网络(DHCP 自动获取):

Terminal window
ip link

如果网卡名不是 eth0,可能是 enpXsY 格式。确认链路状态:

Terminal window
ip link set <网卡名> up

验证联网:

Terminal window
ping -c 3 archlinux.org

更新时间

Terminal window
timedatectl set-ntp true

分区

UEFI 分区方案(GPT):

Terminal window
lsblk # 确认磁盘名,通常是 /dev/sda

parted 一键分区

Terminal window
parted /dev/sda mklabel gpt
parted /dev/sda mkpart primary fat32 1MiB 513MiB
parted /dev/sda set 1 esp on
parted /dev/sda mkpart primary ext4 513MiB 100%

分区结果:

分区大小类型说明
/dev/sda1512MEFI SystemEFI 分区
/dev/sda2剩余全部Linux filesystem根分区

格式化:

Terminal window
mkfs.fat -F 32 /dev/sda1
mkfs.ext4 /dev/sda2

挂载:

Terminal window
mount /dev/sda2 /mnt
mount --mkdir /dev/sda1 /mnt/boot

选择镜像源(国内加速)

Terminal window
reflector --country China --protocol https --latest 5 --sort rate --save /etc/pacman.d/mirrorlist

或者手动指定:

Terminal window
echo 'Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist

安装基础系统

Terminal window
pacstrap -K /mnt base base-devel linux linux-firmware \
vim sudo networkmanager openssh \
qemu-guest-agent

包说明:

作用
base基础系统
base-devel编译工具链
linux内核
linux-firmware硬件固件
vim编辑器
sudo权限管理
networkmanager网络管理
opensshSSH 服务
qemu-guest-agentPVE Guest Agent

生成 fstab

Terminal window
genfstab -U /mnt >> /mnt/etc/fstab

Chroot 进入新系统

Terminal window
arch-chroot /mnt

基础配置

时区

Terminal window
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc

本地化

Terminal window
echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen
echo 'zh_CN.UTF-8 UTF-8' >> /etc/locale.gen
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf

主机名

Terminal window
echo 'archlinux' > /etc/hostname

用户

Terminal window
useradd -m -G wheel <你的用户名>
passwd <你的用户名>
passwd root

sudo 权限

Terminal window
echo '%wheel ALL=(ALL:ALL) ALL' > /etc/sudoers.d/wheel

安装引导程序(systemd-boot)

Terminal window
bootctl install

创建引导项:

Terminal window
cat > /boot/loader/entries/arch.conf << 'EOF'
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=UUID=$(blkid -s UUID -o value /dev/sda2) rw
EOF

启用服务

Terminal window
systemctl enable NetworkManager
systemctl enable sshd
systemctl enable qemu-guest-agent

退出并重启

Terminal window
exit # 退出 chroot
umount -R /mnt
reboot

VM 重启后从 PVE Console 移除 ISO(或等它自动跳过),系统应正常启动到登录提示符。

安装后优化

确认 Guest Agent 工作

在 PVE 宿主机上检查:

Terminal window
qm agent <VMID> ping

返回正常表示 Agent 正常工作。PVE Web 界面应能显示 VM 的 IP 地址和内存使用情况。

启用 VirtIO Balloon(内存回收)

VM 内确保内核模块已加载:

Terminal window
echo 'virtio_balloon' > /etc/modules-load.d/virtio-balloon.conf

SSH 免密登录(可选)

从你的工作机复制公钥:

Terminal window
ssh-copy-id <用户名>@<VM_IP>

安装 AUR 助手

Terminal window
sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/paru.git
cd paru && makepkg -si

PVE 串口控制台(可选)

如果网络断了需要救援,可以给 VM 加一个串口:

PVE VM → Hardware → Add → Serial Port → 选 socket

VM 内启用串口控制台 —— 在 kernel cmdline 添加:

console=ttyS0,115200

模板化

安装配置完毕后,可以转为模板方便快速克隆:

Terminal window
# PVE 宿主机执行
qm template <VMID>

之后右键模板 → Clone,秒级创建新 VM。

FAQ

启动后黑屏

检查 BIOS 是否 UEFI,Graphic card 换 VMWare compatible

BdsDxe: Access Denied ISO 无法启动

Secure Boot 拦截了 Arch ISO。VM → Hardware → EFI Disk → 取消 Pre-Enroll Keys 后重启。

没网络

装完系统后 NetworkManager 应自动获取 IP。装之前如果没网,手动 modprobe virtio_net 加载 VirtIO 网卡模块。或者临时换 Intel E1000 网卡装完再改回来。

systemd-boot 找不到内核

检查 /boot 是否正确挂载,bootctl install 是否成功执行。

Guest Agent 不工作

systemctl status qemu-guest-agent 看是否 running。确认安装时 qemu-guest-agent 包已包含在 pacstrap 里。

磁盘空间不足

PVE 里可以在线扩容磁盘,VM 内 growpart + resize2fs

总结

在 PVE 上装 Arch 比 Ubuntu / Debian 多花十分钟,主要是手动分区和引导配置那几步。但装完之后 Arch 的滚动更新和 AUR 生态在 HomeLab 里确实方便 —— 不用担心大版本升级,想装什么 paru -S 就有。

模板化之后更省事,新 VM 几秒钟就克隆出来。我现在 PVE 上常备一个 Arch 模板,需要测试新东西时直接 Clone。


参考: