答案1
(免责声明:作为 ZFS 初学者,这只是我目前的理解,旨在推动其他人获得更完整、更可靠的信息)。
池属性
ashift=12
从根本上来说确保 ZFS 的读/写操作与底层存储的块边界一致。理论上对于 512 字节的块来说就可以了,但是现在具有这种块的驱动器很少见,并且设置“太高”
ashift=9
的惩罚相当低。ashift
autotrim=on
自动地当某些空间不再需要时通知底层块存储。在 SSD 上尤其有用,但似乎对传统 HDD 也没有影响(尽管它可能不会有帮助)。
数据集属性
这些可以zfs create -o
通过根文件系统的-O
开关来指定zpool create
(默认情况下将被继承给其他文件系统)。
xattr=sa
这显著提高了 xattr 的性能,而且没有任何实际缺点。(仅适用于 Linux目前)。
dnodesize=auto
使用 时应使用此属性
xattr=sa
。不使用这些的主要原因是与不支持所需 ZFS 功能的系统交互。relatime=on
即使在只读交互中,跟踪文件的访问时间也可能非常昂贵。
relatime
以属性中不太精确的信息为代价,显著降低了这些更新的粒度/频率atime
(同时保持了一些通常需要的不变量)。请注意,目前,这在很长一段时间内都是 Linux 上几乎所有文件系统的默认设置。如果需要精确的atime
信息,则不要打开它。如果知道atime
永远不需要,那么它atime=off
会提供更好的性能。normalization=formD
这将确保文件名始终以相同的方式规范化。这的主要副作用还意味着文件系统将把文件名视为 UTF-8 编码,并且不能再存储其他文件系统接受的某些“损坏”名称的文件名。如果不希望这样,请忽略它。
compression=lz4
大家似乎一致认为,在现代硬件上,压缩成本非常低,因此压缩实际上只有好处。主要存储已高度压缩数据的数据集可能希望关闭压缩功能。
不
recordsize
对于许多用例来说,默认记录大小似乎是一个很好的中间值,但数据库等某些用例可能会受益于特定的值。
来源
- ZFS 上的 Debian Root
- 许多个人论坛帖子