误删了Linux系统的libm.so.6文件与libm-2.27.so的软链接导致的开机出现kernel panic的解决方案(图文U盘救援详细教程)

事情起因

最近在做嵌入式视觉,捣弄rknn3588,在推理过程中报了一个错,就是说我的GLIBC的版本太低了,我也没有多想,想着升一下版本就好了,然后找到了这篇博客。【请谨慎操作】Ubuntu18.04升级GLIBC_2.29,解决ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘-CSDN博客

对着指令直接复制粘贴到终端,但是突然发现常用的指令,ls,cd这些都没法用了,我也没在意准备关闭终端重新打开,结果终端也打不开了,用惯了windows系统,做了最后悔的操作——重启。

结果导致了ubuntu根本打不开,即使是recovery mode也无效了。

如果你还没来得及关闭终端可以直接用下面的方法:

//恢复之前的连接的方法
$ LD_PRELOAD=/lib/x86_64-linux-gnu/libc-2.23.so  ln -s /lib/x86_64-linux-gnu/libc-2.23.so libc.so.6
//或者直接更新这个连接
$ LD_PRELOAD=/lib/x86_64-linux-gnu/libc-2.27.so  ln -s /lib/x86_64-linux-gnu/libc-2.27.so libc.so.6

还有一些解决方案是直接使用虚拟机的光盘救援,但我的是双系统实现不了。 

Rufue制作一个启动盘

期间也花了很多时间去试了其他的方法,均无效,我这里是使用U盘做了一个ubuntu的安装盘(版本应当与你的ubuntu系统相当)

rufus软件下载地址:Index of /downloads

ubuntu的ios下载:https://ubuntu.com/#get-ubuntu 

制作方法也很简单,打开rufus,如果用的是U盘就勾选上显示USB外置硬盘。然后开始制作就好了,当然你的U盘会被格式化,所以文件的话最好自己备份一下,等用完之后重新格式化就能重新使用了。ios镜像文件是ubuntu18 desktop。

Windows下制作好后的大概样子。 

使用U盘进行启动 

这里每个机子都有不同的方法,我的是惠普,在开机的时候不断的点击F12就进入了这里,我看大多方法是使用BIOS进入,这个大家可以自己去查查

这里直接点击Try Ubuntu就好了。

修改文件

现在要做的就是找到本机系统文件的位置,并把它挂载到当前系统的目录中,本机系统在dev中,首先你需要新建一个文件,这里我新建的文件夹叫做mnt

sudo mkdir /mnt

接下来的图片里面有一些是没用的操作,所以大家就尽量的自己进行辨别。 

然后挂载我们的文件到mnt文件中

你需要先找到含有lib文件夹的位置,这个你可以在other locations中找到,因为在这个U盘的系统你会发现之前原系统的文件,当然不是computer里面,因为这里的computer是U盘的系统的,你应该查看其他的文件,然后在其旁边就会出现/dev/...

比如我这里就是/dev/sdb4

sudo mount /dev/sdb4 /mnt/

这里你就会发现在mnt文件中应该会有这样的文件,如:lib,lib32,lib64,bin这种

cd /mnt/lib/x86_64-linux-gnu

检查文件的链接情况:

ldd /mnt/lib/x86_64-linux-gnu/libm.so.6

可以看到下面图片当中的报错,没有这个文件

接下来强制链接:

sudo ln -sf libm-2.27.so libm.so.6 

重新检查一下:

ldd /mnt/lib/x86_64-linux-gnu/libm.so.6

链接上了,真的不容易

这里建议大家再次cd进入我们原系统的那个文件路径,用ldd /mnt/lib/x86_64-linux-gnu/libm.so.6再检查一下原系统当中是否链接成功了。

最后,解除搭载

umount /mnt

键入reboot重启即可(也可以强制关机)。

成功复活!!!

后续

有时候真的不要手贱去动这些文件,不然除了氪金或者重装系统,光凭网上这些不是很详细的教程,真的很难去抢救回来,也是这个是生产机而且还不是我的,不然我肯定直接重装了。总得来说积累了不小的 "运维" 经验。

rk3588继续搞,1.5的工具箱没法用,我肯定要直接换一个版本的,真不想改它这个bug了,给我整害怕了都。

参考文章

ubuntu如何从升级glibc失败中恢复_ubuntu16.04 更新libc6 还原-CSDN博客

ubuntu系统,libc.so.6 版本升级时遇到的各种坑,以及最终解决办法_oserror: /lib/x86_64-linux-gnu/libc.so.6: version -CSDN博客

记一次ubuntu16误删libc.so.6操作的恢复过程_ubuntu libc恢复-CSDN博客

 戴尔R730从U盘启动_r730 nvme启动-CSDN博客

centos光盘修复引导_CentOS通过光盘启动救援数据-CSDN博客

linux 系统崩溃了,使用u盘启动,进入try ubuntu 如何找到本机系统的挂载点? - 知乎 (zhihu.com)

Ubuntu 16.04 找回libc.so.6_ubuntu libc.so.6 被修改-CSDN博客 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 00:36:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 00:36:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 00:36:01       82 阅读
  4. Python语言-面向对象

    2024-03-22 00:36:01       91 阅读

热门阅读

  1. Linux入门:常用基本命令

    2024-03-22 00:36:01       37 阅读
  2. MySQL WITH AS 方法创建临时表的技术详解

    2024-03-22 00:36:01       39 阅读
  3. 【算法】棋盘(模板题)

    2024-03-22 00:36:01       41 阅读
  4. P1481 魔族密码

    2024-03-22 00:36:01       42 阅读
  5. AI学习前瞻-numpy语法

    2024-03-22 00:36:01       51 阅读