zhangguanzhang's Blog

鲲鹏920的麒麟v10物理服务器断电后无法启动处理

字数统计: 1.3k阅读时长: 5 min
2021/07/26

前情提要

珠海园区升压前置检查,上周六整个园区关电检查,然后今天来后连不上我们在 鲲鹏920的麒麟v10机器上开的虚拟机了,进 bmc 的 web 看了下是开机进入后卡住。

信息同步

是当初安装系统的同事去处理这个事情的,他 bmc 的 web 上去重启在菜单那里按 e 编辑准备改 boot cmdline 进单用户,结果按 e 后要输入用户名和密码,询问了麒麟他们。很久也没给答复。然后就在那干等,上面的虚机有我的环境,我就过去看了下。

尝试的处理

麒麟那边的人员没有回复,我打算这边同步尝试下其他手段,而且不只一台无法开机,哪怕麒麟的回复了密码也能同步尝试不同手段。Linux 无法开机的就搞个 yum 系列的新系统镜像挂载到光驱,然后设置成光驱启动,然后开机后进入 iso 的安装界面,Troubleshooting –> Rescue a CentOS Linux system。先进 bmc web 上用java的远程窗口(之前华三的 h5 挂载镜像失败了),挂载本地的 麒麟v10 镜像,然后 bmc web 上设置下次从光驱启动。然后重启服务器,进 Rescue 模式里后,界面是显示乱的。

这个时候问了下珠海那边有同事能去机房看下吗,同事说正在赶去。然后我赶紧去找了下 centos 7的arm64镜像,后面下载完了进 Rescue 模式里一直卡住。估计没适配国产的服务器。后面尝试了其他国产的系统镜像,没 Rescue 模式。机房现场也有人去了,麒麟v10 镜像Rescue 模式进去后,他那边现场看了下也是显示乱的。

单用户

后面麒麟回复了修改 boot 的时候用户名是 root 密码是 Kylin123123,确实能进入编辑 boot 的界面了,但是加了相关选项后还是无法进入单用户,左上角只有一个光标然后一直卡住。询问安装系统的同事,分区是咋搞的,他说 lvm 和有个大盘。然后问他有没有其他正常能开机的机器,他说有一个,我 ssh 上去后看到下面类似的分区:

1
2
3
4
5
6
7
8
9
10
11
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 893.1G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 892G 0 part
├─klas-root 252:0 0 838G 0 lvm /
├─klas-swap 252:1 0 4G 0 lvm [SWAP]
└─klas-backup 252:2 0 50G 0 lvm
sdb 8:16 0 14.6T 0 disk
└─sdb1 8:17 0 2T 0 part /oskvm

正常机器的 lvm 信息如下:

1
2
3
4
5
6
7
8
$ vgs
VG #PV #LV #SN Attr VSize VFree
klas 1 3 0 wz--n- <891.94g 0
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
backup klas -wi-a----- 50.00g
root klas -wi-ao---- <837.94g
swap klas -wi-ao---- 4.00g

推测了下,无法开机的机器是因为把 sdb 搞成 lvm 的原因,所以单用户肯定别想了。

Rescue 模式

目前的解决办法只有重装,这个时候快到中午了,其他同事催得急,重装代价太高了,安装慢,而且上面的虚拟机都没了,Rescue 模式后的乱码能解决就有办法了。看看正常机器上有没有显示的相关内核启动参数。

查找下 grub 的配置文件

1
2
3
4
5
$ cd /boot
$ find -type f -name 'grub*'
./efi/EFI/kylin/grubaa64.efi
./efi/EFI/kylin/grubenv
./efi/EFI/kylin/grub.cfg

看了下果然有

1
2
$ cat ./efi/EFI/kylin/grub.cfg
linux /vmlinuz-4.19.90-17.ky10.aarch64 root=/dev/mapper/klas-root ro crashkernel=auto rd.lvm.lv=klas/root rd.lvm.lv=klas/swap smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15 crashkernel=1024M,high video=efifb:off video=VGA-1:640x480-32@60me

然后在 麒麟v10 的 iso 进入了 Troubleshooting –> Rescue 选中 Rescue 先别回车,直接按 e 编辑,linux那行后面加了上面的 video=efifb:off video=VGA-1:640x480-32@60me,然后 ctrl + x 启动,显示正常了。和 Centos 的 Rescue 有点不一样,进去后类似进入 emergency 模式里,然后回车继续,进入到了一个 bash。

1
2
3
4
5
6
7
8
$ vgchange -a y
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
18 18 -wi-ao---- 14.55t
backup klas -wi-a----- 50.00g
root klas -wi-ao---- <837.94g
swap klas -wi-ao---- 4.00g
$ mkdir /mnt/sysimage

然后挂载 root 分区

1
2
$ mount /dev/mapper/klas-root /mnt/sysimage
$ chroot /mnt/sysimage

其实也没必要 chroot 进去,无非就是 vi 多了个前面的路径。取消最后一行的挂载,然后 reboot 后重启就好了。

1
2
3
4
# 没chroot进去就是编辑 vi /mnt/sysimage/etc/fstab
$ vi /etc/fstab
...
#/dev/mapper/18-18 /oskvm xfs default 0 0

推断

可能是分区太大了,lvm 在国产系统开机上有问题。另外也不推荐物理机使用 lvm,能不查资料笔记熟悉 lvm 的命令的人实际上目前不多,会修复的人更少了。lvm 扩容一时爽,恢复火葬场。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 klas lvm2 a-- <891.94g 0
/dev/sdb 18 lvm2 a-- 14.55t <1.16g
l$ vgs
VG #PV #LV #SN Attr VSize VFree
18 1 1 0 wz--n- 14.55t <1.16g
klas 1 3 0 wz--n- <891.94g 0
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
18 18 -wi-ao---- 14.55t
backup klas -wi-a----- 50.00g
root klas -wi-ao---- <837.94g
swap klas -wi-ao---- 4.00g
CATALOG
  1. 1. 前情提要
  2. 2. 信息同步
    1. 2.1. 尝试的处理
    2. 2.2. 单用户
    3. 2.3. Rescue 模式
  3. 3. 推断