我可以使用 btrfs 在同一个分区上安装两个发行版吗?

我可以使用 btrfs 在同一个分区上安装两个发行版吗?

我正在成功使用 btrfs,并且幸运的是拥有独立的主分区和系统分区。

使用 Ubuntu 13.10 并想要测试 14.04,如何使用 btrfs 文件系统执行此操作?

系统有一个 EFI 分区,但没有额外的启动分区。/boot位于系统分区内(/@/boot)。

答案1

是的,你可以。这是我现在用的。另一个很酷的事情是你可以床铺安装许多类似的操作系统(例如 Ubuntu 和 Linux Mint)后的分区,以节省大量硬盘空间。

诀窍是将默认子卷:@和重命名@home为分发安装所特有的名称,例如@->@mint或将@trusty@home重命名为@homemint@hometrusty

这可以在安装第一个系统之后、安装第二个系统之前的任何时刻完成。最安全的方法是拍摄子卷的快照,例如:

  1. 将系统 btrfs 分区的根子卷(假定为 /dev/sda3)挂载到某处,例如 /mnt:sudo mount btrfs /dev/sda3 /mnt
  2. 可选:列出已经存在的子卷 - 只需检查您不会在以下步骤中创建名称冲突:sudo btrfs subvolume list /mnt
  3. 克隆主@子卷:sudo btrfs subvolume snapshot /mnt/@ /mnt/@trusty
  4. 克隆主页。强烈不建议在不同系统间共享整个主页子卷。(对于共享文档,创建另一个子卷,或者更好的是创建单独的分区,将其与 ~/Documents、~/Desktop 等链接并共享):sudo btrfs subvolume snapshot /mnt/@home /mnt/@trustyhome
  5. 在新的根 @trusty 上进行编辑/mnt/@trusty/etc/fstab以反映 @home -> @trustyhome 子卷的变化(和 @ -> @trusty,但该步骤并非严格必要的,因为当系统读取 @trusty/etc/fstab 时,它必须已经为根假定了正确的子卷)。
  6. 编辑/boot/grub/grub.cfg:修改所有调用当前内核的行(它们看起来像这样:)linux /vmlinuz-3.16.0-50-generic.efi.signed root=UUID=9e571eab-4c88-4913-baa3-8d41d94f73d5 ro recovery nomodeset rootflags=subvol=@,并将 改为rootflags=subvol=@rootflags=subvol=@trusty这样内核就知道要引导什么。当你这样做时,奇迹般地,这个设置会被保留下来update-grub
  7. 重新启动并执行sudo mount并验证是否使用了正确的新子卷而不是@@home<-这一步非常重要,否则你将要丢失数据

一旦您重命名了子卷,并确保系统启动,并确保没有@-@home安装下一个操作系统,并进行一处修改:使用单独的/boot分区(800MB 应该足够了)。如果您的分区使用 GPT 而不是 MBR,这将有所帮助,幸运的是,这已成为一种常态。(要快速判断您是否在使用 GPT,请查看主板 BIOS 设置中是否使用 UEFI 启动。UEFI 仅适用于以 GPT 格式设置的分区。

如果您不设置单独的/boot分区 - 系统将无法启动,但您可以按照@HullCityFan852 的评论来修复它:

如果您没有单独的 /boot 分区,则步骤 7 中的重新启动将失败,您将停留在 grub 救援提示符处。在此提示符下,键入set prefix=($root)/@mint/boot/grub(替换@mint为您的发行版子卷的路径),然后键入insmod normal并最后normal加载 Grub 菜单并启动您的发行版。启动后,键入sudo update-grub && sudo grub-install以使更改永久生效

在分区对话框中,使用自定义分区并将系统安装在与第一个操作系统相同的分区上。只需确保告诉安装程序不格式化那个分区!

安装完成后,你可以设置 grub 的链式加载,这样你就可以选择一个安装中的 grub 作为另一个安装中的条目,反之亦然(如何操作?参见推荐使用哪种方式来链式加载单独的 Ubuntu /boot 分区)。

通过拥有单独的/boot分区,我不必担心在自动内核升级期间一个 Linux 会干扰另一个 Linux 的 grub。

相关内容