抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Sephiroth1s'blog

The quieter you became,the more you are able to hear.

背景

  • 安装某个工具等时候,过于相信第三方脚本,没有检查安装了dpkg安装了一堆无关的ubuntu18的deb(我的机器则是ubuntu20),其中有坑爹的deb则是libstdc++6_8.3.0-6ubuntu1~18.04.1_amd64.deb,一开始没检查dpkg安装失败的完整日志,以为失败了会自动回退= _ =
  • 而其中apt等系统相关的工具,不少都是依赖libstdc的,所以系统关机之后就打不开了。
  • 由于apt依赖的版本较高无法工作,故无法自动修复,具体报错如下,变成了先有鸡还是先有蛋问题( ̄_ ̄;)
    apt: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /lib/x86_64-linux-gnu/libapt-pkg.so.6.0)

进入liveCD环境

准备ISO镜像

  • 我是虚拟机故只需要ISO镜像就行,在虚拟机设置中,记得钩上启动时链接,保证在bios中也能检测到
  • 实机请自备u盘制作启动盘,推荐用rufus制作,兼容性强。

进入bios/UEFI

  • 如下图设置即可直接启动到bios/UEFI
  • bios设置下,从CD-ROM启动,保存启动

在liveCD用chroot进入原系统环境修复

1、进入liveCD

  1. 直接使用try ubuntu,不要安装系统,进入系统后打开终端
  2. sudo fdisk -l查看原来的系统在哪个硬盘,找到Device关键字,看到写着Linux的就是原来的文件系统分区了。如下图
    sudo fdisk -l | grep -C 10 Device
    fdisk查找硬盘分区

2、挂载原系统目录

根据步骤1.2知道系统分区在/dev/nvme0n1p5

sudo mount /dev/nvme0n1p5 /mnt
# 使用bind绑定当前liveCD系统识别到的信息到/mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
# 挂载dns配置文件,使dns解析正常工作,如果不需要联网这步可以省略
sudo mount --bind /etc/resolv.conf /mnt/etc/resolv.conf

mount参考
dns参考

3、使用chroot修复原系统

  1. 使用chroot进入原系统环境
    sudo chroot /mnt
  2. dpkg无视依赖卸载错误版本的库,直接卸载这个libstdc++6是很多程序的依赖无法卸载,故得用--force-depends参数
    sudo dpkg -r --force-depends libstdc++6
    备注: 具体的包名可以用sudo dpkg -S [关键字]来查找
  3. wget下载deb,
    wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-10/libstdc++6_10.5.0-1ubuntu1~20.04_amd64.deb
  4. dpkg安装正确的deb
    sudo dpkg -i libstdc++6_10.5.0-1ubuntu1~20.04_amd64.deb
  5. 至此apt已经恢复正常了,交给 apt install -f 来修复依赖问题,如果无法访问域名,建议步骤2 挂载下dns配置即可。
  6. 退出chroot ,umount系统,关机,还原虚拟机设置,重启后正常进入系统。
    # 退出chroot
    exit
    # 卸载已经挂载的目录和文件
    sudo umount /mnt/etc/resolv.conf
    sudo umount /mnt/dev
    sudo umount /mnt/proc
    sudo umount /mnt/sys
    sudo umount /mnt
    # 关机
    sudo shutdown -h now

备选参考

  1. 不修了!我就要数据,直接liveCD挂载分区,执行sudo mount /dev/nvme0n1p5 /mnt拷贝出来
  2. 直接覆盖安装下系统,但不格式化硬盘,我这边用ubuntu-20.04.6-desktop-amd64.iso,安装的时候可以检测到已存在的系统,直接双系统共存,不用担心硬盘被格式化,然后参考上一步拷出来2333,好像引入了个新问题ε=ε=ε=┌(; ̄◇ ̄)┘
  3. 一般情况参考
  4. 更严重的情况,连命令都无法使用的参考