213. sbin-init:No such file or directory

方案

解决方法

/sbin/init 是 Linux 系统中至关重要的初始化进程,缺失它将导致系统无法启动。以下是一些解决方法:

1. 从 Live CD/USB 复制 init 文件:

  • 准备工作:
    • Ubuntu Live CD/USB 启动盘。
  • 步骤:
    1. 使用 Live CD/USB 启动系统。
    2. 挂载你的根分区,例如:sudo mount /dev/sda1 /mnt (将 /dev/sda1 替换成你的实际分区,我的文件系统是sda5)。
    3. 复制 init 文件: sudo cp /sbin/init /mnt/sbin/
    4. 卸载根分区并重启系统。

2.使用 dpkg 命令重新安装 init 软件包:

  • 准备工作:
    • Live CD/USB 启动盘。
  • 步骤:
    1. 在 Live CD 环境下,挂载根分区。
    2. 使用 chroot 命令进入你的系统环境: sudo chroot /mnt
    3. 重新安装 init 软件包: sudo apt-get install --reinstall init
    4. 退出 chroot 环境: exit
    5. 卸载根分区并重启系统

3.使用 Ubuntu 安装盘修复系统:

  • 准备工作:
    • Ubuntu 安装盘。
  • 步骤:
    1. 使用 Ubuntu 安装盘启动系统。
    2. 选择 “Try Ubuntu” 进入试用模式。
    3. 打开终端,并运行 sudo apt-get update 更新软件包列表。
    4. 运行 sudo apt-get install --reinstall ubuntu-minimal 重新安装基础系统软件包,其中包含 init。
    5. 重启系统。

结合方法1、2。在 Live USB 启动Try Ubuntu系统,挂载根分区后,在/sbin目录下,没有init

1
sudo cp /sbin/init /mnt/sbin/

之后发现,与Live USB下的init不一致(然而在这一步当时没有用ldd命令确定具体连接,并不确定简答复制是否有用!!

简单cp后发现区别[如下与上面的截图]

1
lrwxrwxrwx 1 root root 20 Dec 10 15:33 /mnt/sbin/init -> /lib/systemd/systemd*

随后进入chroot,重新安装 init 软件包: sudo apt-get install --reinstall init

但是此步骤有可能遇到在chroot中无法访问网络的问题,ping不到baidu,apt会无法解析源地址,通过在 /mnt/etc/resolv.conf 插入 nameserver 8.8.8.8 后(添加Google 提供的公共 DNS 服务器的 IP 地址 8.8.8.8) 可以正常使用 apt-get install init

ldd 是list, dynamic, dependencies的缩写, 意思是, 列出动态库依赖关系。
ldd /sbin/init使用命令查看依赖的库文件是否都存在

方案

方案

修复文件系统

开始检查并修复文件系统错误

1
2
3
sudo fsck -f /dev/sda1
sudo fsck -f /dev/sda6
sudo fsck -f /dev/sda7

修复完以后还是无法进入,文件损失太严重。只能试试重建initrd

重建initrd

首先安装 Ubuntu安装并绑定 /dev、/sys 和 /proc 目录。我的系统分区在sda6,你的可能在sda1

1
2
3
4
5
sudo mount /dev/sda6 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /sys /mnt/sys
sudo mount --bind /proc /mnt/proc
sudo chroot /mnt

这些命令创建一个 chroot 环境,允许您像正在运行的系统一样使用 Ubuntu 安装。

进入 chroot 环境后,导航到 /boot 目录:

1
cd /boot

执行此操作的命令取决于您的 Ubuntu 版本, 请将“<kernel-version>”替换为已安装内核的版本号(例如 3.19.0-25-generic)。

1
update-initramfs -c -k <kernel-version>

重建initrd后,退出chroot环境:

1
exit

尝试正常启动 Ubuntu 桌面,看看问题是否得到解决。

重新安装GRUB

如果重建 initrd 不能解决问题,您可能需要重新安装 GRUB(Ubuntu 的引导加载程序)。

要重新安装 GRUB,请按照与上述相同的步骤进入 chroot 环境。

然后,运行命令 grub-install /dev/sda6,将“/dev/sda”替换为适合您的 Ubuntu 安装的设备名称。

1
grub-install /dev/sda6

/bin/bash

报错如下:

1
chroot: failed to run command ‘/bin/bash’: No such file or directory

根据报错应该rootfs文件系统中缺少/bin/bash,进入查看确实默认是sh,换成

1
chroot . /bin/sh

依然报错

1
chroot: failed to run command ‘/bin/sh’: No such file or directory

通过查阅资料发现,/bin/sh链接/bin/busybox,busybox为动态执行文件,直接进入缺少动态链接库,如下:

需要拷贝相应的动态到rootfs文件系统,如下:

1
2
3
4
5
6
cd rootfs
cp /lib/ld-linux-aarch64.so.1 lib/
mkdir -p lib64
cp /lib64/libc.so.6 lib64/
cp /lib64/libresolv.so.2 lib64/
cp /lib64/libm.so.6 lib64/

然后再执行chroot . /bin/sh就正常了。