误升级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启动盘

要求:系统版本要和坏掉的系统版本一致 (这样才能实现,缺失系统文件的完整替换。)

  1. 准备一块 8G 内存的U盘
  2. 下载系统 Centos 6.3
  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

  1. Continue:救援模式程序会自动查找系统中已有的文件系统,并把他们挂载到 /mnt/sysimage 目录下,也就是将缺失部分系统文件的坏掉的原系统挂载到 /mnt/sysimage 目录
  2. Read-Only:则会以只读的方式挂载已有的文件系统
  3. Skip: 手动挂载
  4. Advanced:高级选项就不作说明了

六、接下来,会弹出提示页面

原损坏系统挂载路径为 /mnt/sysimage ,如果想获得原损坏系统 root 环境,执行命令:chroot /mnt/sysimage 即可。

上述,提示页面是系统完整挂载成功的提示, 如果原损坏系统还有别的问题的话,还会导致只能挂载部分系统,所以挂载的损坏系统一直为 readonly 模式,即只读的情况。

无需在意,后面会解决的,还是选择 Continue。

七、接下来,进入 Shell

回车

八、重头戏开始

  1. 查看 U盘 是哪个
blkid

可以看到设备符是 /dev/sdb1

  1. 创建 U盘 挂载用的目录

这里可以自己定义用于挂载 U盘 的空目录啊,切记不能是 /mnt/sysimage 目录,因为原损坏系统在这个目录下

mkdir /mnt/cdrom
  1. 将 U盘 挂载到 /mnt/cdrom
mount /dev/sdb1 /mnt/cdrom
  1. 删除更新 glibc 2.14 时,在原损坏系统 /lib64 目录下的升级生成文件

  2. 删除之前先备份

    mkdir /mnt/cdrom/backup_data
    cp /mnt/sysimage/lib64/*2.14*  /mnt/cdrom/backup_data/
  3. 删除升级残留文件

    rm /mnt/sysimage/lib64/*2.14*
  4. 重新安装系统原生 glibc 依赖

一定要用 –root 指定root,目前的根目录是U盘的

rpm -ivh /mnt/cdrom/Packages/glibc* --nodeps --root /mnt/sysimage --force 
  1. 将报错中提及的插件还原
cp /lib64/libselinux.so.1 /mnt/sysimage/lib64/
cp /lib64/libpam.so.0 /mnt/sysimage/lib64/
  1. 重启服务器
reboot

注意⚠️:

1、如果原损坏系统并未成功完整挂载到 /mnt/sysimage 下时,5、6 步骤可能出现不可写的情况,提示 /mnt/sysimage 下是 readonly 系统

解决方案:

此时,就需要对 /mnt/sysimage 进行重新挂载,并在挂载的同时设置模式为 读写模式

mount -o remount,rw /mnt/sysimage # 以读写方式重新挂载分区 

2、 重启服务器时,出现错误

  1. 看提示有按CTRL+D继续,按了CTRL+D会重启,再次回到这个界面。

  1. 这可能是因为系统损坏时,我们直接通过按键来关闭服务器导致的问题,需要异常磁盘扫描,输入 root 密码 进入 修复模式

  1. 在修复模式下,输入命令
    fsck –y  /dev/mapper/VolGroup-lv_root

/dev/mapper/VolGroup-lv_root 这个路径就是你上面提示出错的那个路径,根据自己的实际情况来,不同人的情况,不同路径的。

  1. 输入后,会在检查硬盘,这个过程看具体的情况而定,比如你的硬盘如果是T级别的话,那可能会需要一段时间,即使达到7-8小时也是正常的。最后在检查完事后,reboot 重启下服务器。

  1. 重启完,就可以看到正常的登陆界面了,输入用户名,密码,就可正常的登录了

附:鸟哥的fsck的命令说明

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!