我正在成功使用 btrfs,并且幸运的是拥有独立的主分区和系统分区。
使用 Ubuntu 13.10 并想要测试 14.04,如何使用 btrfs 文件系统执行此操作?
系统有一个 EFI 分区,但没有额外的启动分区。/boot
位于系统分区内(/@/boot
)。
答案1
是的,你可以。这是我现在用的。另一个很酷的事情是你可以床铺安装许多类似的操作系统(例如 Ubuntu 和 Linux Mint)后的分区,以节省大量硬盘空间。
诀窍是将默认子卷:@
和重命名@home
为分发安装所特有的名称,例如@
->@mint
或将@trusty
和@home
重命名为@homemint
或@hometrusty
。
这可以在安装第一个系统之后、安装第二个系统之前的任何时刻完成。最安全的方法是拍摄子卷的快照,例如:
- 将系统 btrfs 分区的根子卷(假定为 /dev/sda3)挂载到某处,例如 /mnt:
sudo mount btrfs /dev/sda3 /mnt
- 可选:列出已经存在的子卷 - 只需检查您不会在以下步骤中创建名称冲突:
sudo btrfs subvolume list /mnt
- 克隆主@子卷:
sudo btrfs subvolume snapshot /mnt/@ /mnt/@trusty
- 克隆主页。强烈不建议在不同系统间共享整个主页子卷。(对于共享文档,创建另一个子卷,或者更好的是创建单独的分区,将其与 ~/Documents、~/Desktop 等链接并共享):
sudo btrfs subvolume snapshot /mnt/@home /mnt/@trustyhome
- 在新的根 @trusty 上进行编辑
/mnt/@trusty/etc/fstab
以反映 @home -> @trustyhome 子卷的变化(和 @ -> @trusty,但该步骤并非严格必要的,因为当系统读取 @trusty/etc/fstab 时,它必须已经为根假定了正确的子卷)。 - 编辑
/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
。 - 重新启动并执行
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。