Files
pve_toss_notes/03.PVE系统调整.md
T
2023-06-26 18:46:38 +08:00

16 KiB
Raw Blame History

0.必要条件

在上一篇文章 02.PVE初始化配置 中,已初始化了 PVE 系统,接下来需要对 PVE 系统进一步调整。

在 PVE 系统调整之前,请确认必要的软件包已经安装完成,本文后续命令均在 SSH 终端下执行。

## 同步镜像仓库
apt update

## 安装系统软件
apt install htop lm-sensors unzip vim tmux unattended-upgrades powermgmt-base

## 安装网络工具
apt install iperf iperf3 iftop

## 安装 CPU 调度调整工具
apt install cpufrequtils

## 根据 CPU 厂商安装 CPU 微码工具
apt install intel-microcode (amd64-microcode)

## 更新 PCI 数据库
update-pciids

1.系统时区

如果在安装 PVE 系统时选错了时区,导致系统时间和北京时间不一致,可以使用以下命令修正。

输出结果如果和北京时间一致,则代表修改正确。

## 修改系统时区
timedatectl set-timezone Asia/Shanghai

## 检查系统时间
date -R

参考输出:

Sun, 25 Jun 2023 12:12:12 +0800


Debian 系统常用 `systemd-timesyncd.service` 来同步时间,而 PVE 系统使用 `chrony.service` 来同步时间。  

为了使用国内的 NTP 服务器,需要对 `chrony.service` 进行配置。  

执行以下命令对 `chrony` 的配置文件进行修改。  

```bash
## 编辑 chrony 配置文件
nano /etc/chrony/chrony.conf

在编辑器对话框中,将 pool 2.debian.pool.ntp.org iburst “注释” 掉,并添加国内的 NTP 服务器。

## chrony 配置项

# Use Debian vendor zone.
# pool 2.debian.pool.ntp.org iburst    ## 在这行前面增加注释符 # 来注释

# Use Custom vendor zone.
pool ntp.tencent.com iburst
pool ntp.aliyun.com iburst

保存该配置文件后,需重启 chrony 服务,并再次检查系统 NTP 服务器地址。

## 重启 chrony 服务
systemctl restart chrony.service

## 检查系统 NTP 服务器
chronyc sources -V

如果输出以下类似内容,则表示系统 NTP 服务器设置正确。

## NTP 服务示例输出

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 106.55.184.199                2   6    17    11   +752us[ +273us] +/-   40ms
^* 203.107.6.88                  2   6    17    11  -1868us[-2348us] +/-   17ms

2. CPU 调度器

安装好 cpufrequtils 后,需检查 CPU 当前调度器。

## 检查 CPU 当前调度器
cpufreq-info

设备 CPU - J4125 参考输出

## J4125 参考输出

cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
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 "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 1.84 GHz.   

设备 CPU - N6005 参考输出

## N6005 参考输出

cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
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: 4294.55 ms.
  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 is 2.00 GHz.

这里面主要关注两个点:

  • driver: intel_cpufreqintel_pstate

  • current policy: governor "ondemand"governor "performance"

还有另外一个命令可用来显示 CPU 当前调度器。

## 检查 CPU 当前调度器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor


## J4125 参考输出

ondemand


## N6005 参考输出

performance

CPU 驱动一般不建议手动调整,而 governor 后面的参数表示 CPU 当前调度器设置。

接下来,需要了解 CPU 支持的调度器有哪些,使用以下命令。

## 检查 CPU 调度器支持情况
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors


## J4125 参考输出

conservative ondemand userspace powersave performance schedutil


## N6005 参考输出

performance powersave

根据 CPU 所使用的驱动不同,可选调度器也不同,至于每种调度器有什么优劣,欢迎大家深度挖掘。

  • CPU 驱动为 intel_cpufreq 时,推荐使用 schedutil 调度器。

  • CPU 驱动为 intel_pstate 时,推荐使用 powersave 调度器。

本文使用 powersave 调度器为演示,使用 nano 编辑器来编辑 cpufrequtils 的配置文件。

因为该配置文件很长,完整的配置文件可查看 pve_cpufrequtils.conf 以便对比。

修改完成后,需要重启 PVE 服务器来使参数生效。

## 编辑 cpufrequtils 配置文件
nano /etc/init.d/cpufrequtils

在配置文件中修改以下配置项,并保存。

## cpufrequtils 配置项

ENABLE="true"
GOVERNOR="powersave"    ## 修改本行的调度器为 powersave
MAX_SPEED="0"
MIN_SPEED="0"

PVE 服务器重启完成后需再次查看 CPU 调度器,检验配置文件是否生效。

这里提供两个额外命令,方便实时查看 CPU 当前频率和温度状况。

## 查看 CPU 当前频率
watch cat /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_cur_freq

## 查看内部温度
watch -d sensors

3. PVE 定时重启

有时需要让 PVE 服务器周期性的定时重启,则可使用以下命令。

参数表示每月 116 号的 50 分执行系统重启命令。

## 查看系统定时任务
crontab -l

## 编辑系统定时任务,编辑器选择 nano
crontab -e

## 在配置文件末尾增加以下配置项

0 5 1,16 * * /usr/sbin/reboot

4. PVE 自动更新

4.1.系统定时器

配置系统自动更新之前,需检查系统当前定时器状态。

后续将手动调整该定时器的时间,使其每 5 天凌晨 02:00 进行触发。

## 检查系统定时器
systemctl status apt-daily-upgrade.timer

## 示例输出

● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
     Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; preset: enabled)
     Active: active (waiting) since Fri 2023-06-23 18:55:58 CST; 1 day 18h ago
      Until: Fri 2023-06-23 18:55:58 CST; 1 day 18h ago
    Trigger: Mon 2023-06-26 06:26:25 CST; 16h left
   Triggers: ● apt-daily-upgrade.service

Jun 23 18:55:58 node01 systemd[1]: Started apt-daily-upgrade.timer - Daily apt upgrade and clean activities.

4.2.配置更新策略

使用以下命令,启用系统自动更新。

执行命令后,使用 “左右” 方向键进行选择,“回车” 键进行确认。

## 配置自动更新策略
dpkg-reconfigure -plow unattended-upgrades

## 选择 “是” (“YES”)

## 示例输出

Creating config file /etc/apt/apt.conf.d/20auto-upgrades with new version

进一步调整 apt 的 20auto-upgrades 配置文件。

## 进入 apt 的配置目录
cd /etc/apt/apt.conf.d

## 编辑 20auto-upgrades 配置文件
nano /etc/apt/apt.conf.d/20auto-upgrades

删除里面全部内容,添加以下配置项,并保存。

配置文件中,用来控制更新周期的参数为 APT::Periodic::Unattended-Upgrade 5 表示更新周期为 5 天。

## 系统更新周期配置项

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "5";
APT::Periodic::AutocleanInterval "1";
APT::Periodic::CleanInterval "1";

进一步调整 apt 的 50unattended-upgrades 配置文件。

## 编辑 50unattended-upgrades 配置文件
nano /etc/apt/apt.conf.d/50unattended-upgrades

配置文件中,被修改的参数解释如下:

  • 启用了 Debian bookworm-updates 相关更新。

  • 增加并启用 PVE 自有仓库的更新。

  • 增加并启用 PVE Ceph 仓库的更新,请按需启用。

  • 自动修复被打断的 Dpkg 安装。

  • 自动移除无用的的内核包。

  • 自动移除因更新而出现的无用依赖包。

  • 自动移除以前的无用依赖包。

  • 自动重启:开启。

  • 自动重启时间:05:00

因为该配置文件很长,完整的配置文件可查看 pve_50unattended_upgrades.conf 以便对比。

## 删除以下行前面的注释符 // ,代表启用

"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 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 "05:00";

4.3.重设触发器

系统自动更新配置文件修改完成后,需要重设自动更新定时器,执行以下命令。

完整的配置文件可查看 pve_apt_daily_upgrade.conf 以便对比。

## 配置系统定时器
systemctl edit apt-daily-upgrade.timer

根据配置文件中的提示,在中间空白处填入以下配置项。

## 定时器配置项

[Timer]
OnCalendar=
OnCalendar=02:00
RandomizedDelaySec=0

设置完成后,重启自动更新触发器。

## 重启触发器
systemctl restart apt-daily-upgrade.timer

## 再次检查触发器状态
systemctl status apt-daily-upgrade.timer

## 参考输出

● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
     Loaded: loaded (/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 Sun 2023-06-25 14:35:06 CST; 9s ago
      Until: Sun 2023-06-25 14:35:06 CST; 9s ago
    Trigger: Mon 2023-06-26 02:00:00 CST; 11h left
   Triggers: ● apt-daily-upgrade.service

Jun 25 14:35:06 node01 systemd[1]: Stopped apt-daily-upgrade.timer - Daily apt upgrade and clean activities.
Jun 25 14:35:06 node01 systemd[1]: Stopping apt-daily-upgrade.timer - Daily apt upgrade and clean activities...
Jun 25 14:35:06 node01 systemd[1]: Started apt-daily-upgrade.timer - Daily apt upgrade and clean activities.

5.硬件直通

5.1.修改 Grub

参考官方文档 qm_pci_passthroughPci passthrough 开启 PVE 硬件直通功能。

使用 SSH 工具登录到 PVE 服务器,编辑系统 Grub 的配置文件 /etc/default/grub

## 编辑 Grub 配置文件
nano /etc/default/grub

在编辑器对话框中修改 GRUB_CMDLINE_LINUX_DEFAULT 参数,注意命令中间的空格。

## Intel 处理器添加参数

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

根据官方文档的说明,AMD 处理器下硬件直通功能将会自动打开,否则需要手动修改 Grub 配置文件。

## AMD 处理器添加参数

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

修改并保存后,需要更新系统 Grub

## 更新系统 Grub
update-grub

5.2.添加内核模块

修改系统 /etc/modules 配置文件,增加必要的系统模块。

## 编辑系统配置文件
nano /etc/modules

在配置文件中添加以下配置项,并保存。

## 硬件直通配置项

vfio
vfio_iommu_type1
vfio_pci

使用以下命令更新 initramfs ,更新完成后,建议重启 PVE 服务器。

## 更新 initramfs
update-initramfs -u -k all

5.3.检查硬件直通

PVE 服务器重启完成后,再次使用 SSH 工具登录,并使用以下命令检查硬件直通状态。

主要查看 IOMMUDirected I/OInterrupt Remapping 的启用状态。

## 检查系统硬件直通状态
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi

## N6005 示例输出

[    0.017937] ACPI: DMAR 0x00000000746C2000 000088 (v02 INTEL  EDK2     00000002      01000013)
[    0.017965] ACPI: Reserving DMAR table memory at [mem 0x746c2000-0x746c2087]
[    0.047812] DMAR: IOMMU enabled
[    0.116031] DMAR: Host address width 39
[    0.116032] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[    0.116038] DMAR: dmar0: reg_base_addr fed90000 ver 4:0 cap 1c0000c40660462 ecap 49e2ff0505e
[    0.116041] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[    0.116046] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da
[    0.116048] DMAR: RMRR base: 0x0000007b800000 end: 0x0000007fbfffff
[    0.116051] DMAR-IR: IOAPIC id 2 under DRHD base  0xfed91000 IOMMU 1
[    0.116052] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[    0.116053] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.117774] DMAR-IR: Enabled IRQ remapping in x2apic mode
[    1.746431] pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
[    2.290116] DMAR: No ATSR found
[    2.290117] DMAR: No SATC found
[    2.290118] DMAR: IOMMU feature fl1gp_support inconsistent
[    2.290119] DMAR: IOMMU feature pgsel_inv inconsistent
[    2.290120] DMAR: IOMMU feature nwfs inconsistent
[    2.290121] DMAR: IOMMU feature pds inconsistent
[    2.290122] DMAR: IOMMU feature eafs inconsistent
[    2.290123] DMAR: IOMMU feature prs inconsistent
[    2.290123] DMAR: IOMMU feature nest inconsistent
[    2.290124] DMAR: IOMMU feature mts inconsistent
[    2.290124] DMAR: IOMMU feature sc_support inconsistent
[    2.290125] DMAR: IOMMU feature dev_iotlb_support inconsistent
[    2.290126] DMAR: dmar0: Using Queued invalidation
[    2.290129] DMAR: dmar1: Using Queued invalidation
[    2.290568] DMAR: Intel(R) Virtualization Technology for Directed I/O

检查系统 IOMMU 分组,使用以下命令。

## 检查 IOMMU group
find /sys/kernel/iommu_groups/ -type l

## N6005 示例输出

/sys/kernel/iommu_groups/7/devices/0000:00:1c.4
/sys/kernel/iommu_groups/15/devices/0000:04:00.0
/sys/kernel/iommu_groups/5/devices/0000:00:17.0
/sys/kernel/iommu_groups/13/devices/0000:02:00.0
/sys/kernel/iommu_groups/3/devices/0000:00:15.2
/sys/kernel/iommu_groups/3/devices/0000:00:15.0
/sys/kernel/iommu_groups/11/devices/0000:00:1f.0
/sys/kernel/iommu_groups/11/devices/0000:00:1f.5
/sys/kernel/iommu_groups/11/devices/0000:00:1f.3
/sys/kernel/iommu_groups/11/devices/0000:00:1f.4
/sys/kernel/iommu_groups/1/devices/0000:00:00.0
/sys/kernel/iommu_groups/8/devices/0000:00:1c.5
/sys/kernel/iommu_groups/16/devices/0000:05:00.0
/sys/kernel/iommu_groups/6/devices/0000:00:1c.0
/sys/kernel/iommu_groups/14/devices/0000:03:00.0
/sys/kernel/iommu_groups/4/devices/0000:00:16.0
/sys/kernel/iommu_groups/12/devices/0000:01:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.5
/sys/kernel/iommu_groups/2/devices/0000:00:14.2
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/10/devices/0000:00:1c.7
/sys/kernel/iommu_groups/0/devices/0000:00:02.0
/sys/kernel/iommu_groups/9/devices/0000:00:1c.6

6.系统清理

PVE 系统配置完成后,可逐条执行以下命令,对系统进行清理。

## 清理系统软件包
apt clean && apt autoclean && apt autoremove --purge

## 清理系统缓存
rm -rvf /var/cache/apt/* /var/lib/apt/lists/* /tmp/*

## 清理系统日志
find /var/log/ -type f | xargs rm -rvf

## 清理命令历史记录文件
rm -rvf ~/.bash_history

## 清理命令历史
history -c

至此 PVE 的系统调整已经完成。