我正在 Raspberry Pi 上做一个项目,想让根分区存在于 U 盘上。实际上是多个 U 盘。因此,要从一个工作空间转到另一个工作空间,我只需插入一个新的 USB 并重新启动即可。
但这实际上只有在启动分区很少改变,并且对根分区的了解不多于如何启动操作系统的情况下才有效。
这能行得通吗?启动分区是否只关心根的几个简单部分,而这些部分可以轻松地对所有部分保持一致,还是两者一起发展并纠缠在一起?
我正在运行 Raspian,并打算在同一启动中(一次一个)使用它的根系统的多个版本。
答案1
是的,据我所知,这是完全可能的!
您要做的是将根分区复制到 USB 记忆棒,然后更改
/etc/fstab
并/boot/cmdline.txt
使其从外部驱动器而不是 SD 卡上的第二个分区启动。
如果找到了教程,但不幸的是它不是英文的,所以我将尝试用我自己的话来解释这个过程。
使用唯一的外部驱动器作为 USB 记忆棒来重新启动 Pi(这样我们就可以避免每次启动时都有不同的驱动器号,因为如果您以后想要更换 USB 记忆棒,就不可能有唯一的驱动器 ID)。
通过 获取驱动器号
sudo blkid
。应该只有一个,如下所示:/dev/sda1
。通过命令
mount
我们可以查看它是否已自动挂载。如果没有列出,请继续下一步。如果是,请运行sudo umount /dev/sda1
(如果不同,请更正不同的数字)以卸载 USB 棒。接下来我们要格式化 USB 驱动器,使其具有适合 Debian 根分区的正确文件系统,最好是
ext4
。您可以通过运行以下命令来执行此操作:sudo mkfs.ext4 /dev/sda1
。此后,我们需要将 USB 重新安装到临时位置,以便从 SD 卡复制根分区。我们通过运行以下命令执行此操作:
sudo mount /dev/sda1 /mnt
。(如果命令提示/mnt
不存在,请通过运行以下命令创建一个同名文件夹:sudo mkdir /mnt
然后重试。现在是时候从根分区复制所有数据了,首先使用以下命令切换到顶级目录:
cd /
然后运行此 tar 命令:sudo tar cf - * --exclude /mnt/* | ( cd /mnt; sudo tar xfp -)
。这可能不是最紧凑的解决方案,但对我来说很有效。请记住,这可能需要一段时间,具体取决于您的 SD 卡和 USB 驱动器的速度。接下来,我们需要
/etc/fstab
通过运行来更改包含启动时要挂载的驱动器的sudo nano /mnt/etc/fstab
。(请注意,这是在 USB 记忆棒上,因为我们添加了/mnt
。)您需要更改相应的行,使它们看起来像这样:
/dev/mmcblk0p1 /boot vfat defaults 0 0
/dev/sda1 / ext4 defaults,noatime 0 0
最后,我们需要告诉 SD 卡上的启动分区改为从 USB 驱动器启动。但在我们决定进行切换之前,最好先备份我们现在要更改的文件,方法是运行:
sudo cp /boot/cmdline.txt /boot/cmdline.txt.save
。运行以更改 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 行中提到的那行基本上就是它所做的一切。它只需要将其交给具有正确文件系统的正确分区,它就可以正常工作。
我希望这对你有帮助。
对于德语人士,我将在这里保留源链接:来源。