可 chroot 的 root fs 目录,一个在启动期间安装在 / 处

可 chroot 的 root fs 目录,一个在启动期间安装在 / 处

假设我有一个硬盘,其中一个分区/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/fstabosBext4

另一种写法:

我想要一个分区来托管多个“根文件系统目录”,并且能够在/启动时挂载任一目录。

我总是将整个分区专用于/.不知道该怎么办子目录在分区上。

我当前的/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 到的位置非常简单。

相关内容