误升级GLIBC导致系统崩溃之后
服务器和系统版本
- 服务器版本 Dell R410
- 系统版本 Centos 6.3
出错原因
运行 mindoc 时,提示依赖需升级
升级之后,大部分的 Linux 基础命令都无法使用,例如:
此时,一旦退出当前远程Shell终端,就再也无法登录系统,只能进 Linux 急救模式,即 Rescue 模式进行抢救。
修复系统
若未退出当前远程 Shell 终端
如果安装了 busyBox
busybox wget http://mirrors.tuna.tsinghua.edu.cn/centos-vault/6.3/os/x86_64/Packages/glibc-2.12-1.80.el6.x86_64.rpm
busybox rpm -i glibc-2.12-1.80.el6.x86_64.rpm
若已经退出了当前远程终端
只能进机房操作了,需要进入 Rescue 模式,进行缺失系统文件的补全。
制作U启动盘
要求:系统版本要和坏掉的系统版本一致 (这样才能实现,缺失系统文件的完整替换。)
- 准备一块 8G 内存的U盘
- 下载系统 Centos 6.3
- 在 Windows 电脑上 使用 Rufus 软件,将系统烧入准备好的 U盘中
Rescue 模式 挽救
因为服务器根本进不去,只能强行按下关机键,进行关机。
插好U启动盘,启动服务器。
在启动页面, 按 F11 进入 BIOS 设置,选择启动方式 为 U启动盘启动
Hard Driver C => U268
这里的 U268 是我的 U 盘名字。
一、 接下来,按回车键进去操作选择页面
毫无疑问,选择第三项 Rescue installed sysytem 回车
二、选择语言和键盘(默认的就好)
三、选择包含急救镜像的介质
注意⚠️:这里有坑!!!
- 如果是用的光驱➕IOS光盘的形式,那么选择第一项也就是 Local CD/DVD
- 如上所述,我们使用的是 U 启动盘,因此需要选择 第二项 也就是 Hard Driver
选择 Hard driver 介质
找到自己的U启动所在分区,我是一个个 的试出来的,一般都是最后一个或者第一个,我这里选择最后一个 /dev/sdb1
四、稍等一会儿会出现要不要设置网络,一般来说网络没问题就不用设置了,我这里选择 No
五、接下来,选择 Rescue 选项,这里我们选择 Continue
- Continue:救援模式程序会自动查找系统中已有的文件系统,并把他们挂载到
/mnt/sysimage
目录下,也就是将缺失部分系统文件的坏掉的原系统挂载到/mnt/sysimage
目录 - Read-Only:则会以只读的方式挂载已有的文件系统
- Skip: 手动挂载
- Advanced:高级选项就不作说明了
六、接下来,会弹出提示页面
原损坏系统挂载路径为 /mnt/sysimage
,如果想获得原损坏系统 root 环境,执行命令:chroot /mnt/sysimage 即可。
上述,提示页面是系统完整挂载成功的提示, 如果原损坏系统还有别的问题的话,还会导致只能挂载部分系统,所以挂载的损坏系统一直为 readonly 模式,即只读的情况。
无需在意,后面会解决的,还是选择 Continue。
七、接下来,进入 Shell
回车
八、重头戏开始
- 查看 U盘 是哪个
blkid
可以看到设备符是 /dev/sdb1
- 创建 U盘 挂载用的目录
这里可以自己定义用于挂载 U盘 的空目录啊,切记不能是 /mnt/sysimage
目录,因为原损坏系统在这个目录下
mkdir /mnt/cdrom
- 将 U盘 挂载到
/mnt/cdrom
下
mount /dev/sdb1 /mnt/cdrom
删除更新 glibc 2.14 时,在原损坏系统 /lib64 目录下的升级生成文件
删除之前先备份
mkdir /mnt/cdrom/backup_data cp /mnt/sysimage/lib64/*2.14* /mnt/cdrom/backup_data/
删除升级残留文件
rm /mnt/sysimage/lib64/*2.14*
重新安装系统原生 glibc 依赖
一定要用 –root 指定root,目前的根目录是U盘的
rpm -ivh /mnt/cdrom/Packages/glibc* --nodeps --root /mnt/sysimage --force
- 将报错中提及的插件还原
cp /lib64/libselinux.so.1 /mnt/sysimage/lib64/
cp /lib64/libpam.so.0 /mnt/sysimage/lib64/
- 重启服务器
reboot
注意⚠️:
1、如果原损坏系统并未成功完整挂载到 /mnt/sysimage
下时,5、6 步骤可能出现不可写的情况,提示 /mnt/sysimage
下是 readonly 系统
解决方案:
此时,就需要对 /mnt/sysimage
进行重新挂载,并在挂载的同时设置模式为 读写模式
mount -o remount,rw /mnt/sysimage # 以读写方式重新挂载分区
2、 重启服务器时,出现错误
- 看提示有按CTRL+D继续,按了CTRL+D会重启,再次回到这个界面。
- 这可能是因为系统损坏时,我们直接通过按键来关闭服务器导致的问题,需要异常磁盘扫描,输入 root 密码 进入 修复模式
- 在修复模式下,输入命令
fsck –y /dev/mapper/VolGroup-lv_root
/dev/mapper/VolGroup-lv_root
这个路径就是你上面提示出错的那个路径,根据自己的实际情况来,不同人的情况,不同路径的。
- 输入后,会在检查硬盘,这个过程看具体的情况而定,比如你的硬盘如果是T级别的话,那可能会需要一段时间,即使达到7-8小时也是正常的。最后在检查完事后,reboot 重启下服务器。
- 重启完,就可以看到正常的登陆界面了,输入用户名,密码,就可正常的登录了
附:鸟哥的fsck的命令说明
本作品采用《CC 协议》,转载必须注明作者和本文链接