对于像 ext4 这样的文件系统,如果我想尝试新的 Linux 发行版,我必须首先缩小现有分区,然后创建一个锁定到特定大小的新分区,以便我可以安装发行版。这有一些缺点:
- 必须立即向发行版提交一定数量的存储
- 如果此存储空间未使用,则很难重新分配它
- 磁盘操作有些棘手,尤其是移动事物以创建连续的可用空间
BTRFS 子卷可以解决这个问题吗?我真的可以将整个磁盘作为卷/分区,然后我的引导分区、交换分区、根分区和主分区可以作为子卷存在并占用它们占用的空间吗?我可以随时创建一个初始化为零大小的新子卷吗?真的是这样吗?
答案1
我已经部分地做到了。
从 OpenSUSE 安装(btrfs
默认使用)中,我有:
- 创建了一个子卷 (
btrfs subvol create /debian
), - 安装
debootstrap
, deboostrap --arch=amd64 stable /debian http://deb.debian.org/debian/
,- 在a中
chroot /debian
,安装btrfs-tools
,然后是内核,并设置密码! - 返回 OpenSUSE root shell 修改
/boot/grub2/grub.cfg
,添加一项。
通常,我会复制一个 OpenSUSE 条目,更改名称 ( ) ,Debian
并在行上添加linux
.rootflags=subvol=@/debian
我还使用 Debian 内核和 initrd 文件(linux=
和initrd=
行)。注意,GRUB搜索默认根FS,那么两个文件都在/debian/boot/
)
重新启动...我有一个 Debian 启动项,可以从 debian 子卷启动 Debian。默认情况下它不会挂载任何内容,但mount -o subvol=@/home /dev/sda2 /home
例如可以挂载 OpenSUSE/home
子卷并使其在 Debian 上也可用。当然,编辑/etc/fstab
会使事情永久化。 (并且使用 UUID 更好)。
此安装并不完全令人满意。在 Suse 上更新内核将删除 GRUB Debian 条目。并且在 Debian 上更新内核不会更新 GRUB 配置。 (GRUB os-prober 仅扫描分区,而不扫描子卷)。
但是,我的设置证明我们可以在同一分区上安装多个 Linux btrfs
。
注意 OpenSUSE 命名根子卷@
。我们可以用 来查看它btrfs list /
。我不知道其他发行版是否使用其他约定。第一行btrfs subvol show /debian
给出了要使用的名称rootlags=subvol=
答案2
是的你可以。看看每个大牌发行版:
- 通过使用几乎任何其他最新发行版的现有安装中的标准 Gentoo 安装过程,可以通过这种方式轻松安装 Gentoo。
- Alpine Linux 可以通过使用其迷你根文件系统之一(而不是“正常”安装方法)以这种方式轻松安装,再次从几乎任何发行版的现有安装中进行安装。
- Arch Linux 可以大多使用正常的安装过程可以轻松地以这种方式安装,但需要对引导加载程序配置进行特殊处理。
debbootstrap
通过使用现有安装(专为从实时系统安装而设计),然后手动配置引导加载程序,可以相对轻松地以这种方式安装 Debian 。- 理论上,Ubuntu 可以像 Debian 一样使用这种方式安装
debbootstrap
,但 Ubuntu 开发人员完全不支持 AIUI 这样的安装,因此它可能无法可靠地工作。 - openSUSE、Fedora 和大多数 RHEL 克隆(CentOS、Alma、Rocky、Oracle Linux 等)理论上可以通过这种方式安装,但在设置分区时需要特殊的手动配置。
然而,这种方法存在一些实际问题:
- 虽然你可以安装大多数发行版都是这种方式,但它们通常对管理此类设置没有很大的支持。特别是,您可能会遇到引导加载程序配置问题,特别是如果您选择默认使用不同引导加载程序的发行版。
- 与上述观点相关的是,大多数人并不使用这种类型的设置,因此它没有很好的文档记录,也没有经过充分的测试,如果您遇到问题,您可能很难找到支持。
- BTRFS 子卷依赖于文件系统本身。如果一个发行版破坏了文件系统,你就输了全部发行版,而不仅仅是破坏文件系统的发行版。
- BTRFS 子卷不是块设备。这与 ZFS zvols 或 LVM 逻辑卷不同。理论上,您可以通过在其上创建交换文件来使用一个交换空间,但无论如何您可能只需要一个共享交换分区(如果您要使用多重引导设置,则几乎不应该使系统休眠,这将是每个发行版需要单独交换分区的唯一原因)。
一般来说,使用它会更好左心室容量代替平面分区并为每个发行版的根文件系统创建一个逻辑卷(加上一个用于/home
交换空间,一个用于交换空间)。您仍然需要为每个发行版设置一些基准空间量,但您可以使用 LVM 轻松地动态调整内容,前提是您拥有可以在线调整大小(并且可以缩小)的文件系统。请注意,在此设置中,您仍然需要一个“常规”引导分区(和 EFI 系统分区)。与您建议的 BTRFS 设置不同,这是几乎所有主要发行版都很好地支持,并且只要您小心地进行初始设置,它基本上就可以工作,除了初始安装之外无需任何手动操作。
答案3
我确实使用 ZFS 进行了这样的设置 - 这个概念应该与 btrfs 类似。
我使用了3个分区:
- ESP 具有重新寻找在上面
- 交换分区(所有发行版通用)
- 一个 ZFS 池,其中每个发行版
/
都是一个单独的卷(btrfs 中的子卷),并且/home
很常见
在 ESP 上的 EFI 目录下,每个发行版都有一个子目录(命名为与发行版的重新查找图标名称相匹配)。这些目录是绑定安装的,就像在各自的发行版/boot
中一样/etc/fstab
(IIRC 某些东西不喜欢boot
成为符号链接,所以我使用了绑定安装),并且它们包含内核、initramfs 和带有refind_linux.conf
引导参数的文件。
Refind 自动检测每个目录作为启动项,并默认启动最新的(按时间戳)内核 - 无需处理复杂的 grub 配置,可以从每次安装中删除 grub 软件包。
唯一的潜在问题是initramfs-tools
无法在 FAT32 分区上生成 initramfs(它想要创建符号链接),所以我dracut
到处使用它,因为无论如何它都很优越。