mirror of
https://gitee.com/callmer/pve_toss_notes.git
synced 2026-08-31 05:52:52 +08:00
494 lines
16 KiB
Markdown
494 lines
16 KiB
Markdown
## 0.必要条件
|
||
|
||
在上一篇文章 [02.PVE初始化配置](./02.PVE初始化配置.md) 中,已初始化了 PVE 系统,接下来需要对 PVE 系统进一步调整。
|
||
|
||
在 PVE 系统调整之前,请确认必要的软件包已经安装完成,本文后续命令均在 SSH 终端下执行。
|
||
|
||
Debian 系统默认编辑器为 `nano` ,推荐将其更换为 `neovim` ,关于 [Neovim](https://neovim.io/) 的基础使用方法,请参阅:[Neovim 基础教程](https://cn.bing.com/search?q=Neovim+%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B) 。
|
||
|
||
```bash
|
||
## 修改系统默认编辑器(选择 nvim 所在条目,即可将 neovim 设为默认编辑器)
|
||
$ update-alternatives --config editor
|
||
|
||
#### 系统默认编辑器示例输出
|
||
There are 3 choices for the alternative editor (providing /usr/bin/editor).
|
||
|
||
Selection Path Priority Status
|
||
------------------------------------------------------------
|
||
* 0 /bin/nano 40 auto mode
|
||
1 /bin/nano 40 manual mode
|
||
2 /usr/bin/nvim 30 manual mode
|
||
3 /usr/bin/vim.tiny 15 manual mode
|
||
|
||
Press <enter> to keep the current choice[*], or type selection number: 2
|
||
update-alternatives: using /usr/bin/nvim to provide /usr/bin/editor (editor) in manual mode
|
||
```
|
||
|
||
若需完全禁用 `neovim` 鼠标功能;即关闭所有鼠标交互,右键行为完全交给终端 / 控制台处理,需执行以下命令。
|
||
|
||
```bash
|
||
## 配置 nvim 鼠标交互行为脚本
|
||
$ install -D -m 0644 /dev/stdin /etc/xdg/nvim/sysinit.vim <<'EOF'
|
||
set mouse=
|
||
EOF
|
||
```
|
||
|
||
## 1.系统时区
|
||
|
||
如果在安装 PVE 系统时选错了时区,导致系统时间和北京时间不一致,可以执行以下命令修正。
|
||
|
||
若输出结果和北京时间一致,则代表修改正确。
|
||
|
||
```bash
|
||
## 修改系统时区
|
||
$ timedatectl set-timezone Asia/Shanghai
|
||
|
||
## 检查系统时间
|
||
$ date -R
|
||
|
||
#### 系统时间示例输出
|
||
Wed, 27 Aug 2025 15:12:21 +0800
|
||
```
|
||
|
||
Debian 系统常用 `systemd-timesyncd.service` 来同步时间,而 PVE 系统使用 `chrony.service` 来同步时间。
|
||
|
||
为了使用国内的 NTP 服务器,需要对 `chrony.service` 进行配置,执行以下命令。
|
||
|
||
```bash
|
||
## 编辑 chrony 配置文件
|
||
$ editor /etc/chrony/chrony.conf
|
||
```
|
||
|
||
在编辑器对话框中,将 `pool 2.debian.pool.ntp.org iburst` “注释” 掉,并添加国内的 NTP 服务器。
|
||
|
||
```bash
|
||
## chrony 配置项
|
||
|
||
# Use Debian vendor zone.
|
||
# pool 2.debian.pool.ntp.org iburst ## 在这行前面增加注释符 # 来注释
|
||
|
||
# Use Custom vendor zone.
|
||
pool ntp.aliyun.com iburst
|
||
pool ntp.tencent.com iburst
|
||
pool cn.pool.ntp.org iburst
|
||
|
||
```
|
||
|
||
配置文件编辑完成后,需重启 `chrony.service` ,并再次检查系统 NTP 服务器地址。
|
||
|
||
```bash
|
||
## 重启 chrony.service
|
||
$ systemctl restart chrony.service
|
||
|
||
## 检查系统 NTP 服务器
|
||
$ chronyc sources -V
|
||
|
||
#### 系统 NTP 服务器示例输出
|
||
MS Name/IP address Stratum Poll Reach LastRx Last sample
|
||
===============================================================================
|
||
^* 203.107.6.88 2 6 17 0 -875us[-2496us] +/- 22ms
|
||
^- 106.55.184.199 2 6 17 3 -1331us[-1331us] +/- 50ms
|
||
^- time.neu.edu.cn 2 6 17 8 +935us[ +935us] +/- 23ms
|
||
^- 119.28.206.193 2 6 65 5 +33us[ +33us] +/- 65ms
|
||
^- electrode.felixc.at 2 6 17 11 -1320us[-1320us] +/- 126ms
|
||
^- dns1.synet.edu.cn 1 6 17 13 -44us[ -44us] +/- 22ms
|
||
```
|
||
|
||
## 2. CPU 调度器
|
||
|
||
安装 `linux-cpupower` 后,需检查 CPU 当前调度器。
|
||
|
||
```bash
|
||
## 检查 CPU 当前调度器
|
||
$ cpupower -c all frequency-info
|
||
|
||
#### 设备 CPU - J4125 示例输出
|
||
analyzing CPU 0:
|
||
driver: intel_cpufreq
|
||
CPUs which run at the same hardware frequency: 0
|
||
CPUs which need to have their frequency coordinated by software: 0
|
||
maximum transition latency: 20.0 us
|
||
hardware limits: 800 MHz - 2.70 GHz
|
||
available cpufreq governors: conservative ondemand userspace powersave performance schedutil
|
||
current policy: frequency should be within 800 MHz and 2.70 GHz.
|
||
The governor "performance" may decide which speed to use
|
||
within this range.
|
||
current CPU frequency: Unable to call hardware
|
||
current CPU frequency: 2.60 GHz (asserted by call to kernel)
|
||
boost state support:
|
||
Supported: yes
|
||
Active: yes
|
||
|
||
#### 设备 CPU - N100 示例输出
|
||
analyzing CPU 0:
|
||
driver: intel_pstate
|
||
CPUs which run at the same hardware frequency: 0
|
||
CPUs which need to have their frequency coordinated by software: 0
|
||
maximum transition latency: Cannot determine or is not supported.
|
||
hardware limits: 800 MHz - 3.30 GHz
|
||
available cpufreq governors: performance powersave
|
||
current policy: frequency should be within 800 MHz and 3.30 GHz.
|
||
The governor "performance" may decide which speed to use
|
||
within this range.
|
||
current CPU frequency: Unable to call hardware
|
||
current CPU frequency: 2.00 GHz (asserted by call to kernel)
|
||
boost state support:
|
||
Supported: yes
|
||
Active: yes
|
||
```
|
||
|
||
这里面主要关注如下几点:
|
||
- `driver` :CPU 调频驱动方案,例如 `intel_cpufreq` 或 `intel_pstate`
|
||
- `governor` :调频策略中使用的调度器,例如 `performance`
|
||
- CPU 驱动为 `intel_cpufreq` 时,推荐使用 `schedutil` 调度器
|
||
- CPU 驱动为 `intel_pstate` 时,推荐使用 `powersave` 调度器
|
||
|
||
CPU 驱动一般不建议手动调整,而 `governor` 后面的参数表示 CPU 当前调度器设置。
|
||
|
||
接下来,需要了解 CPU 支持的调度器有哪些,执行以下命令。
|
||
|
||
```bash
|
||
## 检查 CPU 调度器支持情况
|
||
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
|
||
|
||
#### 设备 CPU - J4125 示例输出
|
||
conservative ondemand userspace powersave performance schedutil
|
||
|
||
#### 设备 CPU - N100 示例输出
|
||
performance powersave
|
||
```
|
||
|
||
本文通过 systemd 服务自动管理 `cpupower` ,服务启动时将 CPU 调度器设置为 `powersave` ,停止时恢复为 `performance` 。
|
||
|
||
```bash
|
||
## 创建 cpupower.service 配置文件
|
||
$ systemctl edit --force --full cpupower.service
|
||
```
|
||
|
||
在服务配置文件中输入以下内容,并保存。
|
||
|
||
```bash
|
||
[Unit]
|
||
Description=CPU Power Governor Management
|
||
ConditionVirtualization=!container
|
||
|
||
[Service]
|
||
Type=oneshot
|
||
ExecStart=/usr/bin/cpupower frequency-set --governor powersave
|
||
ExecStop=/usr/bin/cpupower frequency-set --governor performance
|
||
RemainAfterExit=yes
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
|
||
```
|
||
|
||
执行以下命令让 `cpupower` 服务立即启动并置为开机自启状态。
|
||
|
||
```bash
|
||
## 设置 cpupower 服务开机自启
|
||
$ systemctl enable --now cpupower.service
|
||
```
|
||
|
||
这里提供两个额外命令,方便实时查看 CPU 当前频率和温度状况。
|
||
|
||
```bash
|
||
## 查看 CPU 当前频率
|
||
$ watch cat /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_cur_freq
|
||
|
||
## 查看内部温度
|
||
$ watch -d sensors
|
||
```
|
||
|
||
## 3. PVE 自动更新
|
||
|
||
### 3.1.系统定时器
|
||
|
||
配置系统自动更新之前,需检查系统当前定时器状态。
|
||
|
||
后续将手动调整该定时器的时间,使其每 `10` 天的 `01:30` 进行触发。
|
||
|
||
```bash
|
||
## 检查系统定时器
|
||
$ systemctl status apt-daily-upgrade.timer
|
||
|
||
#### 系统定时器示例输出
|
||
● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
|
||
Loaded: loaded (/usr/lib/systemd/system/apt-daily-upgrade.timer; enabled; preset: enabled)
|
||
Active: active (waiting) since Mon 2026-08-10 09:51:05 CST; 27min ago
|
||
Invocation: edb5962fda4c4a8395cb2c04c736db45
|
||
Trigger: Tue 2026-08-11 06:21:38 CST; 20h left
|
||
Triggers: ● apt-daily-upgrade.service
|
||
|
||
Aug 10 09:51:05 node01 systemd[1]: Started apt-daily-upgrade.timer - Daily apt upgrade and clean activities.
|
||
```
|
||
|
||
### 3.2.配置更新策略
|
||
|
||
执行以下命令,启用系统自动更新。
|
||
|
||
执行命令后,使用 “左右” 方向键进行选择,“回车” 键进行确认。
|
||
|
||
```bash
|
||
## 配置自动更新策略
|
||
$ dpkg-reconfigure -plow unattended-upgrades
|
||
|
||
## 选择 “是”
|
||
<Yes>
|
||
```
|
||
|
||
开始调整 `20auto-upgrades` 配置文件。
|
||
|
||
配置文件中,用来控制更新周期的参数为 `APT::Periodic::Unattended-Upgrade` ,`10` 表示更新周期为 `10` 天。
|
||
|
||
```bash
|
||
## 编辑 20auto-upgrades 配置文件
|
||
$ tee /etc/apt/apt.conf.d/20auto-upgrades >/dev/null <<'EOF'
|
||
APT::Periodic::Update-Package-Lists "1";
|
||
APT::Periodic::Unattended-Upgrade "10";
|
||
APT::Periodic::AutocleanInterval "1";
|
||
APT::Periodic::CleanInterval "1";
|
||
EOF
|
||
```
|
||
|
||
进一步调整 `50unattended-upgrades` 配置文件。
|
||
|
||
```bash
|
||
## 编辑 50unattended-upgrades 配置文件
|
||
$ editor /etc/apt/apt.conf.d/50unattended-upgrades
|
||
```
|
||
|
||
配置文件中,被修改的参数解释如下:
|
||
- 启用了 Debian `trixie-updates` 相关更新
|
||
- 增加并启用 PVE 自有仓库的更新
|
||
- 增加并启用 PVE Ceph 仓库的更新,请按需启用
|
||
- 自动修复被打断的 Dpkg 安装
|
||
- 自动移除无用的的内核包
|
||
- 自动移除因更新而出现的无用依赖包
|
||
- 自动移除以前的无用依赖包
|
||
- 自动重启:开启
|
||
- 自动重启时间:`02:30`
|
||
|
||
因为该配置文件很长,完整的配置文件可查看 [pve_50unattended_upgrades.conf](./src/pve/pve_50unattended_upgrades.conf) 以便对比。
|
||
|
||
```bash
|
||
## 删除以下行前面的注释符 // ,代表启用
|
||
|
||
"origin=Debian,codename=${distro_codename}-updates";
|
||
|
||
## 添加 PVE 系统更新项目
|
||
|
||
"origin=Proxmox,codename=${distro_codename},label=Proxmox Debian Repository";
|
||
|
||
## 按需添加 PVE Ceph 更新项目
|
||
|
||
"origin=Proxmox,codename=${distro_codename},label=Proxmox Ceph 19 Squid Debian Repository";
|
||
|
||
## 在配置文件末尾增加以下内容,代表启用,并调整参数
|
||
|
||
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
|
||
|
||
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
|
||
|
||
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
|
||
|
||
Unattended-Upgrade::Remove-Unused-Dependencies "true";
|
||
|
||
Unattended-Upgrade::Automatic-Reboot "true";
|
||
|
||
Unattended-Upgrade::Automatic-Reboot-Time "02:30";
|
||
|
||
```
|
||
|
||
### 3.3.重设触发器
|
||
|
||
系统自动更新配置文件修改完成后,需要重设自动更新定时器,执行以下命令。
|
||
|
||
完整的配置文件可查看 [pve_apt_daily_upgrade.conf](./src/pve/pve_apt_daily_upgrade.conf) 以便对比。
|
||
|
||
```bash
|
||
## 配置系统定时器
|
||
$ systemctl edit apt-daily-upgrade.timer
|
||
```
|
||
|
||
根据配置文件中的提示,在中间空白处填入以下内容。
|
||
|
||
```bash
|
||
## 定时器配置项
|
||
|
||
[Timer]
|
||
OnCalendar=
|
||
OnCalendar=01:30
|
||
RandomizedDelaySec=0
|
||
|
||
```
|
||
|
||
设置完成后,重启自动更新触发器。
|
||
|
||
```bash
|
||
## 重启触发器
|
||
$ systemctl restart apt-daily-upgrade.timer
|
||
|
||
## 再次检查触发器状态
|
||
$ systemctl status apt-daily-upgrade.timer
|
||
|
||
#### 系统自动更新触发器示例输出
|
||
● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
|
||
Loaded: loaded (/usr/lib/systemd/system/apt-daily-upgrade.timer; enabled; preset: enabled)
|
||
Drop-In: /etc/systemd/system/apt-daily-upgrade.timer.d
|
||
└─override.conf
|
||
Active: active (waiting) since Mon 2026-08-10 10:35:09 CST; 5s ago
|
||
Invocation: e73c9dd167cc4814836a1da4dab015db
|
||
Trigger: Tue 2026-08-11 01:30:00 CST; 14h left
|
||
Triggers: ● apt-daily-upgrade.service
|
||
|
||
Aug 10 10:35:09 node01 systemd[1]: Stopping apt-daily-upgrade.timer - Daily apt upgrade and clean activities...
|
||
Aug 10 10:35:09 node01 systemd[1]: Stopped apt-daily-upgrade.timer - Daily apt upgrade and clean activities.
|
||
Aug 10 10:35:09 node01 systemd[1]: Started apt-daily-upgrade.timer - Daily apt upgrade and clean activities.
|
||
```
|
||
|
||
## 4.硬件直通
|
||
|
||
### 4.1.修改 Grub
|
||
|
||
参考官方文档 [qm_pci_passthrough](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_pci_passthrough) 和 [Pci passthrough](https://pve.proxmox.com/wiki/Pci_passthrough) 开启 PVE 硬件直通功能。
|
||
|
||
使用终端工具登录到 PVE 服务器,编辑系统 `Grub` 的配置文件 `/etc/default/grub` 。
|
||
|
||
```bash
|
||
## 编辑 Grub 配置文件
|
||
$ editor /etc/default/grub
|
||
```
|
||
|
||
在编辑器对话框中修改 `GRUB_CMDLINE_LINUX_DEFAULT` 参数,注意命令中间的空格。
|
||
|
||
```bash
|
||
## Intel 处理器添加参数
|
||
|
||
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
|
||
|
||
```
|
||
|
||
根据官方文档的说明,AMD 处理器下硬件直通功能将会自动打开,否则需要手动修改 `Grub` 配置文件。
|
||
|
||
```bash
|
||
## AMD 处理器添加参数
|
||
|
||
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
|
||
|
||
```
|
||
|
||
修改并保存后,需要更新系统 `Grub` 。
|
||
|
||
```bash
|
||
## 更新系统 Grub
|
||
$ update-grub
|
||
```
|
||
|
||
### 4.2.添加内核模块
|
||
|
||
编辑 **内核模块** 配置文件,增加必要的系统模块,执行以下命令。
|
||
|
||
```bash
|
||
## 编辑系统配置文件
|
||
$ tee /etc/modules-load.d/10-server-modules.conf >/dev/null <<'EOF'
|
||
# This configuration file is customized by fox,
|
||
# Optimize vfio related modules at system boot.
|
||
|
||
vfio
|
||
vfio_iommu_type1
|
||
vfio_pci
|
||
EOF
|
||
```
|
||
|
||
执行以下命令更新 `initramfs` ,更新完成后,建议重启 PVE 服务器。
|
||
|
||
```bash
|
||
## 更新 initramfs
|
||
$ update-initramfs -u -k all
|
||
```
|
||
|
||
### 4.3.检查硬件直通
|
||
|
||
PVE 服务器重启完成后,再次使用终端工具登录,并执行以下命令检查硬件直通状态。
|
||
|
||
主要查看 `IOMMU` 、 `Directed I/O` 或 `Interrupt Remapping` 的启用状态。
|
||
|
||
```bash
|
||
## 检查系统硬件直通状态
|
||
$ dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
|
||
|
||
#### 设备 CPU - J4125 示例输出
|
||
[ 0.008356] ACPI: DMAR 0x000000007953E000 0000A8 (v01 INTEL GLK-SOC 00000003 BRXT 0100000D)
|
||
[ 0.008406] ACPI: Reserving DMAR table memory at [mem 0x7953e000-0x7953e0a7]
|
||
[ 0.055618] AMD-Vi: Unknown option - 'on'
|
||
[ 0.220916] DMAR: Host address width 39
|
||
[ 0.220919] DMAR: DRHD base: 0x000000fed64000 flags: 0x0
|
||
[ 0.220939] DMAR: dmar0: reg_base_addr fed64000 ver 1:0 cap 1c0000c40660462 ecap 9e2ff0505e
|
||
[ 0.220944] DMAR: DRHD base: 0x000000fed65000 flags: 0x1
|
||
[ 0.220954] DMAR: dmar1: reg_base_addr fed65000 ver 1:0 cap d2008c40660462 ecap f050da
|
||
[ 0.220960] DMAR: RMRR base: 0x000000794a9000 end: 0x000000794c8fff
|
||
[ 0.220963] DMAR: RMRR base: 0x0000007b800000 end: 0x0000007fffffff
|
||
[ 0.220967] DMAR-IR: IOAPIC id 1 under DRHD base 0xfed65000 IOMMU 1
|
||
[ 0.220970] DMAR-IR: HPET id 0 under DRHD base 0xfed65000
|
||
[ 0.220973] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
|
||
[ 0.223069] DMAR-IR: Enabled IRQ remapping in x2apic mode
|
||
[ 0.493005] DMAR: No ATSR found
|
||
[ 0.493008] DMAR: No SATC found
|
||
[ 0.493010] DMAR: dmar0: Using Queued invalidation
|
||
[ 0.493018] DMAR: dmar1: Using Queued invalidation
|
||
[ 0.494092] DMAR: Intel(R) Virtualization Technology for Directed I/O
|
||
```
|
||
|
||
检查系统 `IOMMU` 分组,执行以下命令。
|
||
|
||
```bash
|
||
## 检查 IOMMU group
|
||
$ find /sys/kernel/iommu_groups/ -type l
|
||
|
||
#### 设备 CPU - J4125 示例输出
|
||
/sys/kernel/iommu_groups/17/devices/0000:04:00.0
|
||
/sys/kernel/iommu_groups/7/devices/0000:00:13.3
|
||
/sys/kernel/iommu_groups/15/devices/0000:02:00.0
|
||
/sys/kernel/iommu_groups/5/devices/0000:00:13.0
|
||
/sys/kernel/iommu_groups/13/devices/0000:00:1f.0
|
||
/sys/kernel/iommu_groups/13/devices/0000:00:1f.1
|
||
/sys/kernel/iommu_groups/3/devices/0000:00:0f.0
|
||
/sys/kernel/iommu_groups/11/devices/0000:00:17.0
|
||
/sys/kernel/iommu_groups/11/devices/0000:00:17.3
|
||
/sys/kernel/iommu_groups/11/devices/0000:00:17.1
|
||
/sys/kernel/iommu_groups/11/devices/0000:00:17.2
|
||
/sys/kernel/iommu_groups/1/devices/0000:00:00.0
|
||
/sys/kernel/iommu_groups/18/devices/0000:05:00.0
|
||
/sys/kernel/iommu_groups/8/devices/0000:00:14.0
|
||
/sys/kernel/iommu_groups/16/devices/0000:03:00.0
|
||
/sys/kernel/iommu_groups/6/devices/0000:00:13.2
|
||
/sys/kernel/iommu_groups/14/devices/0000:01:00.0
|
||
/sys/kernel/iommu_groups/4/devices/0000:00:12.0
|
||
/sys/kernel/iommu_groups/12/devices/0000:00:1c.0
|
||
/sys/kernel/iommu_groups/2/devices/0000:00:0e.0
|
||
/sys/kernel/iommu_groups/10/devices/0000:00:15.0
|
||
/sys/kernel/iommu_groups/0/devices/0000:00:02.0
|
||
/sys/kernel/iommu_groups/9/devices/0000:00:14.1
|
||
```
|
||
|
||
## 5.系统清理
|
||
|
||
PVE 系统配置完成后,可执行以下命令,对系统进行清理。
|
||
|
||
```bash
|
||
## 清理系统软件包
|
||
$ apt clean && apt autoclean && apt autoremove --purge
|
||
|
||
## 清理系统缓存
|
||
$ bash -c 'find /var/cache/apt/ /var/lib/apt/lists/ /tmp/ -type f -print -delete'
|
||
|
||
## 清理系统日志
|
||
$ bash -c 'find /var/log/ -type f -print -delete'
|
||
|
||
## 清理命令历史记录文件
|
||
$ rm -rvf ~/.bash_history && history -c
|
||
```
|
||
|
||
至此 PVE 的系统调整已经完成。
|