在 chroot 环境中挂载 dev、proc、sys?

在 chroot 环境中挂载 dev、proc、sys?

我正在尝试使用自定义选择的软件包创建 Linux 映像。
我尝试做的是手工制作我将在 XO 笔记本电脑上使用的软件包,因为在真正的 XO 硬件上编译软件包需要很长时间,如果我可以构建我需要的所有软件包并将映像刷入 XO,我就可以节省时间和空间。

当我尝试安装某些软件包时,由于缺少 proc、sys、dev 目录,配置失败。因此,我从其他地方了解到,我需要将主机 proc、... 目录“挂载”到我的 chroot 环境中。

我看到了两种语法,但不确定该使用哪一种。

在主机中:

  mount --bind /proc <chroot dir>/proc 

另一种语法(在 chroot 环境中):

  mount -t proc none /proc

我应该使用哪一个?它们有什么区别?

答案1

对于/proc/sys,我想您可以使用任一方法。它们都是特殊的文件系统,因此可以多次重新创建它们(绑定挂载方法使用与主机系统完全相同的挂载,而另一种方法使用新的挂载)。我总是看到指南中推荐绑定挂载,所以我会使用它。据我所知,没有真正重要的区别。

但是,/dev通常是由 udev 管理的 tmpfs 挂载,因此它必须与主机上的文件系统实际相同。这意味着您需要使用绑定挂载方法。

如果这个 chroot 将存在一段时间,您可以将这些条目放入/etc/fstab主机系统以简化事情。

答案2

Arch Linux 维基建议以下命令:

cd /mnt/arch # or where you are preparing the chroot dir
mount -t proc /proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/

答案3

Gentoo 手册专门调用这两个命令来重新挂载 /proc 和 /dev。我已经用过它们好几次了。

mount -t proc none /mnt/chroot/proc
mount -o bind /dev /mnt/chroot/dev

我怀疑 /sys 只是一个普通文件夹,所以你应该能够建立一个硬链接。

ln /sys /mnt/chroot/sys

答案4

我试图通过实时 USB 重置笔记本电脑上的 grub 密码,因此我也需要使用 chroot。

目标系统是 Ubuntu 16.04,我使用的是 Elementary Live USB。以下命令帮助我设置了 chroot:

mount /dev/nvme0n1p1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs /sys /mnt/sys
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts

从这里我可以进入 chroot 并update-grub /dev/nvme0n1修复密码。

在添加最后两个--bind挂载之前,update-grub出现了很多关于找不到设备的错误,但选择了 Linux 分区,缺少最后一个 Windows 分区。不过,我猜 Windows 部分只是我的系统的一个怪癖。

请记住umount /mnt/dev/pts,然后umount /mnt/dev在卸载之前完成其余操作/mnt

更多背景信息,这个 chroot 提示可能有帮助。

相关内容