Linux Kernel Developer @ 阿里巴巴操作系统团队
2019年10月
2019年08月
Aliyun Linux 2 已经发布,特性文档: https://help.aliyun.com/document_detail/111881.html 欢迎使用
楼主文章里是一个很老版本的CentOS,基本确定是CentOS5。楼主的报错应该是模块编译后和当前内核不匹配。需要楼主确认一下自己的centos的版本,以及nbd代码的来源。
建议使用U盘恢复盘或者Live CD进入终端,获取root权限后进行修复。看楼主应该是用了LVM,先参照下列步骤:
# lvm pvscan
PV /dev/sda1 VG rhel lvm2 [96.00 MB / 0 free]
Total: 1 [3.34 GB] / in use: 1 [3.34 GB] / in no VG: 0 [0 ]
# lvm vgscan
Reading all physical volumes. This may take a while...
Found volume group "rhel" using metadata type lvm2
# lvm lvscan
INACTIVE '/dev/mapper/rhel-root' [3.34 GB] inherit
# lvm lvdisplay
--- Logical volume ---
LV Name /dev/rhel/root
VG Name rhel
LV UUID 336qTi-Uguu-32O4-yQO7-xNON-eNON-biy0et
LV Write Access read/write
LV Status NOT available
LV Size 3.34 GB
Current LE 107
Allocation inherit
Read ahead sectors 0
# lvm vgchange -ay
1 logical volume(s) in volume group "rhel" now active
然后尝试修复: xfs_repair /dev/mapper/rhel-root
如果还是不行,强制清理log后再修复: xfs_repair -L /dev/mapper/rhel-root
6.5到7.0在用户态库和内核版本上都有很大的变动,即使能成功通过yum升级,也无法确保兼容性。重新部署反而可能是最安全的做法。
根据对应的RHSA errata https://access.redhat.com/errata/RHSA-2017:1916 提示,升级到 glibc-2.17-196 及以后版本即可解决。经过查看,aliyun的镜像上已经有了这个版本,所以建议您参照 https://mirrors.aliyun.com/help/centos 上的指引直接更新repo后,进行整机更新或者glibc更新。另外,如果是从7.0直接更新到7.4,属于跨度较大的小版本更新,无论是整机更新,还是只更新glibc这样的关键库,都建议先备份好服务器上的重要数据,以防万一。
其实并不一定需要。
如果是Red Hat系的操作系统,在编译对应内核版本的模块的时候,只需要安装对应版本的 kernel 二进制包 + kernel-devel 开发包即可,这个开发包里面的内容不是源代码,而是符号表,Makefile嵌套规则,以及一些没有放到 kernel-headers 的头文件。换句话说,如果你有kernel二进制包+模块ko+符号表+Make规则,你接下去只需要一份内核模块和一个简单的Makefile就可以编译了。
当然,如果没有kernel二进制包也没有开发包,那就只有去找内核源码了。
上传到服务器的数据默认 应该是只有 .git/ 目录的baremetal数据 ,默认不会把代码树也推上来的。
应该是找不到根分区的文件系统,有可能是升级内核的时候initrd出错了。这种情况建议在ECS控制台更换系统盘,或者如果有快照可以从快照恢复。如果这两个方法都不行,但是需要急于恢复系统盘数据,我记得可以另外买一个ECS,然后把这个系统盘重挂载过来,不过这个方法现在可不可行我不确定
kernel.org 放的是内核代码树,没有CentOS 源……