# 给日日的 Proxmox VE 安装、使用、维护的注意事项

## 安装

用 Rufus 等软件写入 U 盘并启动安装即可。

如果安装失败，可以尝试拔出不需要的设备。我在笔记本上安装时，插着鼠标接收器会失败，拔出来就好了。也可以先安装 Debian 再转换为 PVE。

### 网络

只支持静态 IP（v4），注意不要配错了。IPv6 支持 SLAAC。

### 硬盘

默认使用全部硬盘，最少使用一整块硬盘，并且要使用某块硬盘就必须全部使用，对自定义分区支持很少。分区时需要小心选择。

如果有特殊分区需求必须先安装 Debian，然后再转换。

分区时如果选择 ext4 或 XFS 格式，PVE 会创建 LVM 卷，并且将 ISO 映像、模板与虚拟机磁盘分别存储。不同卷之间要预先分配空间，导致这种方式硬盘利用率非常差。

如果想尽可能地提高磁盘利用率，有以下几种方式：

* **使用 ZFS**：单磁盘可以选 RAID 0，这种方式应该是比较简单的，也比较稳定，但我并没有采用 ZFS，也未验证实际性能等指标如何。
* 使用 Btrfs：PVE 的 Btrfs 支持在 preview，可能不稳定。
* 手动分配 LVM 各卷的大小：“maxroot”设置为系统 + ISO + 模板预计所占空间大小，这样可以设置得比默认更合理一些，但是依然没有从本质上解决问题。
* **单独创建系统分区，系统分区中不存储任何映像或数据**：这是我采用的方法，分区选择 Btrfs，“hdsize”设置为系统分区大小（推荐不超过 16G），安装完成后在 Web UI 将剩余空间创建一个新的 Directory Storage，采用 ext4 分区格式，然后禁用 local 存储。由于 Btrfs 本身足够稳定，不用来存储 PVE 数据应该没有问题。这样做的空间利用率比上面的方法还好一些，同时系统分区可以享受到 Btrfs 的压缩、checksum 等特性。
* **安装 Debian 再转换**：安装 Debian 时可以随意分区，绕过 LVM 创建一个 ext4 分区即可。

ext4 的性能和可靠性并不差，也支持虚拟机快照等特性，而且 LVM 的 trim 功能有 bug，有时无法正确 trim，这也是 ext4 优于其他选择的原因。

### 自定义安装：先安装 Debian 再转换

<https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_12_Bookworm>

## 使用：宿主机及 PVE 设置

安装好后屏幕显示命令行，可以通过 Web UI 访问（默认 https 8006 端口），也可以 SSH。紧急情况下也可以通过命令行进行操作。

### 软件源

直接用清华源：<https://mirrors.tuna.tsinghua.edu.cn/help/proxmox/>。

### 防火墙

防火墙有多级，很容易设置不当，然后踩坑。

* 节点/宿主机级：应用于宿主机，如果设置不当会阻止你访问 PVE。我没有开。
* 数据中心级：若打开虚拟机防火墙，本级必须打开才会生效。
* 虚拟机级：控制每台虚拟机的防火墙开关。
* 网卡级：控制每个网卡防火墙开头。

需要注意的是，数据中心、虚拟机、网卡的防火墙同时开启后，虚拟机的防火墙才会生效。

### Tailscale

如果要在 host 安装 Tailscale，启动命令应为 `tailscale up --accept-dns=false`，来阻止 Tailscale 修改 host 的 DNS。

见 <https://tailscale.com/kb/1133/proxmox>。

### 其他优化

#### zram

Host 和 guest 有一个设置即可，因为压缩数据难以再次压缩。

新建文件 `/etc/modules-load.d/zram.conf`，添加以下内容：

```none
zram
```

新建文件 `/etc/udev/rules.d/99-zram.rules`，把“ATTR{disksize}”设置为需要的 zram 大小：

```none
KERNEL=="zram0", ATTR{comp_algorithm}="zstd", ATTR{disksize}="16G" RUN="/sbin/mkswap /dev/zram0", TAG+="systemd"
```

然后添加 `/etc/fstab`：

```none
/dev/zram0 none swap defaults,pri=10 0 0
```

设置 swappiness，让系统更积极地压缩内存，添加到 `/etc/sysctl.conf`：

```none
vm.swappiness=180
vm.page-cluster=0
```

官方文档：<https://pve.proxmox.com/wiki/Zram>

## 客户机设置、模板等

Host 开机后自动启动虚拟机：在虚拟机设置里开启 Start at boot。

CPU 设置为 host 时性能最高，代价只是不能热迁移到不同 CPU 的节点而已。在不用 PVE 集群的情况下约等于没有坏处。

### Linux

Linux 推荐使用各发行版的 cloud 映像制作模板，方法见 <https://pve.proxmox.com/wiki/Cloud-Init_Support>，注意把链接替换成最新版。

制作好模板后，每次需要创建虚拟机时，直接克隆模板，然后设置 cloud-init 数据即可，非常方便。

#### 可选操作

除了以上操作以外，还推荐设置自定义 cloud-init 数据，见 [vendor-data Ubuntu](/doc/vendor-data-ubuntu-n1lvpuJYhT) 和 [vendor-data Fedora](/doc/vendor-data-fedora-7NyMpeG5SO)。

推荐把 SCSI Controller 改为 VirtIO SCSI single，把硬盘的 IO thread 和 Discard 勾选上。如果硬盘是 SSD，可以把 SSD emulation 也勾选上。

如果有需要的话，还可以在虚拟机选项里把 CPU 和 Memory 热插拔都开启，同时开启 CPU 的 NUMA 选项。

### Windows

Windows 模板创建比较复杂，需要单独写一篇博客才能讲清。若有需要可以告诉我。

---

**Documents**

- [在集群中迁移客户机](https://notes.bleatingsheep.org/s/proxmox-ve/doc/5zyo6zug576k5lit6lb56e75a6i5oi35py6-JnoJCmDnaI)
- [给日日的 Proxmox VE 安装、使用、维护的注意事项](https://notes.bleatingsheep.org/s/proxmox-ve/doc/proxmox-ve-VUiIqjLgW6)
- [cloud-init 自定义 user-data](https://notes.bleatingsheep.org/s/proxmox-ve/doc/cloud-init-user-data-OMk3IeECEN)
- [Windows guest](https://notes.bleatingsheep.org/s/proxmox-ve/doc/windows-guest-3tv03P8Lhf)