读完这篇文章后回答关于绑定挂载,我的想法是Linux中的绑定挂载是在目录树中的另一个点下复制部分或整个文件系统。
所以当我们写下面的命令时
mount --rbind /dev dev
mount --rbind /run run
这意味着将系统的/dev
和绑定/run
到本地 dev 下的点并运行。这意味着系统的 /dev 和 /run 的内容将被复制到目录 dev 下并在本地运行。另外,如果我对 dev 进行任何更改并运行,它们将不会反映在系统的 /dev 和 /run 中。正确的 ? 但反过来会怎样呢?
所以我的问题是为什么在我们运行之前需要像下面这样的安装
update-initramfs -u
它需要从 /run 和 /dev 目录获取哪些信息?如果绑定安装无法更改信息,那么默认情况下它仅用于只读访问吗?
答案1
仅在某些特殊情况下才需要执行此操作,例如当您 chroot 到另一个系统并尝试生成或更新 initramfs 映像时。
要理解为什么我们确实需要绑定这些路径,您必须知道它initramfs
是什么以及为什么我们实际上需要它:
许多 Linux 发行版都附带一个通用的 Linux 内核映像,该映像是发行版开发人员专门为在各种硬件上启动而创建的。此通用内核映像的设备驱动程序作为可加载内核模块包含在内,因为将许多驱动程序静态编译到一个内核中会导致内核映像变得更大,可能太大而无法在内存有限的计算机上启动。这就提出了检测和加载在引导时安装根文件系统所需的模块的问题,或者就此而言,推断根文件系统在哪里或是什么。[1]
结论:在我的环境中,在生成或更新 initramfs 时,我必须知道我的设备是什么,例如:我有什么样的磁盘以及我应该在“initramfs”中放入什么样的工具/模块来处理系统启动?这些数据从哪里来?
像这样的路径/dev
包含很多关于这类东西的有用信息,这就是我们复制像这样的路径的原因/dev
。
从man hier
:
/dev 特殊或设备文件,指的是物理设备。
关于您的另一个问题,据我所知,当您更改任何安装位置中的任何内容时,它将反映实际的文件系统,您可以轻松地自己测试:
$ sudo mount --rbind ~/Documents /mnt
$ touch ~/mnt/foo
$ ls ~/Documents/foo
/home/ravexina/Documents/foo
答案2
另外,如果我对 dev 进行任何更改并运行,它们将不会反映在系统的 /dev 和 /run 中。正确的?
错误,至少总体而言是错误的。
可以为绑定安装配置四种不同类型的行为,默认情况下“相等副本”。看man 8 mount
:
--make-shared
--make-slave
--make-private
--make-unbindable