我正在阅读 Gentoo 手册,准备在我的系统上安装 Gentoo。
在 Chrooting 部分中,给出了以下命令:
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
以下是我对这一部分的疑问:
我不是 Linux 专家,但根据我所做的一些挖掘,我发现绑定安装
获取现有的目录树并将其复制到不同的点下。绑定挂载中的目录和文件与原来的相同。一侧的任何修改都会立即反映在另一侧,因为两个视图显示相同的数据。
我不明白的是,在 /mnt/gentoo/sys 中进行绑定挂载有什么帮助?原始目录树位于安装介质中,将被删除。因此,媒体中所做的任何更改都不会反映在这里。使用此命令而不是的目的是什么
mount -t sysfs sysfs /mnt/gentoo/sys
使用rbind的目的是什么?假设绑定挂载的目的只是在 /mnt/gentoo 上创建 /sys 文件,而不是利用绑定挂载的反射功能,为什么要使用 rbind?同样,据我所知,当原始目录下有挂载点被绑定挂载时,就会使用rbind。但是 /sys 下没有任何挂载点吗?
答案1
1.)/sys
不是真正的磁盘文件系统:它是以虚拟文件系统的形式表示和访问内核内部状态的一种手段。它完全基于 RAM,将内容存储/sys
在磁盘上是没有意义的。
从某种意义上说,您可能会说/sys
每次内核启动和检测到硬件时都会从头重新生成;从另一种意义上来说,您可能会说/sys
文件系统中的事物实际上根本没有永久存在,并且只是在您尝试访问它们时根据它们应该表示的实际内核状态按需生成。
当您在安装 Gentoo 的过程中,新安装还没有运行自己的内核,因此新安装还不能有自己的单独内核/sys
。但是安装程序环境有自己的/sys
,并且进行绑定挂载会使“正在构建的系统”借用/sys
安装环境的文件系统树。这使得安装中的某些任务与升级现有系统时完全相同,因此相同的脚本可以用于这两种情况:在升级中,它们按原样使用,但在安装过程中只需要运行 chroot 到/mnt/gentoo
.
2.) 在 下/sys
,可能会或可能不会debugfs
安装为/sys/kernel/debug
,efivarfs
UEFI 变量存储伪文件系统为/sys/firmware/efi/efivars
,以及可能的多个基于 RAM 的文件系统,用于管理各种对照组在下面/sys/fs/cgroup/*
。
下面/dev
至少可以有/dev/pts
、/dev/shm
、/dev/hugepages
和/或/dev/mqueue
、 所有各种基于 RAM 的专用文件系统。
所以使用 rbind 显然会简化事情。