搭建pve环境
1 安装pve
- iso 写入 U 盘,这里的 pve 版本是
proxmox-ve_7.4-1.iso
- 从 U 盘启动电脑
- 插好网线,安装 pve,设置好局域网 ip
2 初始设置
-
取消企业订阅
mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak
-
Proxmox 软件源更换
echo "deb https://mirrors.nju.edu.cn/proxmox/debian bullseye pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
-
Debian 系统源更换
sed -i.bak "s#ftp.debian.org/debian#mirrors.aliyun.com/debian#g" /etc/apt/sources.list sed -i "s#security.debian.org#mirrors.aliyun.com/debian-security#g" /etc/apt/sources.list apt update && apt-get install -y apt-transport-https ca-certificates --fix-missing
-
lxc 源更新
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm systemctl restart pvedaemon.service
-
安装常用软件
apt install -y vim lm-sensors net-tools wireless-tools wpasupplicant
-
其它环境设置
# 设置ll命令 vim $HOME/.bashrc # 加入下面两条文本 alias ls='ls --color=auto' alias ll='ls -lh --color=auto' # 使配置立刻生效 source $HOME/.bashrc # 设置合盖不睡眠(针对笔记本) vim /etc/systemd/logind.conf 把 #HandleLidSwitch=suspend 改为 HandleLidSwitch=ignore # 然后重启 reboot
3 pve 防火墙配置
如果用过腾讯云或者阿里云的话,可以将其理解为在系统外额外添加的一层防火墙,和系统内部防火墙共同发挥作用
pve 有三种防火墙:数据中心、节点、虚拟机。虚拟机很好理解,节点其实就是 pve 主机,然后一个数据中心下会挂着多个节点,对于普通用户来说,就只会存在一个节点(即 pve 主机),然后一个节点下面挂着多个虚拟机
然后要使节点防火墙生效,需要同时开启数据中心和节点的防火墙;要使虚拟机防火墙生效,需要同时开始数据中心和虚拟机的防火墙。可见要使用防火墙功能,数据中心防火墙是必须开启的。
对于虚拟机的防火墙,正常情况下都是设置 iptables 来进行限制。不过 pve 这里比较特殊,需要在虚拟机处开启防火墙,并在硬件处勾选防火墙,才能应用上 iptables 规则,否则没用。这里有两层限制,一是 pve 对虚拟机设置的访问限制,这个可以通过网页或者配置文件调整,二是 iptables 规则设置的访问限制,都通过了才会放行。个人觉得没特殊需求的话,还是直接用 pve 提供的防火墙,更为方便
pve防火墙配置文件路径在/etc/pve/firewall/
个人建议防火墙这么配置
- 开启数据中心、节点、虚拟机的防火墙,默认拒绝进入、允许出去
- 数据中心设置安全群组,加上一套白名单,存放允许访问 pve 主机以及任意虚拟机的 ip 集合
- 数据中心防火墙处放行白名单
- 各个虚拟机防火墙处放行白名单,并开放各自的公共服务端口
4 pve 备份与恢复
官方提供了教程,地址是 https://pve.proxmox.com/wiki/Upgrade_from_7_to_8
个人优化了下,流程大致如下
- pve 网页端数据中心配置定期备份,备份所有的虚拟机,然后linux 端写定时任务定期备份 /etc 下所有内容
- 虚拟机定期备份重要数据,比如
/home /root /etc /var/spool/cron/crontabs
这几个路径 - 步骤 1、2 处得到的数据定期备份到外置硬盘,并同步到云盘。为防止云盘的和谐,可以用 Rclone crypt 加密后进行上传
- 重新安装系统
- 清空浏览器缓存
- 用备份文件中的配置覆盖新系统的,涉及以下几个路径
/etc/pve/storage.cfg
、/etc/pve/firewall/
、/etc/pve/nodes/<node>/host.fw
- 使用备份文件恢复所有的虚拟机
5 直通硬盘
虽然 pve 主机可以直接访问所有的硬件,但是为了稳定性考虑一般会把服务放在虚拟机中,这样就算出错也只会影响到当前的虚拟机,而不会把整个 pve 环境搞崩掉。所以需要让虚拟机也可以访问到这些硬件,从而让各个服务使用。
5.1 RDM直通(裸磁盘映射)
这种方式比较简单,性能也还可以。
举个例子,假如我要把一块外接的三星 T7 硬盘直通给虚拟机,步骤如下
-
pve 主机 linux 端检查硬盘列表
ls -la /dev/disk/by-id/|grep -v dm|grep -v lvm|grep -v part # 结果大概如下 drwxr-xr-x 2 root root 540 Mar 15 20:02 . drwxr-xr-x 7 root root 140 Mar 15 20:02 .. lrwxrwxrwx 1 root root 13 Mar 15 16:38 nvme-PM961_NVMe_SAMSUNG_256GB__S364NX0JA10277 -> ../../nvme0n1 lrwxrwxrwx 1 root root 13 Mar 15 16:38 nvme-eui.002538ba71b4fdd8 -> ../../nvme0n1 lrwxrwxrwx 1 root root 9 Mar 15 20:02 usb-Samsung_PSSD_T7_S6TWNS1RC08642R-0:0 -> ../../sda
-
直通三星 T7 给虚拟机 100
qm set 100 -scsi1 /dev/disk/by-id/usb-Samsung_PSSD_T7_S6TWNS1RC08642R-0:0 # 命令格式如下,X为当前尚未被占用的位置,类似的,可以用-sataX或者-ideX,只不过根据网上的说法,scsi性能最好 # qm set 虚拟机ID -scsiX /dev/disk/by-id/硬盘列表返回的说明
-
取消直通
qm set 100 --delete scsi1
-
注意直通后需要到对应虚拟机硬件对应硬盘取消备份(高级选项可见),否则备份时会报错
顺便提供下测试磁盘读写能力的脚本,用来判断各种方案的损耗,方便选择最优的
# 先在待测试磁盘下创建一个空文件
cd /磁盘路径 && touch testReadOrWrite && touch testReadAndWrite
# 测试磁盘的写入能力,写入1G内容
dd if=/dev/zero of=./testReadOrWrite bs=8k count=125000
# 测试磁盘的读取能力,读取1G内容
dd if=./testReadOrWrite of=/dev/null bs=8k count=125000
# 测试磁盘的读写能力,读写1G内容
dd if=./testReadOrWrite of=./testReadAndWrite bs=8k count=125000
5.2 挂载 nfs
这个也算是能让虚拟机使用外接硬盘的一种方案,简单提一下吧,方法就是 pve 主机上搭建一个 nfs 服务,把挂载的硬盘共享出去,方便其它虚拟机操作硬盘
# 宿主机安装nfs服务
apt-get install nfs-kernel-server
# 创建目录并给其设置权限,注意一定要是777,否则客户端挂载读写会出问题
mkdir 共享目录路径 && chmod 777 共享目录路径
# 编辑配置文件
vim /etc/exports
# 尾部加入以下配置
共享目录绝对路径 允许使用的IP,可以是IP段(rw,sync,insecure,no_subtree_check,no_root_squash)
# 使配置生效
systemctl restart nfs-kernel-server
# 客户端使用nfs服务
apt-get install nfs-common
mount -t nfs 服务端地址:要挂载的共享目录 本地挂载路径
我自己拿固态的测试结果如下表
写入 | 读取 | 读写 | |
---|---|---|---|
pve主机本地磁盘 | 653 MB/s | 5.9 GB/s | 606 MB/s |
虚拟机本地磁盘 | 552 MB/s | 5.6 GB/s | 537 MB/s |
虚拟机挂载主机nfs | 457 MB/s | 321 MB/s | 428 MB/s |
可以看到,pve 虚拟机相对于主机的读写能力,差不多下降了十分之一,因此虚拟机磁盘性能其实是有损耗的
而经过 nfs 挂载的磁盘,则是下降三分之一,特别是读取能力,直接变为十分之一,因此,如果是为了性能考虑的话,可以改成虚拟机直通外接盘的方式,而不是宿主机先挂载再通过 nfs 分享
不过,从实际应用场景来说,貌似这个速度也够用,反正2.5G的内网速度还是跟不上 nfs 挂载盘的读写速度的
6 磁盘空间扩展
在 pve 中,若虚拟机空间不够,可以后续进行增加,但是增加后可能会发现可用空间未变大,这个可能是逻辑卷只使用了一部分空间的缘故,要确定这个,可以通过以下步骤
-
确认物理卷和逻辑卷的大小,可以通过下面指令观察物理卷和逻辑卷大小
# 输出物理卷和逻辑卷大小 sudo fdisk -l # 输出逻辑卷大小 df -h
假设得到以下输出,为方便分析,省略了一部分
user@homeserver:~$ sudo fdisk -l ... Disk /dev/sda: 60 GiB, 64424509440 bytes, 125829120 sectors Disk model: QEMU HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: F7D28B52-D513-4798-BC32-EC077F1859ED Device Start End Sectors Size Type /dev/sda1 2048 4095 2048 1M BIOS boot /dev/sda2 4096 4198399 4194304 2G Linux filesystem /dev/sda3 4198400 104855551 100657152 48G Linux filesystem Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 23.102 GiB, 25765609472 bytes, 50323456 sectors user@homeserver:~$ user@homeserver:~$ user@homeserver:~$ df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 795M 1.5M 794M 1% /run /dev/mapper/ubuntu--vg-ubuntu--lv 24G 11G 13G 46% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda2 2.0G 209M 1.6G 12% /boot /dev/loop1 64M 64M 0 100% /snap/core20/2182 /dev/loop2 92M 92M 0 100% /snap/lxd/24061 /dev/loop0 64M 64M 0 100% /snap/core20/1828 /dev/loop4 40M 40M 0 100% /snap/snapd/21184 /dev/loop3 50M 50M 0 100% /snap/snapd/18357 tmpfs 795M 0 795M 0% /run/user/1000
通过
/dev/sda3 4198400 104855551 100657152 48G Linux filesystem
确认物理卷大小为48G通过
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 23.102 GiB, 25765609472 bytes, 50323456 sectors
确认逻辑卷大小为23.1G,与df -h
输出中的/dev/mapper/ubuntu--vg-ubuntu--lv 24G 11G 13G 46% /
差不多一致并且可以判断,总空间60G还有差不多10G未分配
以及逻辑卷名称为
/dev/mapper/ubuntu--vg-ubuntu--lv
-
拓展逻辑卷,使其达到物理卷的大小
# 查看未分配给逻辑卷的空间,可以通过观察下面命令输出中的 "Free PE / Size" 一行确认 sudo vgdisplay # 拓展逻辑卷 sudo lvextend -l +100%FREE 逻辑卷名称 # 确认根文件系列类型,观察type字段便可以确认 df -T / # 调整文件系统大小,如果根文件系统是 ext4 类型,使用下面命令 sudo resize2fs 逻辑卷名称
7 降频减噪音
如果小主机性能比较强,且散热比较弱,导致噪音大,可以考虑降低功耗来减轻声音,操作步骤如下
-
安装安装 ryzenadj,项目地址
https://github.com/FlyGoat/RyzenAdj
cd ~ && mkdir ryzenadj && cd ryzenadj apt install -y build-essential cmake libpci-dev git git clone https://github.com/FlyGoat/RyzenAdj.git cd RyzenAdj rm -r win32 mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. make if [ -d ~/.local/bin ]; then ln -s ryzenadj ~/.local/bin/ryzenadj && echo "symlinked to ~/.local/bin/ryzenadj"; fi if [ -d ~/.bin ]; then ln -s ryzenadj ~/.bin/ryzenadj && echo "symlinked to ~/.bin/ryzenadj"; fi
-
运行软件
/root/ryzenadj/RyzenAdj/build/ryzenadj --stapm-limit=12000 --fast-limit=12000 --slow-limit=12000 # 查看限制结果 ./ryzenadj --info
-
由于重启后失效,可以设置脚本,让其开机时自动添加限制,修改文件
vim /etc/rc.local
,写入以下内容,并在exit 0
前写入要执行的命令#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Your command here # 开机自动限制功耗 /root/ryzenadj/RyzenAdj/build/ryzenadj --stapm-limit=12000 --fast-limit=12000 --slow-limit=12000 exit 0
-
使自启动脚本生效
chmod +x /etc/rc.local