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

Pat*_*ick 108 linux debian chroot

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

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

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

在主机中:

  mount --bind /proc <chroot dir>/proc 
Run Code Online (Sandbox Code Playgroud)

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

  mount -t proc none /proc
Run Code Online (Sandbox Code Playgroud)

我应该使用哪一种,有什么区别?

gac*_*rux 140

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/
Run Code Online (Sandbox Code Playgroud)

  • 就我而言(也是 Ubuntu),我也需要一个“mount -o bind /dev/pts dev/pts”。 (4认同)
  • 他们似乎也在 ubuntu 中为我工作。 (2认同)
  • 截至 2019 年,ArchLinux wiki 现在为 `sys` 和 `dev` 执行 `--rbind`。 (2认同)

Zif*_*fre 53

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

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

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


小智 16

Gentoo手册特别提出这两个命令用于重新安装的/ proc和/ dev。我已经用过它们好几次了。

mount -t proc none /mnt/chroot/proc
mount -o bind /dev /mnt/chroot/dev
Run Code Online (Sandbox Code Playgroud)

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

ln /sys /mnt/chroot/sys
Run Code Online (Sandbox Code Playgroud)

  • 你不能像你为 /sys 建议的那样硬链接一个目录(通常),如果你使用符号链接,它会在你 chroot 后立即中断。 (17认同)