![可 chroot 的 root fs 目录,一个在启动期间安装在 / 处](https://linux22.com/image/189568/%E5%8F%AF%20chroot%20%E7%9A%84%20root%20fs%20%E7%9B%AE%E5%BD%95%EF%BC%8C%E4%B8%80%E4%B8%AA%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%9C%9F%E9%97%B4%E5%AE%89%E8%A3%85%E5%9C%A8%20%2F%20%E5%A4%84.png)
假设我有一个硬盘,其中一个分区/dev/sdb1
包含以下内容:
% sudo mount /dev/sdb1 /mnt
% cd /mnt
% ls
osA/ osB/
% ls *
osA:
bin boot/ dev/ etc/ home/ lib lib64 lost+found/ mnt/
opt/ proc/ root/ run/ sbin srv/ sys/ tmp/ usr/ var/
osB:
bin boot/ dev/ etc/ home/ lib lib64 lost+found/ mnt/
opt/ proc/ root/ run/ sbin srv/ sys/ tmp/ usr/ var/
我希望以某种方式在启动过程中挂载osA
目录(可能),并且能够在以后需要时将其更改为该目录。我希望在fs 上完成此操作(如果可能)。这可行吗?/dev/sdb1
/
/etc/fstab
osB
ext4
另一种写法:
我想要一个分区来托管多个“根文件系统目录”,并且能够在/
启动时挂载任一目录。
我总是将整个分区专用于/
.不知道该怎么办子目录在分区上。
我当前的/etc/fstab
条目(整个分区专用于/
):
UUID=0a7baeae-857d-11eb-8dcd-0242ac130003 / ext4 rw,relatime 0 1
我正在运行Archlinux。
动机:
- 有时我会因为包管理器的问题而不得不重新安装系统。我认为这种方法可能比从头开始设置所有内容更快,并且可以返回到之前的设置。
- 将此视为尝试发行版和包管理器的一种可能方法,只需切换
/
安装的内容即可 - 通过仅拥有一
/dev/sdb
我不必调整操作系统和数据分区的大小,只需将数据作为“数据”文件夹与“osA”和“osB”并排
编辑1:
如果您对我如何更清楚地提出问题有任何建议 - 请告诉我。
这些问题似乎有些相关,尽管第一个似乎深入研究了一些不相关的事情,第二个没有得到答案,检查第三个:39423 374806 206493 613179
我思考我想看看我是否可以绑定安装/
一次已经安装在某个地方(以前从未/etc/fstab
这样/dev/sdb1
做过,不知道它是否会起作用 - 可以尝试这个并发布结果 - 欢迎见解)。
编辑2:
意识到要绑定安装,我首先需要一个安装点,并且没有安装点/
本身就无法拥有一个安装点。
答案1
我想你已经驳回了第一个问题的答案太快了。我正要写几乎相同的答案。因此,为了讨论具体如何做到这一点,我将遵循该答案。
为什么需要使用 initramfs 来执行此操作...
大多数挂载点在 中定义/etc/fstab
。然而,这[几乎总是]存储在根文件系统( /
)上。您无法在根目录上存储的文件中配置哪个分区是根目录。您需要一些东西来配置哪个分区作为 root 挂载前 /etc/fstab
可以阅读。 initramfs 的工作是挂载 root ( /
),然后对其进行 chroot。
重要的是要了解您的系统已经挂载了不同的文件系统,因为它是第一个根文件系统,然后在其他地方挂载您选择的根文件系统,然后调用 chroot 进入该文件系统。
正如另一个答案所说,initramfs 中[通常]没有任何配置选项来使其 chroot 到子目录中。但修改脚本/init
运行并因此修改脚本将 chroot 到的位置非常简单。