当 chroot 进入“替换”发行版时,应该绑定(或不)绑定安装(或不绑定)哪个 proc、sys 等?

Tob*_*ler 10 chroot mount proc sysfs

这个对另一个问题的回答基本上归结为chroot进入另一个 Linux 发行版,以便主要使用它来替代其过于受限(但不可替代)的父发行版。chroot我想更好地理解运行之前的建议操作是:

cp /etc/resolv.conf etc/resolv.conf
cp -a /lib/modules/$(uname -r) lib/modules
mount -t proc archproc proc
mount -t sysfs archsys sys
mount -o bind /dev dev
mount -t devpts archdevpts dev/pts
Run Code Online (Sandbox Code Playgroud)
  • 复制resolv.conf很清楚(网络/互联网访问),虽然我不确定modules- 当chroot进入 stage3 Gentoo 系统时,这实际上似乎没有必要,对吧?
  • 但是为什么是proc,sysdev/pts重新安装而不是使用绑定安装?这种情况的实际区别是什么,哪个“更正确”?
  • 本HOWTO绑定坐骑procdev,但既不dev/pts也不sys被安装在所有。此外,它复制/etc/{hosts,fstab}到新的根。那有意义吗?我不应该也包括在内/etc/mdadm.conf吗?

Mar*_*iae 9

复制 /etc/resolv.conf 以免丢失 DNS。

复制 /lib/modules 是因为可能需要使用一些在设置 chroot 时不需要的硬件组件。您必须记住,您在 OP 中提到的原始问题涉及用 Arch Linux 替换 NAS 操作系统。因此,您将需要以太网驱动程序、可能是无线驱动程序、各种 USB 组件等。复制 /lib/modules 文件夹可确保新环境能够处理其未来的任务。

关于重新安装与绑定安装,您确实是正确的。根据您引用的帖子的答案,chroot上的Arch Linux Wiki 页面确实使用了您指定的重新安装和绑定安装:

cd /mnt/arch
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -t devpts pts dev/pts/
Run Code Online (Sandbox Code Playgroud)

(我认为这显示了从这篇文章中复制的行的语法是错误的:要安装的开发者在安装点之前)。

然而,chroot 上Ubuntu 手册页讲述了一个不同的故事:

sudo mount -o bind /proc /var/chroot/proc
Run Code Online (Sandbox Code Playgroud)

这里 /proc 是绑定安装的,而不是重新安装的。

我实际上已经尝试了这两种方法,经过简短的测试运行后,我一直无法注意到任何区别。诚然,这不是一个测试,因此我将在这里说明我的情况,它应该没有太大的不同。


pet*_*rph 6

  • /etc/resolv.conf- 您需要此文件来解析 DNS 请求。在某些情况下没有必要:

    1. 一个 DHCP 客户端在 chroot 中可用,它确实被执行并且 DHCP 服务器返回适当的信息(通常是这种情况)。

    2. /etc/resolv.conf对 chroot 内部的网络(或更准确地说,从依赖 的常用应用程序进行 DNS 查询)不感兴趣。

  • /lib/modules/$(uname -r)- 在您可能需要为活动内核加载任何其他模块的情况下是有意义的。如果没有这个,你会被你目前运行的任何东西困住。因此,如果您打算长时间运行 chroot 系统,您可能应该这样做。另一方面,在这种情况下,您可能应该pivot_root改为使用(这通常是 initrd 在其生命周期结束时所做的)。如果您只需要这样做,例如从 chroot 安装引导加载程序,则没有必要(因为必须加载所有需要的驱动程序,以便您无论如何都能够执行 chroot 本身)。

  • /proc并且/dev相当明显 - 这些包含基本的系统接口。

  • /sys是IIRC不是那个广泛应用于早在2007年这是什么Slackware的(这本身是相当保守的)操作指南发布日期。如今,如果没有它,您的系统可能会以某种方式失败(例如,一旦有人尝试枚举某种类型的硬件)。

  • /dev/pts- 多年来,/dev树的处理方式发生了一些变化。在某些时候,设备/dev/pts被处理devfs- 例如,请参阅此 LKML 线程以讨论可能的问题。

  • 绑定安装 - 绑定安装有一些有趣的方面(在mount(8)手册页中有很好的解释)。例如,如果您有:

    /some/device on /x/a (rw)
    /x/a/A on /x/b (rw)
    
    Run Code Online (Sandbox Code Playgroud)

    然后以/x/a只读方式重新挂载,您将无法更改/x/B. 这是可以理解的,但可能会让您第一次感到惊讶。另一个很好的问题是/x/b在上面的例子中当你umount /x/a. 对我来说远非显而易见,您仍然可以访问它下面的树。因此绑定安装可能很棘手。在功能上,当在整个文件系统上使用时,它是相同的。

  • 其他内容/etc/- 复制有用的相关配置绝对有意义。复制例如/etc/passwd/etc/shadow、以及 的服务器密钥/etc/groups 可能有意义sshd