在 BTRFS 子卷中安装 OpenSUSE

在 BTRFS 子卷中安装 OpenSUSE

我正在尝试在单个 BTRFS 文件系统内安装不同的 Linux 发行版,每个发行版使用一个子卷,以避免使用不同的分区浪费可用空间。
我使用的是运行 UEFI 的笔记本电脑,并且我想使用以下分区方案:

sda1:EFI 引导,安装在所有系统上的 /boot/efi 上
sda2:交换
sda3:BTRFS 卷

然后 sda3 将被“分区”到以下子卷中:
/data:数据子卷
/snapshots:快照子卷
/os/DISTID:发行版 DIST 子卷(一个用于发行版)

每个发行版都会安装它的 GRUB2,而我会在 UEFI 中加载我需要的 GRUB,这样每个发行版就不需要知道其他发行版。

我能够安装 Arch 和 Funtoo,但无法将 OpenSUSE 设置为安装到 /os/suse 子卷。
我尝试了以下方法:

  • 将后者设置为默认子卷(如前所述这里)并告诉 OpenSUSE 不要格式化该分区;看起来安装成功,但是无法启动
  • 将子卷安装到安装实时系统中的 /mnt 并告诉 OpenSUSE 忽略这一事实;当尝试重新挂载分区进行实际安装时安装失败
  • 在类似于笔记本电脑环境的虚拟机中安装 OpenSUSE,然后将整个系统复制到子卷,并对 grub 及其设置进行必要的调整(我必须使用 Arch 或 Funtoo 进行的调整); grub 已加载,但启动的系统陷入内核恐慌

我所写的对 GRUB 的调整意味着以下内容:

  • 子卷中的 chroot(使用 arch-chroot 或gentoo/funtoo 安装过程
  • 将 grub 安装在/boot/efiEFI 系统分区(但保留 GRUB 的数据/boot
  • 运行grub-mkconfig -o /boot/grug/grub.cfg以更新引导加载程序

有人有什么想法吗?我错过了什么?

答案1

根据我的经验,OpenSUSE Leap 42.2 / 42.3 安装程序无法处理自定义(例如除了 snapper / @-notation 之外)子卷。更糟糕的是,某些工具(例如引导加载程序安装)存在问题。例如,在我的例子中,grub 核心指向 /boot/grub...,但从 chroot 更新时它应该只是 /grub..。您可以使用此工具检查当前设置:https://github.com/arvidjaar/bootinfoscript

无论如何,这是我在安装后进行设置或用于可启动备份的一种方法。

避免安装程序创建数十个子卷,只需安装在分区/默认子卷的根目录中(如果有效)。

安装完成后,启动救援系统并

  1. 将已安装的系统目录移动到所需的子卷,以便在该子卷下拥有常用的 Linux 文件系统树。如有必要,还要修复主文件夹。
  2. 修复 /etc/fstab,添加正确的 subvol=/myrootsubvol 选项
  3. 挂载带子卷的分区(未来/)、挂载boot、挂载boot/efi
  4. 现在在已安装的子卷之外创建第二个目录。将所有内容绑定安装到该目录中。

    mount -o bind "/mnt/partition_root/sysroot_subvol" "/mnt/temp_sys_prep" 
    mount -o bind "/mnt/partition_root/sysroot_subvol/boot" "/mnt/temp_sys_prep/boot" 
    mount -o bind "/mnt/partition_root/sysroot_subvol/boot/efi" "/mnt/temp_sys_prep/boot/efi" 
    mount -o bind /proc "/mnt/temp_sys_prep/proc"
    mount -o bind /sys "/mnt/temp_sys_prep/sys"
    mount -o bind /dev "/mnt/temp_sys_prep/dev"    
    
  5. 现在使用通常的 chroot 方法/mnt/temp_sys_prep在 chroot 中您可以使用

    • grub2-install --no-nvram --recheck --efi-directory=/boot/efi /dev/disk/by-id/scsi-SATA...,
    • grub2-mkconfig -o /boot/grub2/grub.cfg,
    • mkinitrd

    我不确定正确的顺序; mkinitrd 可能也调用 grub。

  6. 退出 chroot 并按相反顺序卸载。再次使用工具检查 grub2 core 现在是否指向正确的路径

相关内容