Proxmox VE由7升级8后遇到的networking.service/start卡死问题

最近发现Proxmox VE 7的管理页面开始提示支持到期的红字了(查了下,官方说明是24年7月底正式停止),于是趁最近有空给服务器升级到了8,开始前仔细研读了官方的大版本升级说明:https://pve.proxmox.com/wiki/Upgrade_from_7_to_8,这个wiki提到了两种升级方式,一是全新安装一个8,然后将原有的磁盘配置和虚拟机通过备份、还原等方式迁移过去,另一种是就地升级,类似系统内软件的升级方式apt update,apt upgrade这样。

从操作方式上来看,感觉第一种方式安全系数更高一些,但是需要有两个服务器,至少是两套一模一样的磁盘环境,新部署的新版本虚机系统如果遇到问题,旧的不受影响,还可以用,新的研究好了,旧的一停,切割完成!第二种方法呢,风险就大一些,一旦升级出现问题,虚机的服务就会中断,而且还需要重装,再还原备份等等麻烦的操作。不过对于博主我来说,也只有第二种就地升级是可行的,因为没有富裕的硬件资源。

虽然升级前感觉做足了功课,但升级过程中还是挺坎坷的,其中坑最大的就是标题上写的这个networking.service/start卡死问题,最早发现问题的症状是在升级正常完成后,重启系统,然后就卡在这个状态:

一开始还傻等了半天,后来发现硬盘灯根本不亮了,才意识到出事了,于是上网搜了一下,发现果然有不少遇到类似问题的人,其中下面这篇文章提到了这个卡住界面背后的实际问题:“Job networking.service/start running

按照文章内说明的方法,grub引到时按e键,修改启动脚本,去掉quiet,就能看到一模一样的无限计时,卡死无法正常启动的Proxmox VE信息了。

掌握了关键问题信息后,一通搜索,很容易就找到了这个官方bug:https://bugzilla.proxmox.com/show_bug.cgi?id=5009,说明是从7升到8时的一个NTP服务怎么的改变了导致network不能正常up的bug(没细看,但感觉有点莫名其妙),于是顺着这个线索,找到了以下一系列的应对方法:

https://thesoloadmin.com/proxmox-8-0-hang-on-boot-fix

https://forum.proxmox.com/threads/proxmox-stuck-in-dev-mapper-pve-root-clean.154567

https://forum.proxmox.com/threads/proxmox-rescue-disk-trouble.127585/#post-557888

https://forum.proxmox.com/threads/boot-hangs-after-upgrade-to-proxmox-8.131242

上述这几篇网文,简单看下就行,核心思路都差不多,根据bug记录的描述,问题出在

/etc/network/if-up.d/ntpsec-ntpdate

这个脚本上,解决的思路就是想办法从恢复模式 recovery mode,rescue boot等方式进入系统盘,修改这个up脚本,以绕过问题,让系统能启动,然后这个大坑就来了,我按照上面网页里写的各种办法,也没有能成功进入可以修改现有系统盘文件的状态,首先,本身系统的grub里根本就没有能直接进的recovery,然后按着说法重做了8.2的安装U盘,启动系统后advance里的rescue boot以为完事大吉了,没成想最后还是卡在一样的Job networking.service/start running状态,最后都快要放弃打算走全新安装+恢复虚机的退路时,发现了这篇文章:https://pve.proxmox.com/wiki/Recover_From_Grub_Failure,熟悉linux系统的朋友能看出来,和大部分常规linux一样,是用另一个临时系统引导,然后挂载原有系统盘的方式处理,接下来就是重点:安装盘引导后,不要进rescue boot!而是要在选择advance后,进入命令行安装调试模式( Install Proxmox VE (Terminal UI, Debug Mode)),同时直接进入后的磁盘都是只读不能操作的,这时要先敲一次exit,然后再按刚发的文章中的提示:

vgscan
vgchange -ay
mkdir /media/RESCUE
mount /dev/pve/root /media/RESCUE/

前两个vg命令执行后,应该可以看到/dev/pve/root被扫出来并激活的提示,具体内容没拍屏,然后下一个mount成功后,就可以在挂载到的/media/RESCUE/路径下找到原有系统分区的内容了。

接下来是自趟的第二个坑,进入到bug追踪里提到的/etc/network/if-up.d后,发现里面根本没有ntpsec-ntpdate这个脚本!这时有点慌了,应该不是这个bug,后来看了下bug记录的时间,应该是8刚放出来的时候,并且这个bug已经被标记为解决了,同时做系统安装盘的时候也能看到现在已经是8.2版本了,所以这个问题应该已经被修正了。那么问题出在哪呢?仔细想了下,问题是network服务启动卡死,所以看了眼上级路径的interfaces脚本:

# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

auto lo
iface lo inet loopback

iface enp1s0 inet manual

auto vmbr0
iface vmbr0 inet dhcp
        bridge-ports enp1s0
        bridge-stp off
        bridge-fd 0

iface vmbr0 inet6 static
       address 2408:8210:3e:e1a0:4ecc:6aff:fe87:eb4c/128
       gateway fe80::1

恍然大悟,原来之前的服务器所在网络环境是有IPv6的,并且当时设置了静态地址,后来换到了一个没有v6的网络环境下,这个配置也没动,PVE也没有重新设置生成过这个配置,会不会是这个问题?

于是试着把inet6开始的最后三行注释掉,重启系统,果然,问题解决,正常启动,系统顺利升级到了PVE 8.2.7版本!

博主友情提示:

如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。