PVE安装后的一些配置
本文基于Proxmox Virtual Environment 7.4
1、镜像写入
使用的工具是UltraISO
写入方式选择RAW
2、换源
使用清华源
① 软件源
1 | sed -i 's|http://ftp.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian/|g' /etc/apt/sources.list |
② CT Templates
备份源文件
1 | cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back |
换源
1 | sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm |
生效
1 | systemctl restart pvedaemon.service |
③ 禁用企业源
1 | sed -i 's|deb https://enterprise.proxmox.com/debian/pve|# deb https://enterprise.proxmox.com/debian/pve|g' /etc/apt/sources.list.d/pve-enterprise.list |
3、去除订阅弹窗
备份原文件以 .backup
结尾并修改原文件
1 | sed -i.backup -z "s/res === null || res === undefined || \!res || res\n\t\t\t.data.status.toLowerCase() \!== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js |
重启服务
1 | systemctl restart pveproxy.service |
4、配置无线
① 设置无线
我的网卡是 Intel® Dual Band Wireless-AC 3165,进入系统默认就能看到我的无线设备接口: wlo1
,驱动已经有了
1 | ip link show |
安装以下包
1 | apt install wireless-tools wpasupplicant |
设置无线密码
1 | vim /etc/wpa_supplicant/wpa_supplicant.conf |
内容如下,可以配置多个 ssid
1 | ctrl_interface=/run/wpa_supplicant |
如果只是想使用无线访问管理后台,编辑配置文件 /etc/network/interfaces
增加以下配置
1 | auto wlo1 |
重载配置即可
1 | ifreload -a |
② 配置无线nat规则
如果希望既可以通过有线网络为虚拟机分配ip,又可以通过无线网络为虚拟机分配ip,则需要加入以下配置(无线下使用的是nat)
设置 nftables
1 | vim /etc/nftables.conf |
末尾加入nat转换规则,将内网的IP地址转换为外网IP地址
1 | table ip nat { |
启用 nftables
服务
1 | systemctl enable nftables.service |
编辑配置文件 /etc/network/interfaces
以下是我原来的
1 | auto lo |
修改以后
1 | auto lo |
重载网络
1 | ifreload -a |
再补充一点,上面的配置是有线无线可以同时使用,但是如果只使用无线,断开有线,PVE有IP地址但是无法访问,我的解决方案是修改vmbr0
,改为DHCP上网
1 | auto vmbr0 |
参考图(网卡要全部设置为自动启动)
5、创建虚拟机
① 网络
创建虚拟机的时候,如果使用无线网络,需要注意以下网络配置,手动配置ip地址,网关为 10.1.1.1
如果其它设备想直接访问 PVE 内部的虚拟机,比如说通过10.1.1.1,10.1.1.2等直接访问宿主机和各个虚拟机(以下同样是关于无线网络部分的补充)
在家里路由器上新增一条静态路由规则
- 目的网络地址:10.1.1.0
- 子网掩码:255.255.255.0
- 网关地址:192.168.2.41
其中网关地址:192.168.2.41
为PVE宿主机通过无线,在路由器获取的ip
目的网络地址为上面自行设置的网段:10.1.1.0/24
之后就可以通过10.1.1.1,10.1.1.2等直接访问宿主机和各个虚拟机了
补充一点
上面的访问服务方式是通过内网IP+端口访问服务,比如:10.1.1.2:8080
,如果通过PVE宿主机的IP,192.168.2.41:8080
则无法访问服务。
如果有公网IP地址,希望可以实现外网访问,可以在PVE宿主机加入以下nat转换规则
将通过wlo1网卡的tcp流量,访问8080端口转发到10.1.1.2,这样通过 192.168.2.41:8080
一样也可以访问虚拟机内的服务了(重启失效)
1 | iptables -t nat -A PREROUTING -i wlo1 -p tcp --dport 8080 -j DNAT --to-destination 10.1.1.2 |
② Docker
如果LXC容器需要安装使用docker,只需要保证创建虚拟机的时候勾选了无特权的容器,开启了嵌套即可。(默认就是这样,不需要其它改动)
6、启用 IOMMU
未启用,需要手动开启(BIOS已经开启了VT-D)
Intel CPU,使用GRUB引导(默认),执行以下命令(加入了开启PT模式)
1 | sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet"/GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"/g' /etc/default/grub |
更新 grub
1 | update-grub |
查看 /etc/modules
下是否有以下模块,没有则添加
1 | vfio |
更改任何相关模块后,需要刷新 initramfs
1 | update-initramfs -u -k all |
重启系统验证 IOMMU 是否已启用
1 | dmesg | grep IOMMU |
root@pve:~# dmesg | grep IOMMU
[ 0.039715] DMAR: IOMMU enabled
7、一些额外补充
① 调整CPU的运行模式
1 | apt install cpufrequtils |
通过输入命令 cpufreq-info
,在输出的最后可以看到CPU当前的运行模式,频率的范围,当前的CPU频率
current policy: frequency should be within 800 MHz and 2.50 GHz.
The governor “ondemand” may decide which speed to use
within this range.
current CPU frequency is 844 MHz.
通过输入命令
1 | cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors |
查看可选的CPU模式
通过输入命令
1 | cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor |
查看当前的调节器
可选的CPU模式
- conservative:这种模式类似于ondemand模式,但是它会对CPU频率进行相对缓慢的调整,以达到更平滑的性能和更长的电池寿命。Google官方内核,kang内核默认模式。
- ondemand:这是系统默认的模式,它根据CPU的负载情况来动态地调整频率。在CPU负载较高时,频率会升高以提供更好的性能,而在CPU负载较低时,频率会降低以节省能源。一般官方内核默认的方式都是Ondemand。
- userspace:这种模式将变频策略的决策权交给用户态应用程序,这样用户可以根据自己的需求自定义CPU频率。
- powersave:这是一种省电模式,CPU通常以最低频率运行,以节省电能。这种模式适用于电池电量较低或需要长时间使用电池的场景。
- performance:这是一种性能模式,CPU会一直运行在最高频率,不考虑电量消耗。这种模式适用于需要最高性能的场景,如游戏或视频编辑等。
- schedutil:这是一个新的交互模式,它被认为是interactive模式的升级版。它可以根据负载情况和其他因素来自动调整CPU频率,以达到更好的性能和更长的电池寿命。
修改文件 /etc/init.d/cpufrequtils
,大约在43行位置
ENABLE=”true”
GOVERNOR=”ondemand”
MAX_SPEED=”0”
MIN_SPEED=”0”
重启服务
1 | systemctl daemon-reload |
将默认的 ondemand
改为了 conservative
,实测功耗并没有什么变化,但是调度很慢,我觉得用作软路由的话不推荐这个模式。
② 无特权的容器映射目录
因为创建docker时候使用的是无特权的容器,在宿主机使用命令
创建一个 mp0
的挂载点,将宿主机内的/mnt/share/
目录映射到LXC容器中的/share
目录
1 | pct set 100 -mp0 /mnt/share/,mp=/share |
会出现LXC容器中映射出来的目录都被映射到 nobody
(uid=65534),在容器内没有修改这个目录的权限
root@ubuntu:~# ls -ld /share/
drwxr-xr-x 3 nobody nogroup 4096 Mar 29 03:42 /share/
这里可以参考PVE官方文档:Using local directory bind mount points,将容器内的用户和组ID,需要映射到主机上的ID
通过查看宿主机root的默认从属用户
1 | cat /etc/subgid |
root@pve:~# cat /etc/subgid
root:100000:65536
可以看到root的默认从属用户起始id为100000,数量65536个
默认lxc容器内root(id=0)映射为宿主机的 id 100000,递增65536个,即LXC容器内用户id 0-65535对应服务器100000-165535
root@ubuntu:~# id
uid=0(root) gid=0(root) groups=0(root)
开始修改
在宿主机上修改LXC容器配置文件
1 | vim /etc/pve/lxc/100.conf |
加入以下映射
1 | # 将lxc容器中 id 0到1005 映射为宿主机 id 100000到101005 |
因为 LXC 是使用 root 用户创建的 CT,需要修改宿主机的/etc/subuid
、/etc/subgid
,将宿主机上的UID 1005映射到容器内的UID 0,并允许root用户在容器内使用该UID
在宿主机上执行命令
1 | bash -c 'echo "root:1005:1" >> /etc/subuid' |
最后,修改宿主机上绑定挂载点目录的所有者,以匹配LXC容器可访问的 uid 和 gid:
1 | chown -R 1005:1005 /mnt/share |
重启容器,再次查看
root@ubuntu:~# ls -ld /share/
drwxr-xr-x 4 1005 1005 4096 Mar 29 04:27 /share/
③ 网卡驱动
我的有线网卡是8111,默认安装的驱动是 r8169
的驱动,可以通过命令查看
有说默认驱动的性能不行,如果有需要的话可以试试
1 | lspci -knn | grep -A 3 Ethernet |
如果想将驱动从 r8169
更改为 r8168
,需要从官方下载源码自己编译
官网驱动程序源码:Realtek PCIe FE / GBE / 2.5G / Gaming Ethernet Family Controller Software
解压,进入源码目录
1 | tar -jxvf r8168-8.051.02.tar.bz2 |
编译还需要安装对应版本的 pve-headers,可以通过以下命令
1 | apt search $(uname -r) |
搜索符合自己要求的版本(没有类似于 pve-headers-5.15.102-1-pve_5.15.102-1_amd64
开头的文件的话,直接去源里面找,比如 bullseye 的清华源),然后安装
安装编译需要的工具
1 | apt install make gcc -y |
先执行一下编译
1 | make && make install |
没有出现报错,执行安装脚本(直接连接主机操作)
1 | ./autorun.sh |
安装结束后查看驱动是否替换成功
1 | lspci -vvv | grep r816 |
root@pve:~# lspci -vvv | grep r816
Kernel driver in use: r8168
Kernel modules: r8168