Last updated
Was this helpful?
Last updated
Was this helpful?
从我厂自制的OS 7u2升级转换到CentOS 7u2操作系统,总是发生内核一旦升级,就无法正常启动。这个问题困扰了我很久,往往退而求其次,避开升级内核。但是,伪处女座,不能忍啊!
从带外检查启动输出显示
报错显示和磁盘的label有关,也就是升级以后,设备文件无法找到原先按照label
标记的磁盘设备。我遇到过以往升级后,磁盘设备完全是被为UUID的情况,所以推测有可能类似情况又发生了。
切换到磁盘操作系统
检查系统设备
显示输出
看来是设备文件by-label
识别的时候原先的/
符号被识别成了\x2f
- 通过挂载/dev/sda2
(挂载命令 mkdir /mnt;mount /dev/sda2 /mnt
)检查这个磁盘设备下的文件 etc/fstab
可以看到,原先设置是
凡是带/
开头的符号都被识别成了\x2f
,所以需要修改磁盘挂载。
可以采用以下方法之一:
使用旧版本内核启动,然后从新对磁盘分区进行label
,去除掉不兼容的/
符号。然后再重启到新内核
直接修改etc/fstab
,将LABEL=
识别磁盘的方式更改为使用UUID识别方式
label
标记分区显示分区标记
输出显示
修改分区标记
同样再修改 /dev/sda2
修改etc/fstab
配置如下
但是很奇怪,重启依然没有找到by-label
设备。
汗,忘记修改 grub 启动中的配置了!原先的配置中还遗留着对/dev/disk/by-label/\x2f
的引用!
编辑 /mnt/boot/grub2/grub.cfg
可以看到,这个文件不是直接编辑的,是通过编辑模板/etc/grub.d
目录下模板和 /etc/default/grub
后,然后通过grub2-mkconfig
生成的。在斌即过/etc/fstab
之后(更换label
或者从label
转换到uuid
或相反),需要执行一次grub2-mkconfig
来生成新的配置文件。
检查
/boot/grub2/grub.cfg
可以看到如下配置显示是采用root=LABEL=/
上述两行就是新安装内核自动添加按照磁盘LABEL=/
来挂载启动盘。虽然后面订正了/etc/fstab
,但是grub.cfg
没有订正。
不过,再次启动,依然存在问题,显示
这步不需要:按照提示我尝试创建initramfs
文件来修正磁盘启动 - 对于RHEL/CentOS 6/7 ,需要使用 dracut
工具(不过这个步骤看来无效,应该还是需要手工订正/boot/grub2/grub.cfg
)
不过,执行之后依然没有解决系统启动后还是在寻找/dev/disk/by-label/x2f
,报错依然相同。我本来以为grub2-mkconfig
命令会自动按照/etc/fstab
中设置来创建/boot/grub2/grub.cfg
,但是发现执行后grub.cfg
中依然是保留了原来的root=LABEL=/
,所以需要手工订正这个配置文件,将 root=LABEL=/
修改成 root=LABEL=ROOT
。
果然,最终是手工通过修正/boot/grub2/grub.cfg
来解决启动时候启动分区识别
检查磁盘UUID
显示输出
修改etc/fstab
如下
同样,需要手工修改 /boot/grub2/grub.cfg
将原先启动参数 root=LABEL=/
修改成 root=UUID=37d96a70-ae3f-4591-91de-e29145faad8d
当修改磁盘的DISK label时,需要修改2个位置:
/etc/fstab
对应更改LABEL
或者UUID
修改/boot/grub2/grub.cfg
将启动参数中root=LABEL=/
修改成都应的LABEL
或者UUID
参考 使用 e2label
命令
如果是ubuntu/debian,则参考 ,编辑 /etc/initramfs-tools/conf.d/resume
将这个文件中的UUID或者label订正成正确的值并保存。再执行命令 sudo update-initramfs -u
除了上述通过e2label
修正磁盘设备的label
,另一种方法是使用磁盘设备的UUID。参考 :