基于PVE搭建一个“家里云”
前情提要:
家里云这种东西其实也可以称为一种私人服务器,因为它是依靠着家庭宽带和充当服务器的主机(电脑)来运行的
对我自己来说,从最开始的在NAS上运行docker容器,因为功能太少而更换了实体机装Linux,又因为东西太多而不得不迁移到虚拟化平台上,相比于VMware ESXI,PVE对我们来说安装比较方便(因为驱动导致的兼容性问题更少)
PVE全称“Proxmox Virtual Environment”,是基于Debian的一个虚拟化平台
以下文章内引用了多篇我自己在安装时参考的文章,如有侵权请联系我删除
首先是硬件选择
我自己用过的PVE版本,分别是:
系统版本 8.1.4(内核Linux 6.5.13-1-pve)
系统版本 8.2.2(内核Linux 6.8.12-1-pve)
系统版本 8.3.5(内核Linux 6.8.12-8-pve) - SRIOV 还未适配(2025.03.27)
PVE官方建议的系统要求:
推荐硬件
带有 Intel VT/AMD-V CPU 标志的 Intel EMT64 或 AMD64。
内存,至少 2 GB,用于操作系统和 Proxmox VE 服务。以及为客人指定的内存。对于 Ceph 或 ZFS,需要额外的内存,每使用存储大约 1 GB 内存。
快速冗余存储,SSD 磁盘效果最佳。
操作系统存储:具有电池保护写入缓存 (“BBU”) 的硬件 RAID 或具有 ZFS 和 SSD 缓存的非 RAID。
VM 存储:对于本地存储,请使用具有电池供电写入缓存 (BBU) 的硬件 RAID 或 ZFS 的非 RAID。ZFS 和 Ceph 都与硬件 RAID 控制器不兼容。共享和分布式存储也是可能的。
冗余 Gbit NIC,根据首选存储技术和集群设置的其他 NIC – 还支持 10 Gbit 和更高。
对于 PCI(e) 直通,需要带有 VV/AMD-D CPU 标志的 CPU。
最低硬件要求(仅用于测试)
CPU:64 位(Intel EMT64 或 AMD64)
支持 Intel VT/AMD-V 的 CPU/主板(用于 KVM 完全虚拟化支持)
最低 1 GB RAM
硬盘
1 个 NIC
系统的安装:
在这里我是用的官方提供的安装镜像进行的安装
你也可以在Debian上自行安装PVE,参考:https://pve.proxmox.com/wiki/Installation
准备工作
大于 2G 的 U 盘(存放 Proxmox Virtual Environment ISO 镜像)
刻录工具( 推荐 balenaEtcher ) 点击下载
Proxmox Virtual Environment ISO 镜像 点击下载
SSH 登录工具 FinalShell(支持 MacOS、Windows)点击下载
安装步骤
首先下载并准备好相应的工具
将下载好的PVE镜像写入U盘(我自己用的是Rufus,需要的话可以自行下载)
找到插入的U盘,选择下载好的镜像
中间会跳一个弹窗,直接确定就行
完成以后是这样
写盘完成后,插入待安装的主机
在BIOS中将U盘设置为第一启动项,同时开启 VT-d 和 SR-IOV(如果有的话),保存并启动机器,然后进入安装界面(记得装上显示器和键鼠)
安装过程
选择第一个Install Proxmox VE (Graphical),按回车
开始跑代码,要的时间看机器配置,这个时候什么都不用动,跑完了会出现使用协议页面,点击 I agree(我同意)
选择pve安装的硬盘,然后继续点击Next(下一步)
设置国家、时区、键盘布局,然后点击Next(下一步)
设置密码、和邮箱,继续点击Next(下一步)
设置网卡、域(保持默认即可)、PVE管理地址、网关、DNS等,继续点击Next(下一步)
在配置详情中检查配置信息是否有误,没有问题点击Install(安装)
移除U盘,然后点击Reboot重启机器
到这里PVE就安装完了,然后就是一堆的优化设置
PVE的优化设置
优化设置
设置直通及换源
已经测试的支持内核范围 6.5.13-3-pve ~ 6.8.12-1-pve ,具体看项目支持情况(2025.03.27)
【去除 PVE 的登录弹窗】
Proxmox VE 6.3 / 6.4 / 7.0 / 7.1 / 7.2 / 7.3 / 7.4 / 8.0 / 8.1 去掉未订阅的提示
注意:去除订阅弹窗提醒以后,必须清除浏览器的缓存数据(清理浏览器缓存)后生效
sed -i_orig "s/data.status === 'Active'/true/g" /usr/share/pve-manager/js/pvemanagerlib.js
sed -i_orig "s/if (res === null || res === undefined || \!res || res/if(/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
sed -i_orig "s/.data.status.toLowerCase() !== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy
【更换 PVE 源】
非必须
wget https://v2rayssr.com/tool/yuan.sh -O yuan.sh && chmod +x yuan.sh && ./yuan.sh
【直通 PCIe 设备】
若你是想开启核显的 SR-IOV (需要支持的 CPU ),请使用如下命令直通 PCIE 设备:
i915.max_vfs=3 这里的 3 是需要虚拟的核显数量,需要和下面的数量相同:
sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c\GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream i915.enable_guc=3 i915.max_vfs=3"' /etc/default/grub
echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" | tee -a /etc/modules
update-grub
update-initramfs -u -k all
reboot
若你的 CPU 不支持 SR-IOV,或是不想开启 SR-IOV,请使用如下命令直通 PCIE 设备:
sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c\GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream"' /etc/default/grub
echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" | tee -a /etc/modules
update-grub
update-initramfs -u -k all
reboot
【检验 PCIE 直通结果】
Shell 窗口输入 lspci ,回显如下(里面包含你所有的 PCIe 设备列表)
【开启核显的 SR-IOV】
什么是SR-IOV?这里引用 Oracle 的说明 SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。SR-IOV 规范定义了新的标准,根据该标准,创建的新设备可允许将虚拟机直接连接到 I/O 设备。 简单来说,允许将一个PCIe设备虚拟化成多个设备,且每个虚拟化出来的设备都可以获得与物理设备相近的性能 如果显卡开启SR-IOV就可以给多台虚拟机同时配上显卡 网卡之类的设备也支持SR-IOV,但是不如显卡这么有用(毕竟虚拟化出来的网卡性能也没差多少,还不需要自己安装驱动)
在以下的 SR - IOV 设置中,请开启 PVE 的外网访问(需要访问 GitHub )
具体命令如下,如果实在搞不明白,可以看这个视频
#2024-09-04 支持内核 6.8
#Proxmox VE 主机推荐内核范围:proxmox-kernel-6.5.13-3-pve ~ 6.8.12-1-pve
uname -r # 已经测试的支持内核范围 6.5.13-3-pve ~ 6.8.12-1-pve ,具体看项目支持情况
# 更换源(可选,但是推荐更换)
wget https://v2rayssr.com/tool/yuan.sh -O yuan.sh && chmod +x yuan.sh && ./yuan.sh
# 更新源
apt update -y
# 更新内核,若刚才 uname -r 的内核版本过小,可以更新内核!更新后,内核大于 6.8.12-1 的情况还未尝试
apt upgrade -y # 更新内核以后,必须重新启动!(大的更新,都是推荐重启)
reboot
# 更新到最新,但是前提内核不能超过GitHub项目的最新版本(更多内核没进行测试而已)。6.8.12-1
# 后续避免升级内核
uname -r # 已经测试的支持内核范围 6.5.13-3-pve ~ 6.8.12-1-pve ,具体看项目支持情况
apt install build-* dkms git sysfsutils -y
apt install proxmox-headers-$(uname -r) proxmox-kernel-$(uname -r)
cd ~
git clone https://github.com/strongtz/i915-sriov-dkms.git
cd ~/i915-sriov-dkms
dkms add .
dkms install -m i915-sriov-dkms -v $(cat VERSION) --force
lspci | grep VGA # 请记录当前的核显ID,修改下行的ID后执行下面的代码。
# sriov_numvfs = 3 这里的 3 是需要虚拟的核显数量,需要和上面的数量相同
echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 3" > /etc/sysfs.conf
reboot
重启之后,在 SHELL 窗口输入 lspci | grep VGA
,回显如下所示,SR-IOV 开启成功,成功虚拟出了 7 个核显。
参考文章:https://bozai.me/pve.html
功能性设置(可选)
开启IPv6
PVE 本身也是默认开始了 IPv6 配置和转发的,我们只需要使用如下命令自动配置 SLAAC IPv6 地址即可:
echo "net.ipv6.conf.all.accept_ra=2" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.accept_ra=2" >> /etc/sysctl.conf
echo "net.ipv6.conf.vmbr0.accept_ra=2" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.autoconf=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.autoconf=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.vmbr0.autoconf=1" >> /etc/sysctl.conf
然后重启 PVE 后即可看到我们的 IPv6 公网地址了:
ip a|grep inet6
安装 ddns-go
因为 DDNS-GO 是目前比较好用的 DDNS 解析工具,考虑到 PVE 底层就是 Debian,我们使用 Docker 来部署 DDNS-GO 会更加简单方便一点,
PVE 安装 Docker 也比较简单方便,使用官方脚本即可一键安装了(注意,这个在你没换源的情况下大概率是用不了的,请自备环境):
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
Docker 安装 DDNS-GO
安装好 Docker 的话,使用如下命令即可部署搭建出 DDNS-GO 服务:
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
使用方法请自行搜索啦
参考文章:https://pve.sqlsec.com/8/3/
额外的状态显示
我自己用的是恩山找来的的一键脚本
(curl -Lf -o /tmp/temp.sh https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh || curl -Lf -o /tmp/temp.sh https://mirror.ghproxy.com/https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh) && chmod +x /tmp/temp.sh && /tmp/temp.sh remod
运行完成后效果如图
删除 local-lvm 并合并空间至 local
如果你觉得local-lvm 和 lvm 两个分区容易造成空间浪费,可以合并成一个
备份虚拟机
删除虚拟机
删除local-lvm
命令:
lvremove pve/data
把local-lvm空间分配给Local
命令:
lvextend -l +100%FREE -r pve/root
resize2fs /dev/mapper/pve-root
删除local-lvm
登陆网页管理页面,路径:数据中心 - 存储 - 删除local-lvm
编辑local,内容里添加“磁盘映像和容器”,保存
恢复虚拟机
参考文章:https://www.cnblogs.com/neza/p/17598392.html
设置IP变更自动重启
这个是自己糊的代码,直接看 GitHub 页面吧
项目地址:GitHub - LinineTy/New-IP-restart
如果你无法访问 GitHub 或访问比较困难,可以在下面直接下载文件包,参考里面的 README.md 使用
文件包:NewIP-Reboot.zip
暂时就这些,到时候如果有新东西的话再补上