这段时间在研究桌面迷你服务器,之前介绍过有一个问题就是用的CPU为至强E3 1231 V3,本身不带核显,亮机卡机箱太小,插不进去,这就导致一旦进不了系统,一切故障只能靠盲猜。下面我把最近遇到的一些坑描述总结一下。

  机器宿主系统装的是Proxmox VE,该系统是基于Debian的。第一天我兴奋地制作完U盘镜像,整个机器都已经组装好了,插上PCI-E延长线,插上亮机卡,装完系统,拔掉亮机卡,发现PVE的后台怎么也连不上,重新插上亮机卡又可以进系统,当时真的是绝望,不过问题出现了总要想办法解决问题。

  我看主机功率和关机的时间,感觉像是已经进操作系统了,但是PVE又连不上,主机也ping不通,这就心态崩了呀,因为没有显示输出,我们不知道他到底系统是否已经成功启动。到底是因为卡在启动项了还是什么原因,一概不知了呀。

  猜测一:linux内核启动时,调用了一些特殊的函数,这些函数需要显卡核心来处理。
  因为并不是特别精通linux操作系统,我一开始以为是不是启动函数里调用了啥图形处理函数,必须用到GPU?这是最容易想到的!因为PVE是运行在UEFI模式下的,开机之后分辨率比较高,所以我尝试了BIOS模式安装Debian最小化系统,修改GRUB引导规则,等一系列的操作(这里轻描淡写的两句话,实际在查阅资料和各种实践过程中花了我两天时间)之后,无果,依旧是插亮机卡能正常开机,能正常SSH。拔掉亮机卡系统就废了,ping不通,SSH也连不上。

  猜测二:用排除法,我要先确认是否进系统了,怎么确认??
  我根据运行功率,和关机速度来观测,感觉是已经进linux系统了,但是没办法验证啊,串口通信?没用过啊。。我想到的是在插亮机卡的情况下,写一个shell脚本,该脚本在linux启动之后自动执行。具体执行的内容为让主板上的蜂鸣器beep能够发出“滴滴滴”声,脚本都已经在写了,但还没实践,因为找到了能够验证猜测三的关键点!!

  猜测三:系统已经正常进入,但因为拔掉亮机卡,导致系统硬件发生变化
  其实这感觉是最符合逻辑的,linux启动我全部都是用console命令行的形式,理论上根本用不到图形显示。其次,网卡配置变了,肯定后台无法访问,SSH自然连不上,而且我在查阅资料的时候,有看过一个说明,说是网卡命名是根据接口来定的,显卡和网卡都是走PCI总线的,那拔掉一个是会有影响导致网卡不可用的,不过这些因为没有实际证据,也都只是怀疑。

  猜测一花了我两天时间,最后因为能力有限不继续折腾了(就差重新编译linux内核来验证了),猜测二刚准备实施但心力憔悴,直接去验证猜测三。怎么验证?我找来了之前的带核显的I3 4160。我还曾想过找一个跟E3特性一样,只是没有核显的CPU来控制变量做排除法。我把之前装好Debian和Proxmox VE的硬盘都取下来,在另一块B85主板上用I3测试,Debian下不管插亮机卡还是用集显,都能进后台,装回E3就进不了后台,这里如果下结论的话,那猜测一就是对的,那就真的心态崩了(但后来想想,应该是装的Debian 10带了网络相关的组件,有DHCP,能够自动配置网络信息)。

  我又用装了PVE的磁盘开机,分别使用亮机卡和用核显,发现都能进系统,但是用核显连不上后台,输入ip addr命令,一眼就看出了问题!!验证了猜测三的想法!


  用核显的情况下,网卡接口已经变成了enp2s0,因为我装了很多次系统了,我清楚的记得在插独显的时候,这个网卡接口的选项是enp3s0,也就是说拔掉了独立显卡,PCI设备发生了变化,网卡接口编号变了,这时候就算进系统,也连不上网络,自然ping不通,ssh连不上,之前因为看不到系统信息,只能盲猜。

  去查阅了相关的命名方式了解到,linux系统好几个版本前,就已经用现在的enp0s0来代替之前的eth0网卡命名方式,根据systemd源码的注释,意思是:en代表以太网卡,p3s0代表PCI接口的物理位置为(3, 0), 其中横座标代表bus,纵座标代表slot。所以在插独立显卡的情况下,网卡的顺序是PCI第三总线,拔掉独立显卡之后,网卡是PCI第二总线。所以不仅是显卡,只要你用任何PCI设备,比如nvme固态走PCI总线的,且优先级高于网卡,都会引起接口的变化。

  知道问题就好解决了,用核显重新安装一遍PVE,反正是新的,网卡编号为enp2s0,这样换掉CPU后不影响网卡配置,正常进系统后台,或者用带核显的CPU重新修改下网卡配置信息。!


人活着一定要争口气,哪怕生为草绳,也要做绑螃蟹的那根。