Featured image of post PVE8笔记-All in boom💥

PVE8笔记-All in boom💥

从折腾PVE入门开始,浮现出来很多硬件问题,也把我从软路由的泥潭拉倒虚拟机的泥潭

测试:12300T+纳斯Z690主板

graph TD A["PVE宿主"] A --> C["Win10"] A --> D["NAS"] A --> B["网络"] A --> E["LXC..."] C --> F["日常用"] --> FF["SRIOV核显"] D --> G["相册"] D --> H["影音"] --> FF["SRIOV核显"] E --> I["SMB/NFS文件"] B --> BB["Openwrt"] ---> MM["旁路由/网关"] F --> I["SMB/NFS文件"] H --> I["SMB/NFS文件"] style A fill:#f9f,stroke:#333 style B fill:#fff,stroke:#333 style BB fill:#fff,stroke:#333 style MM fill:#fff,stroke:#333 style C fill:#dfd,stroke:#333 style D fill:#dfd,stroke:#333 style E fill:#dfd,stroke:#333

上图展示了整体架构设计,主要分为三层。用PVE提供的ZFS当NAS,切记对 pve 尽量少修改,提高系统稳定性,各种服务通过 lxc 提供。( 网络相关服务不在正式环境计划之内 )

  • 基础层:PVE主系统 + ZFS存储

  • VM层:Debian12和LXC

  • 应用层:Docker服务、Jellyfin媒体服务和文件共享服务

12代CPU核显虚拟化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
vim /etc/default/grub
# 开启iommu分组和i915guc,在里面找到:GRUB_CMDLINE_LINUX_DEFAULT="quiet"项将其修改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7"
echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" | tee -a /etc/modules
update-grub
update-initramfs -u -k all
reboot

# 不开启核显SR-IOV直通pcie设备
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream"
echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" | tee -a /etc/modules
update-grub
update-initramfs -u -k all
reboot

物理核显 VS SRIOV

优点 缺点
物理核显直通 1、性能强
2、支持物理显示输出(VGA/DP/HDMI/Type-C)
3、兼容性好,不妨碍PVE升级。 宿主需要另外显卡
SRIOV虚拟核显直通 可分为多个VF虚拟显卡,给不同VM使用 1. 不支持HDMI输出
2. PVE升级需要注意
3. 部分流媒体解码/转码功能受限

通过命令删除虚拟机

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
root@pve:~# qm destroy 100
VM 100 is running - destroy failed
root@pve:~# qm stop 100
trying to acquire lock...
can't lock file '/var/lock/qemu-server/lock-100.conf' - got timeout
root@pve:~# rm /var/lock/qemu-server/lock-100.conf
root@pve:~# qm stop 100
root@pve:~# qm destroy 100
root@pve:~# qm list
root@pve:~# qm destroy 100 --purge
Configuration file 'nodes/pve/qemu-server/100.conf' does not exist
root@pve:~# ls /etc/pve/qemu-server/

PVE常用命令

更换IP

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 修改IP地址
vim /etc/network/interfaces

# 修改主机hosts
vim /etc/hosts

# 重启网络服务
systemctl restart networking

# 重启pveproxy
systemctl restart pveproxy

# 重启后,查看issue即可变更为新的IP地址

cat /etc/issue

网络

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
root@pve:/hdd-pool# pveversion -v
proxmox-ve: 8.3.0 (running kernel: 6.8.12-4-pve)
pve-manager: 8.3.2 (running version: 8.3.2/3e76eec21c4a14a7)
proxmox-kernel-helper: 8.1.0
proxmox-kernel-6.8: 6.8.12-5
proxmox-kernel-6.8.12-5-pve-signed: 6.8.12-5
proxmox-kernel-6.8.12-4-pve-signed: 6.8.12-4

# 有4个网口
root@pve:/hdd-pool# cat /etc/network/interfaces
auto lo
iface lo inet loopback

iface enp3s0 inet manual

auto vmbr0
iface vmbr0 inet static
   address 192.168.3.200/24
   gateway 192.168.3.1
   bridge-ports enp3s0
   bridge-stp off
   bridge-fd 0

iface enp2s0 inet manual

iface enp4s0 inet manual

iface enp5s0 inet manual

# 安装网络工具
apt install net-tools

pve-swap

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 移除swap
root@pve:/hdd-pool# lvs
 LV   VG  Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 root pve -wi-ao---- <944.87g
 swap pve -wi-ao----    8.00g
root@pve:/hdd-pool# swapoff -a
root@pve:/hdd-pool# lvremove /dev/pve/swap
Do you really want to remove active logical volume pve/swap? [y/n]: y
 Logical volume "swap" successfully removed.
root@pve:/hdd-pool# lvresize -l +100%FREE /dev/pve/root
 Size of logical volume pve/root changed from <944.87 GiB (241886 extents) to <952.87 GiB (243934 extents).
 Logical volume pve/root successfully resized.
root@pve:/hdd-pool# resize2fs /dev/mapper/pve-root
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/pve-root is mounted on /; on-line resizing required
old_desc_blocks = 119, new_desc_blocks = 120
The filesystem on /dev/mapper/pve-root is now 249788416 (4k) blocks long.

root@pve:/hdd-pool# lvs
 LV   VG  Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 root pve -wi-ao---- <952.87g
 
# 新增swap参考 #
cp /etc/fstab /etc/fstab.bak
vi /etc/fstab
#/dev/pve/swap none swap sw 0 0
dd if=/dev/zero of=/data/swapfile bs=1M count=16384
root@pve:/# chmod 0600 /data/swapfile
root@pve:/# mkswap /data/swapfile
Setting up swapspace version 1, size = 16 GiB (17179865088 bytes)
no label, UUID=f5768046-998c-4dfb-a60c-0ff6e73ee1a4
root@pve:/#
vi /etc/fstab
root@pve:/# vi /etc/fstab
root@pve:/# swapon -a

磁盘

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 卸载
umount /mnt/hd1

# 同步磁盘,避免数据未写完整 
sync

# 确认磁盘未被使用
lsof | grep /dev/sda

# 休眠硬盘
hdparm -Y /dev/sda

# 安全断电移除
echo 1 > /sys/block/sda/device/delete

# 查看磁盘信息 (如果没有命令就安装: apt install smartmontools -y)
hdparm -I /dev/sda
# 或
smartctl -i /dev/sda

# 查看硬盘温度
hdparm -H /dev/sda

# 电源模式模式
hdparm -C /dev/sda

# 查看温度信息方法
hdparm -H /dev/sda
# 或
smartctl -A /dev/sda | grep -i temperature


# 禁用 smartmontools.service 避免频繁监控硬盘信息
root@pve:~# systemctl disable smartmontools.service<span style="background-color: rgba(237, 243, 236, 1);">Synchronizing state of smartmontools.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable smartmontools
Removed "/etc/systemd/system/smartd.service".
Removed "/etc/systemd/system/multi-user.target.wants/smartmontools.service"</span><span style="background-color: ;"># 自定义 smartd 检查频率
/dev/sda -a -s L/1/00:00:00
这里-a还是执行所有的e SMART 自检操作,-s L/1/00:00:00中的L表示每天(Daily),1表示每天检查一次,00:00:00表示在每天的午夜(0 点)开始检查。这样smartd就会在每天的午夜对/dev/sda这个硬盘进行一次 SMART 自检。</span>

ZFS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
root@pve:~# zfs get compression,compressratio hdd-pool
NAME      PROPERTY       VALUE           SOURCE
hdd-pool  compression    on              local
hdd-pool  compressratio  1.00x           -
root@pve:~# zfs get all hdd-pool |grep dedup
hdd-pool  dedup                 off                    default
root@pve:~# zfs set dedup=on hdd-pool
root@pve:~# zfs get all hdd-pool |grep dedup
hdd-pool  dedup                 on                     local

# 移除子数据集(原来瞎创建了一个)
root@pve:~# zfs list
NAME              USED  AVAIL  REFER  MOUNTPOINT
hdd-pool          732K  14.4T    96K  /hdd-pool
hdd-pool/vmdata    96K  14.4T    96K  /hdd-pool/vmdata
root@pve:~# zfs unmount hdd-pool/vmdata
cannot unmount 'hdd-pool/vmdata': not currently mounted
root@pve:~# zfs unmount hdd-pool/vmdata
cannot unmount 'hdd-pool/vmdata': not currently mounted
root@pve:~# zfs destroy hdd-pool/vmdata
root@pve:~# zfs list
NAME       USED  AVAIL  REFER  MOUNTPOINT
hdd-pool   636K  14.4T    96K  /hdd-pool


# 原来使用中的磁盘 /dev/sdb /dev/sdc

# 新增的大容量磁盘 /dev/sdd /dev/sde /dev/sdf

# 创建新的存储池
zpool create newZFS raidz1 /dev/sdd /dev/sde /dev/sdf

# 创建快照
zfs snapshot -r zfs@migrate
# 列出快照
zfs list -t snapshot
# 删除快照
# zfs destroy zfs@migrate

# 数据迁移
zfs send -R zfs@migrate | zfs receive -F newZFS

# 删除旧存储池
zpool destroy zfs
# 查看镜像列表
zfs list -t snapshot

# 下面的操作可以忽略, 有强迫症的要 zpool保持原来一直的需要再做一次
# 迁移到临时目录
zpool create -f oldzfs /dev/sdb /dev/sdc
zfs send -R newZFS@migrate | zfs receive -F oldzfs
zpool destroy newZFS
zpool create -f zfs raidz1 /dev/sdd /dev/sde /dev/sdf
zfs send -R oldzfs@migrate | zfs receive -F zfs
zpool destroy oldzfs

# 查看镜像列表
zfs list -t snapshot
zfs destroy zfs@migrate

win10专业版激活

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 以管理员身份运行CMD
slmgr.vbs /upk
slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr /skms zh.us.to
slmgr /ato

# 激活企业版换成这个码,其他一样 slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43
## 企业版如果还是不行,请尝试:
1:W269N-WFGWX-YVC9B-4J6C9-T83GX
2:NYW94-47Q7H-7X9TT-W7TXD-JTYPM
3:PBHCJ-Q2NYD-2PX34-T2TD6-233PK
4:DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
5:FWN7H-PF93Q-4GGP8-M8RF3-MDWWW

安装ImmortalWrt

编译ImmortalWrt

打开🔗https://firmware-selector.immortalwrt.org/?version=23.05.4&target=x86%2F64&id=generic

复制下面自要自定义添加的软件(根据自己需求添加软件即可,如果自己还想添加其他固件,在这个仓库搜索想要添加的固件https://mirrors.vsean.net/openwrt/releases/23.05.4/packages/x86_64/luci/?sort=size&order=desc),粘贴到预安装的软件包后面,注意要有空格隔开。点击开始构建,等构架完成后下载。版本选择: COMBINED-EFI (SQUASHFS-COMBINED-EFI.IMG.GZ)

1
luci-i18n-firewall-zh-cn luci-i18n-filebrowser-zh-cn luci-app-argon-config luci-i18n-argon-config-zh-cn luci-i18n-opkg-zh-cn luci-i18n-ttyd-zh-cn luci-i18n-passwall-zh-cn luci-app-openclash luci-i18n-homeproxy-zh-cn openssh-sftp-server

导入PVE安装

前面有记录虚拟机创建,这里只简单记录一些重要笔记

1
2
3
4
5
6
7
8
# 导入镜像
qm importdisk 101 /var/lib/vz/template/iso/openwrt-23.05.5-x86-64-generic-squashfs-combined-efi.img local --format=qcow2

# 编辑网络
/etc/config/network

# 重启网络
/etc/init.d/network restart

——————–1. 网络拓扑图不一样,导致openwrt配置不一样 2. 硬件不一样,导致Openwrt配置不一样,比如有单网口,有多网口 3. 关于Openwrt做旁路由、主路由存在争议,选自己合适的 4. Openwrt版本不同,一些配置也不一样 5. 关于科学上网,openclash配置更是五花八门,只需要记住一点,【备份⇒花式修改配置⇒保存⇒看看问题有没有解决⇒备份】(没办法,太难了,需要大量的网络知识储备,网路大佬直呼easy)

——————–### 设置旁路网关

  1. 在“网络”-“接口”的“常规设置”中给Openwrt的 LAN 网络接口设置一个和现有局域网同网段的静态 IP 地址,注意不要和现有设备的 IP 地址冲突。然后应用设置。
  2. 将 LAN 网络接口的“默认网关”设为主路由的 IP 地址。
  3. 在“高级设置”中找到“使用自定义的 DNS 服务器”设为主路由的 IP 地址。
  4. 在“DHCP 服务器”中勾选“忽略此接口”。
  5. 在“DHCP 服务器”-“IPv6 设置”中禁用所有IPv6服务。
  6. 点击“保存”以及“保存并应用”。
  7. 在“网络”-“防火墙”中,关闭“SYN-flood 防御”,点击“保存并应用”。
  8. 建议重启一次。

需要科学的网络设置

IP改成同一个网段内地址,路由器和DNS也改成Openwrt``IP

OpenWrt推荐阅读

推荐特别好的一篇文章:https://sspai.com/post/68511

关于openclash的相关配置参考:https://github.com/Aethersailor/Custom_OpenClash_Rules/wiki/OpenClash-设置方案

https://easonyang.com/posts/transparent-proxy-in-router-gateway/

📎 参考文章

Licensed under CC BY-NC-SA 4.0
最后更新于 Mar 26, 2025 10:32 CST