zfs-root Linux 系统使用什么 ZFS 文件结构?

zfs-root Linux 系统使用什么 ZFS 文件结构?

在 ZFS 中,您可以构建文件系统层次结构,以包含每个文件系统的不同 fs 属性。例如,在一个区域中压缩,在其他区域中 no-exec/suid,noatime。

例如,FreeBSD 的 HOWTO 建议创建以下文件系统:

zfs create -o compression=off   -o atime=off                    zroot/root
zfs create -o compression=on    -o setuid=off                   zroot/tmp
zfs create -o                                                   zroot/usr
zfs create -o                                                   zroot/usr/home
zfs create -o compression=lzjb                  -o setuid=off   zroot/usr/ports
zfs create -o compression=off   -o exec=off     -o setuid=off   zroot/usr/ports/distfiles
zfs create -o compression=off   -o exec=off     -o setuid=off   zroot/usr/ports/packages
zfs create -o compression=lzjb  -o exec=off     -o setuid=off   zroot/usr/src
zfs create                                                      zroot/var
zfs create -o compression=lzjb  -o exec=off     -o setuid=off   zroot/var/crash
zfs create                      -o exec=off     -o setuid=off   zroot/var/db
zfs create -o compression=lzjb  -o exec=on      -o setuid=off   zroot/var/db/pkg
zfs create                      -o exec=off     -o setuid=off   zroot/var/empty
zfs create -o compression=lzjb  -o exec=off     -o setuid=off   zroot/var/log
zfs create -o compression=gzip  -o exec=off     -o setuid=off   zroot/var/mail
zfs create                      -o exec=off     -o setuid=off   zroot/var/run
zfs create -o compression=lzjb  -o exec=on      -o setuid=off   zroot/var/tmp

我听说不要在 /var 上使用 Linux 原生 ZFS 打开压缩或其他功能,因为它会崩溃。Linux 系统上的 ZFS 文件系统结构和功能(压缩、atime、禁用 setuid 等)应该是什么?

答案1

我曾听说不要在 /var 上使用 Linux 原生 ZFS 打开压缩或其他功能,因为它会崩溃。

我想不出任何理由说明为什么在 /var 上启用压缩会导致系统崩溃:压缩在块级别上完全透明。无论是否激活压缩,文件级别操作都没有区别。

使用lz4压缩算法,您将获得相当不错的数据压缩,并且几乎不会占用任何额外的 CPU。事实上:我经常听到建议在所有文件系统上启用压缩,并且我已默认在生产系统上稳定运行多年的所有池上启用了压缩。

因此,如果您不使用高性能数据库之类的边缘用例,我建议始终启用压缩。

关于其他选择:

  • 时间=关闭: 环境时间关闭可以显著提高性能,尤其是在处理大量小文件时。这并非 ZFS 独有的:更新访问时间对于许多文件来说确实需要时间。
  • 设置uid=关闭:Setuid 允许以文件所有者的权限执行文件,而不管执行文件的人是谁。如果您不需要设定它增加了安全级别以禁用整个池或数据集的此功能。
  • 执行=关闭:这将完全禁用文件的执行。这也可以增加安全级别。但请记住仅在不会放置可执行二进制文件的数据集上使用它。一个很好的例子是在 Web 服务器环境中,潜在的攻击者无法执行脚本,即使他设法上传了它。

我看不出你发布的 FreeBSD HOWTO 有什么不好的建议,除了我不会使用辽宁日报用于压缩,而是只需设置压缩=开启使用最新的默认算法(可能是lz4截至撰写本文时)。

事实上,您使用zfs 创建命令,并不意味着这些设置只能设置一次。事实上,你可以执行

zfs get all <dataset>

查看当前设置并使用 更新它们zfs set <option> <dataset>

例如,如果你有一个数据集压缩=关闭,你可以简单地做一个

zfs set compression=on <dataset>

启用它。这不会压缩此数据集中的所有数据,但设置此选项后写入数据集的所有块都将被压缩。您甚至可以从一种压缩算法切换到另一种压缩算法,而无论块写入时使用哪种压缩算法,甚至是否启用了压缩,此数据集中存储的所有数据仍可访问。

相关内容