启动分区可以与根分区有一对多关系吗?启动分区对根分区的依赖程度如何?

启动分区可以与根分区有一对多关系吗?启动分区对根分区的依赖程度如何?

我正在 Raspberry Pi 上做一个项目,想让根分区存在于 U 盘上。实际上是多个 U 盘。因此,要从一个工作空间转到另一个工作空间,我只需插入一个新的 USB 并重新启动即可。

但这实际上只有在启动分区很少改变,并且对根分区的了解不多于如何启动操作系统的情况下才有效。

这能行得通吗?启动分区是否只关心根的几个简单部分,而这些部分可以轻松地对所有部分保持一致,还是两者一起发展并纠缠在一起?

我正在运行 Raspian,并打算在同一启动中(一次一个)使用它的根系统的多个版本。

答案1

是的,据我所知,这是完全可能的!

您要做的是将根分区复制到 USB 记忆棒,然后更改/etc/fstab/boot/cmdline.txt使其从外部驱动器而不是 SD 卡上的第二个分区启动。

如果找到了教程,但不幸的是它不是英文的,所以我将尝试用我自己的话来解释这个过程。

  1. 使用唯一的外部驱动器作为 USB 记忆棒来重新启动 Pi(这样我们就可以避免每次启动时都有不同的驱动器号,因为如果您以后想要更换 USB 记忆棒,就不可能有唯一的驱动器 ID)。

  2. 通过 获取驱动器号sudo blkid。应该只有一个,如下所示:/dev/sda1

  3. 通过命令mount我们可以查看它是否已自动挂载。如果没有列出,请继续下一步。如果是,请运行sudo umount /dev/sda1(如果不同,请更正不同的数字)以卸载 USB 棒。

  4. 接下来我们要格式化 USB 驱动器,使其具有适合 Debian 根分区的正确文件系统,最好是ext4。您可以通过运行以下命令来执行此操作:sudo mkfs.ext4 /dev/sda1

  5. 此后,我们需要将 USB 重新安装到临时位置,以便从 SD 卡复制根分区。我们通过运行以下命令执行此操作:sudo mount /dev/sda1 /mnt。(如果命令提示/mnt不存在,请通过运行以下命令创建一个同名文件夹:sudo mkdir /mnt然后重试。

  6. 现在是时候从根分区复制所有数据了,首先使用以下命令切换到顶级目录:cd /然后运行此 tar 命令:sudo tar cf - * --exclude /mnt/* | ( cd /mnt; sudo tar xfp -)。这可能不是最紧凑的解决方案,但对我来说很有效。请记住,这可能需要一段时间,具体取决于您的 SD 卡和 USB 驱动器的速度。

  7. 接下来,我们需要/etc/fstab通过运行来更改包含启动时要挂载的驱动器的sudo nano /mnt/etc/fstab。(请注意,这是在 USB 记忆棒上,因为我们添加了/mnt)您需要更改相应的行,使它们看起来像这样:

/dev/mmcblk0p1 /boot vfat defaults 0 0 /dev/sda1 / ext4 defaults,noatime 0 0

  1. 最后,我们需要告诉 SD 卡上的启动分区改为从 USB 驱动器启动。但在我们决定进行切换之前,最好先备份我们现在要更改的文件,方法是运行:sudo cp /boot/cmdline.txt /boot/cmdline.txt.save

  2. 运行以更改 SD 卡第一个分区上的启动sudo nano /boot/cmdline.txt参数nano。基本上,我们需要将根分区的条目更改为 USB 驱动器。本教程建议在此处输入(1 行):

    dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 noatime quiet rootwait loglevel=1 zram.num_devices=2

    您可以了解这些参数的含义这里

    现在保存并退出nano,下次重新启动时,您的 Raspberry Pi 应该从 USB 记忆棒启动,但当然仍然需要 SD 卡,正如您已经提到的。

只要启动时 USB 驱动器是唯一的驱动器(SD 卡除外),这应该可以工作。您必须让它有点动态,而且除了使用 之外,我看不出还有其他方法可以引用驱动器/dev/diskX

编辑:我忘了说,完成后你需要复制 USB 驱动器,或者对其他驱动器上的安装执行相同的步骤。如果 Raspian 版本(包括已安装的软件包)都相同,我看不出这有什么理由不起作用。

分区/boot非常简单,我在第 9 行中提到的那行基本上就是它所做的一切。它只需要将其交给具有正确文件系统的正确分区,它就可以正常工作。

我希望这对你有帮助。


对于德语人士,我将在这里保留源链接:来源

相关内容