Debian 10 update-initramfs 失败:无法创建 /dev/null

Debian 10 update-initramfs 失败:无法创建 /dev/null

尝试通过 chroot 修复克隆启动(新处理器,启动时挂起)。启动到 liveUSB 并将文件系统安装到 /mnt。当我运行时,update-initramfs -uv它会一直持续到接近尾声时才会失败,并出现以下错误:

...
Adding module /lib/modules/4.19.0-25-amd64/kernel/drivers/infiniband/hw/mlx4/mlx4_ib.ko
Adding module /lib/modules/4.19.0-25-amd64/kernel/drivers/infiniband/core/ib_uverbs.ko
Adding module /lib/modules/4.19.0-25-amd64/kernel/drivers/infiniband/hw/mlx5/mlx5_ib.ko
Adding config /etc/initramfs-tools/conf.d/resume
/usr/sbin/mkinitramfs: 333: /usr/sbin/mkinitramfs: cannot create /dev/null: Directory nonexistent
E: no ldd around - install libc-bin
Removing /boot/initrd.img-4.19.0-25-amd64.dpkg-bak
update-initramfs: failed for /boot/initrd.img-4.19.0-25-amd64 with 1.

我从未见过这种情况,也不知道如何最好地进行。不是/dev只读目录吗?我尝试跑步apt auto-clean,但没有解决任何问题。我本来打算运行,apt auto-remove但它想要输出 4GB 的数据,但我不确定是否要让它这样做。

有什么建议如何最好地进行吗?

编辑:我也尝试过udevadm trigger --sysname-match=null这给了我running in chroot, ignoring request。我尝试了通常mknod -m 0666 /dev/null c 1 3告诉我的no such file or directory。一定会喜欢它。

EDIT2:这是我安装相关分区的方法:

root@debian: ~ # mount /dev/sda2 /mnt
root@debian: ~ # mount /dev/sda1 /mnt/boot/efi/
root@debian: ~ # mount --bind /proc /mnt/proc
root@debian: ~ # mount --bind /sys /mnt/sys
root@debian: ~ # mount --bind /dev /mnt/dev
root@debian: ~ # mount --bind /etc/resolv.conf /mnt/etc/resolv.conf
root@debian: ~ # chroot /mnt/ /bin/bash

有一个交换,sda3但我认为这没有必要。

答案1

这可能有帮助

重新启动,撤消您已经完成的操作,然后从 Debian Live 终端:


挂载所需的文件系统

  1. mkdir /mnt/debian
    • mount /dev/sda2 /mnt/debian
  2. cd /mnt/debian && mkdir -p boot/efi
    • mount /dev/sda1 /mnt/debian/boot/efi
  3. mount --types proc /proc /mnt/debian/proc
  4. mount --rbind /sys /mnt/debian/sys
  5. mount --make-rslave /mnt/debian/sys
  6. mount --rbind /dev /mnt/debian/dev
  7. mount --make-rslave /mnt/debian/dev
  8. mount --bind /run /mnt/debian/run
  9. mount --make-slave /mnt/debian/run
  10. 选修的:swapon /dev/sda3
  11. 启用网络:cp --dereference /etc/resolv.conf /mnt/debian/etc/

上面的一些可能会失败,因为这些是根图在他们的最小安装程序上使用。如果是这样,请忽略目录不存在的故障。

继续:

重新创建共享内存

  1. test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
  2. mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm
  3. chmod 1777 /dev/shm /run/shm

我们现在已经创建了必要的安装座,可以继续chroot执行修复:

输入 Chroot

  1. chroot /mnt/debian /bin/bash
  2. source /etc/profile
  3. export PS1="(chroot) ${PS1}"

解释

现在将显示您的提示(chroot) root@debian #,您应该能够完成修复。我相信您的Cannot create /dev/null错误是由于未执行所需文件系统步骤中的步骤 6 和 7 造成的(您需要/dev从 LiveCD 中“借用”)。看了解绑定挂载欲了解更多信息,但简而言之--rbind递归绑定,允许将一个文件系统外部的目录“附加”到另一个文件系统的内部,包括它的子目录。在上面的列表中,我们有效地将/sys/dev、 和“附加”/run到我们的 chroot。通过使用--rslave, 或递归从属,我们现在可以更改 chroot 内的目录和子目录,并保留 chroot 外的更改,保持双方同步。由于系统位于救援棒/CD 上,因此重新启动后不会保留更改,而是在 chroot 中进行了更改,因为它在重新启动之前会被卸载并同步。

答案2

请注意,错误是:

cannot create /dev/null: Directory nonexistent

换句话说,它无法创建,/dev/null因为没有/dev/目录可以创建它

该目录有严重问题/dev/

相关内容