![Debian 10 update-initramfs 失败:无法创建 /dev/null](https://linux22.com/image/228951/Debian%2010%20update-initramfs%20%E5%A4%B1%E8%B4%A5%EF%BC%9A%E6%97%A0%E6%B3%95%E5%88%9B%E5%BB%BA%20%2Fdev%2Fnull.png)
尝试通过 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 终端:
挂载所需的文件系统
mkdir /mnt/debian
mount /dev/sda2 /mnt/debian
cd /mnt/debian && mkdir -p boot/efi
mount /dev/sda1 /mnt/debian/boot/efi
mount --types proc /proc /mnt/debian/proc
mount --rbind /sys /mnt/debian/sys
mount --make-rslave /mnt/debian/sys
mount --rbind /dev /mnt/debian/dev
mount --make-rslave /mnt/debian/dev
mount --bind /run /mnt/debian/run
mount --make-slave /mnt/debian/run
- 选修的:
swapon /dev/sda3
- 启用网络:
cp --dereference /etc/resolv.conf /mnt/debian/etc/
上面的一些可能会失败,因为这些是根图在他们的最小安装程序上使用。如果是这样,请忽略目录不存在的故障。
继续:
重新创建共享内存
test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm
chmod 1777 /dev/shm /run/shm
我们现在已经创建了必要的安装座,可以继续chroot
执行修复:
输入 Chroot
chroot /mnt/debian /bin/bash
source /etc/profile
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/
。