Enjoy your life

AEnjoy’s Blog

ProxmoxVE 7.x 换源及更新系统内核以提升IntelN5105机器的整体稳定性

换源加快PVE更新/下载包速度,更新内核和Intel微码提升天坑N5105工控机跑PVE虚拟机的稳定性

康耐信N5105 0x0步进第一版i225-v3

本文阅读约12分钟。

本文最后更新于2023-5-8 23:26:13 版本v2。

一.N5105机器自身问题带来的噩梦

我手上有两台N5105工控机,一台是康耐信的,一台是畅网的。

前者用来跑虚拟化,简直是噩梦,后者裸机单跑CatWrt(OpenWrt),两台设备都是第一版N5105设备。如果你不使用虚拟化技术,那么本文对你参考意义不大。

说说我2022年10月左右玩虚拟化遇到的问题吧

1.Windows Server 2022:网卡直通失败

2.PVE异常

后来,实在忍受不了N5105的虚拟化问题,在网上看到大家都抱怨N5105虚拟化稳定性后,我选择了单跑了近半年的OpenWrt。直至看了网友们说的,新版本固件软件都优化了,遂于五一节重新搞起了虚拟化,确实坑变少了许多。最核心的解决方案还是更换硬件,如果不能更换,那用软件精修一下毛坯房也不是不行(

2023-5-8 23:19:37 更新: 目前所有的虚拟机已经稳定运行四天,PCDN也保持了四天在线的记录。

N5105虚拟化的问题

看了网上很多关于IntelN5105虚拟化踩坑的帖子,无外乎就是这两点:

虚拟机死机,PCIe设备直通失败

目前给出的回复大致都是这样的

第一版N5105工控机存在缺陷(他们往往配置的都是i225-v3网卡,CPU步进0x0),如果是第一代,还是放弃直通吧,真没办法(

问题列表:

1.虚拟机频繁死机,重启

2.Host死机,未响应

3.网卡直通错乱(i226一般没这个问题)

4.无网络

5.管理页面打不开

6.虚拟机无法重启,只能关闭PVE重新启动设备。

在没有更新系统前,我的OpenWrt虚拟机一天死机一次,网心云x86几个小时就死机一次,更新后两者都已经稳定运行两天多了(5-5到5-7)

CatWrt稳定运行

第三版及之后的,由于使用了更新的BIOS固件,更新的CPU,以及改善的i226,解决了很多问题。据chiphell论坛网友们的评论,基本上解决了N5105虚拟化死机和直通异常的问题。

查看自己的硬件在不在天坑里

最简单的,在你购买的渠道询问:这是第几版的N5105工控机 如果卖家回答你:第一版的

那么,恭喜你!中奖了 !早期天坑版本。

或者是查看商品信息,一般会写着网卡型号:如果是i255,一般是第一版的;i226一般是较新的,但不好判断,主要还是得手动查看。

一般来说,只有第一版的N5105是0x0CPU步进的,非常容易辨识。

在Linux终端里输入如下命令

1
cat /proc/cpuinfo | grep stepping

如果输出的有

1
stepping        : 0

那么,恭喜你!中奖了 !早期天坑版本。

天坑们往往会携带着又一天坑网卡:I225-V (rev 03)

在Linux终端里输入如下命令

1
lspci | grep "Ethernet controller"

如果输出的有

1
2
3
4
03:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)
04:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)
05:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)
06:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)

那么,恭喜你!中奖了 !该网卡不适合虚拟机直通,不过,可以通过创建网桥/半虚拟化方式来使用。

(曲线救国方案:不支持模拟mac设备,不能修改mac地址,不支持在系统内创建桥接)

总而言之,查看是不是第一版的天坑版本有两种有效的方法:查看CPU步进,询问卖家。

二.更新PVE以填部分坑

PVE 是什么

据 PVE 的官网介绍,PVE 是Proxmox Virtual Environment 的缩写, 是一个完整的开源服务器管理平台,用于企业虚拟化。它将 KVM 管理程序和 Linux 容器 (LXC)、软件定义的存储和网络功能紧密集成在一个平台上。借助基于 Web 的集成用户界面,您可以轻松管理 VM 和容器、集群的高可用性或集成的灾难恢复工具。

它是基于Debian11的系统,因此,所有的包管理操作同Debian一致,可玩性也十分强大。

File:Proxmox-VE-Cluster-Summary.png

PVE下载与安装:

网上教程较多,本文不再赘述

在新版的PVE内核中(推荐5.17+),优化了N5105的整体稳定性和核显稳定性,更好用了。

换源

一、更换阿里云的源

在终端中输入

1
vi /etc/apt/sources.list

将里面的内容全部替换为:(换成其它源也可以)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib`

deb-src http://mirrors.aliyun.com/debian/ bullseye main non-free contrib

deb http://mirrors.aliyun.com/debian-security/ bullseye-security main

deb-src http://mirrors.aliyun.com/debian-security/ bullseye-security main

deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib

deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib

deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib

deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib

二、去除企业版源并增加社区源

在终端中输入

1
2
cd /etc/apt/sources.list.d
vi pve-enterprise.list

注释掉:(增加#号)

找到对应行,输入i,然后注释

1
#deb https://enterprise.proxmox.com/debian/pve buster pve-enterprise

按ESC -> :wq 退出

接着:

1
2
touch pve-no-subscription.list
vi pve-no-subscription.list

然后输入i ->

1
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bullseye pve-no-subscription

ESC -> :wq 退出

三、清理、更新系统

使用下面命令清理系统冗余并更新软件包列表

1
2
3
4
apt clean 
apt autoclean
apt autoremove --purge
apt update

注释掉5.15内核,否则在全部更新的时候会更新5.15版本

1
apt-mark hold pve-kernel-5.15

安装最新内核及更新系统:

1
2
3
apt install pve-kernel-6.2.11-1-pve -y
#截至当前发文,最新版本内核已经更新到6.2.11了,而我的是两天前安装的6.2.9
apt dist-upgrade -y

安装/更新Intel微码

1
apt install intel-microcode -y

接着输入reboot命令重启系统等待微码更新和内核启动即可。

重启后使用uname -a查看内核信息

1
2
root@pve:~# uname -a
Linux pve 6.2.9-1-pve #1 SMP PREEMPT_DYNAMIC PVE 6.2.9-1 (2023-03-31T10:48Z) x86_64 GNU/Linux

三、PVE虚拟机注意事项(对于第一版)

本段是根据个人所遇到的情况及相应的处理方案,不一定适用于每个人。

由于我购置的康耐信N5105 r86s工控机是四网口的,可以通过单独为PVE准备一个WAN口解决PVE内无法上网的问题,还可以为此创建docker的macvlan网络。双网口可以参考双网口的文章。

个人网络情况

image-20230506234046359

网口1 enp3s0:接上游网络设备(光猫拨号设备/另一个网关) 已创建桥接(相当于虚拟机的WAN)

网口2 enp4s0:接路由器(AP及下游网络设备)已创建桥接 (为虚拟化路由器系统(CatWrt)准备的LAN)

网口3 enp5s0:接上游网络设备(用于做管理口和PVE上网的网口 相当于PVE的WAN)

网口4 闲置

1.使用半虚拟化代替硬件直通

由于第一版N5105及其i225网卡的缺陷,直通将可能导致虚拟机内掉网卡,掉速和拔插网线死机,虚拟机外(Host)网口错乱等问题,故不宜选用此方案。

但我们总得解决设备的网卡需求,因此,我们选用半虚拟化方案。

首先,在数据中心->pve->系统->网络->创建->Linux Bridge

我为我的网络创建了两个bridge,分别对应WAN(vmbr0,enp3s0)和LAN(vmbr1,enp4s0)

image-20230506235614503

名称填自己喜欢的,桥接端口自己选择网口,勾选自动启动

注意:在创建完网络设备和设置网关等信息后需要点击应用配置以使设置生效

在虚拟机上,添加网络设备

image-20230507000430199

选择自己刚刚添加的设备,模型选择 VirtIO(半虚拟化) 这对稳定性非常重要!

防火墙选项:如果没有在PVE下管理流量的需求,可以不勾选。

2.为PVE配置一个单独的WAN口

为什么需要为PVE单独创建一个WAN口而不复用vmbr0呢?

问题1:PVE无法上网

如果在没有创建使用vmbr0的虚拟机前,当然是没有问题的,但当我们创建虚拟机后,就会遇到同网上一样的问题:

PVE Host无法上网:网关,IP设置正确也无效

如果PVE_WAN复用的是LAN(OpenWrt的LAN)

有可能出现以下两种错误:

1 Temporary failure in name resolution

直接报dns的错误

2 failed: Network is unreachable 或Destination Host Unreachable

参考CSDN文章:Here

如果PVE_WAN复用的是WAN(vmbr0),参考下文。

问题2:无法在网卡上再创建桥接网络设备(vlan,macvlan)

vmbr0,vmbr1 对应enp3s0,enp4s0

假如需要创建多个虚拟WAN,那么在如上(vmbr0,vmbr1 ,enp3s0,enp4s0)设备无法创建虚拟的VLAN设备以达到桥接创建虚拟网口的目的,包括docker的macvlan,当我们指定这些网络设备时会提示设备繁忙。

比如

1
docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=enp3s0 test

会提示设备繁忙无法创建(或者创建成功,但我们在添加容器时提示繁忙)。

创建WAN的方法:

有两种途径创建WAN。

1.使用PVE的Web图形化页面创建WAN口

在数据中心->pve->系统->网络,选择一个未桥接的接口,设置静态IP信息。(网关,IP地址,子网长度)

image-20230507002048100

然后点击应用配置

2.在终端中配置(推荐动手能力高的)

输入命令

1
vi /etc/network/interfaces

手动配置网卡信息。

在enp5s0区段下修改如下信息:

1
2
3
4
auto enp5s0
iface enp5s0 inet static
address 192.168.31.41/24
gateway 192.168.31.1

重启网络

1
service networking restart

配置路由、DNS信息

如果不执行这一步,你会发现PVE已经出现在了192.168.31.1/24网段了,即已经连接上路由器了,但依然无法访问外网。这是因为路由信息异常导致的,需要单独设置默认网卡和默认路由。

设置enp5s0为默认路由

1
2
3
ip route add default via 192.168.100.1 dev enp5s50
#或
route add default gw 192.168.31.1 enp5s0

查看配置结果:

1
ip route show

如果出现

default via 192.168.31.1 dev enp5s0 proto kernel onlink

即成功

1
2
3
4
root@pve:~# ip route show
default via 192.168.31.1 dev enp5s0 proto kernel onlink
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.31.0/24 dev enp5s0 proto kernel scope link src 192.168.31.41

接着配置dns

1
vi /etc/resolv.conf

添加dns

1
2
3
search com
nameserver 192.168.31.1
nameserver 8.8.8.8

有关PVE的IPv6配置将在后续到来。

测试:

1
2
root@pve:~# curl ip.3322.net
61.180.102.151

成功连接Internet。

当然,此后,我们可以在enp5s0 直接创建macvlan网络,vlan设备了

1
2
3
4
5
6
7
8
root@pve:~# docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=enp5s0 dianxin
0ebcd6c39b7e812665ba5176c088b715e196923fca1d3f75aef842dc2f1861d0
root@pve:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
c1a286028953 bridge bridge local
0ebcd6c39b7e dianxin macvlan local
1babb0e980ee host host local
ecb39f108081 none null local

End.