openSUSE Tumbleweed 中新的 BtrFS 默认子卷结构

本周更新的 openSUSE Tumbleweed 20180117 快照中有个重要的变化就是引入了新的 BtrFS 默认子卷结构。任何使用默认的 BtrFS root 文件系统新安装的 Tumbleweed 系统都不再会有多个 /var 目录下的子卷(如 /var/lib/mysql/var/cache 等)而只有一个唯一的 /var 子卷。这样做的好处是简化了快照和回退操作且避免了回退时候丢失用户保存在 /var 中的数据。

这种改变也可以提升那些将数据存储在 /var 中的应用的性能,因为系统默认关闭了 /var 上的 BtrFS 的 CoW(Copy-on-Write)特性。比如数据库或者是虚拟机镜像存放在 /var 目录中的情况。还有就是利于 openSUSE Kubic (基于 openSUSE Tumbleweed 的 SUSE Container as a Service Platform)的开发,因为多数 /var 的部分都是只读的,而它被认为是 openSUSE Kubic 的只读根文件系统。

随着这一改变,之前很多存放在 /var 中的重要系统文件现在都默认放在 /usr 目录中。例如 RPM 的数据库 /var/lib/rpmdb 就移到了 /usr 下面。当然设置了连接以向后兼容。还有 /var/adm/fillup-templates 移动到了 /usr/share/fillup-templates。随着新版本 rpmlint 即将发布,它将会阻止将文件存储在旧的 /var/adm/fillup-templates 目录下。

但是社区的 Richard Brown 表示目前不会将现有的用户数据从旧结构转移到新结构,除非有人能提供可行的好方法。不过 Linux 的好处之一是用户数据很少(不是没有)写在 /home 的地方,基本不要担心系统的重新设置之类的,重装系统还不是分分钟搞定的事情么?

注:今天尝试了一下,下面指出的问题已经不存在了。楼主已经重新安装了系统(只覆盖了 root 分区而没有动 /home 分区)来采用新的子卷结构。(2018.06.18)

不过重装系统的话还有一点要注意的。安装器(AutoYaST)默认推荐的子卷结构是新的结构,总共 8 个子卷(subvolume),如下,

@
@/var          (no Copy on Write)
@/usr/local
@/tmp
@/srv
@/opt
@/boot/grub2/x86_64-efi
@/boot/grub2/i386-pc

但是如果安装的时候发现其推荐的分区不合适而决定自行使用「专家模式(Expert mode)」来重新安排分区的话,此操作之后的子卷结构有可能是类似于,

@
/var           (no Copy on Write)
/usr/local
/tmp
/srv
/opt
/boot/grub2/x86_64-efi
/boot/grub2/i386-pc

注意上面前导的 @ 不见了。

所以对于已有的系统而言,除非用户打算采用安装器推荐的布局(也许需要备份 /home 分区,等安装完成后再导入原来的用户数据),否则还是需要再等等。©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/new-default-subvolume-layout-of-btrfs-root-in-opensuse-tumbleweed/>。转载请保留此信息及相应链接。