Freebsf zfs 2
#示例zfs snap -r sendpool/etc@snap_1 #递归创建当前 dataset 及其挂载结构下所有 descendent datasets 的 snapshotzfs snap -r sendpool/etc@snap_2 #本地备份zfs send sendpool/etc@snap_1 | zfs recv -euv recvpool #-e 选项指在接收端指定的 dataset 下,创建一个以发送端 dataset 挂载视图中的最后一部分(即:basename)命名的新 dataset,用于存储接收的数据;-u 选项指不挂载新创建的 dataset #通过 SSH 远程备份zfs send -R sendpool/etc@snap_1 | ssh John@10.0.0.2 zfs recv -duv recvpool #-R 选项将源 dataset 及其子数据集下所有的目录与文件(包括 snapshot、clone 等)传递到远程主机,而且,发送端数据集中已经不存在的快照,将在接收端销毁;-d 选项指在接收端指定的 dataset 下,创建一个以发送端 dataset 的完整路径名称(除了最上层的 pool 名称)命名的新 dataset zfs send -i -R sendpool/etc@snap_1 sendpool/etc@snap_2 | ssh John@10.0.0.2 zfs recv -uv recvpool/ #-i 指増量备份,此时不能指定 -d 或 -e #若远程主机不允许 root 登陆 #在发送端执行([可选]授予普通用户 Marry 执行发送及操作快照的权限): zfs allow -u Marry send,snapshot sendpool #在接收端执行(授予普通用户 John 创建、挂载、接收的权限): echo vfs.usermount=1 >> /etc/sysctl.conf zfs allow -u John create,mount,receive recvpool chown John /recvpool
zdb
zdb -S POOL #显示指定 pool 的数据存储策略
# zdb -S zroot
Simulated DDT histogram:
(DDT:deduplication table)
bucket allocated referenced
______ ______________________________ ______________________________
refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
------ ------ ----- ----- ----- ------ ----- ----- -----
1 261K 2.82G 1.32G 1.89G 261K 2.82G 1.32G 1.89G
......
64 6 72K 28.5K 32K 486 5.48M 2.16M 2.48M
Total 276K 3.30G 1.54G 2.14G 297K 4.21G 1.87G 2.49G
dedup = 1.17, compress = 2.25, copies = 1.33, dedup * compress / copies = 1.97
調优策略
vfs.zfs.min_auto_ashift
此项决定 pool 的逻辑扇区大小,用 2 的 N 次方形式賦值,如:设置为 4K,则此项应賦值为 12,即 212=4096
大多数应用场景中,指定为 12 将获得最佳性能(默认为 9,即 512B)
用作数据库存储时,保持默认值(9)性能更佳,因为数据库更多的是小数据块的随机读取,更小的逻辑块可减少每次读取的数据量
pool 一旦建立,logical sector size 便不能更改
read/write 参数,可通过 sysctl 調整,但調整結果对已经建立的 pool 无效
vfs.zfs.arc_min
为 ZFS 的頁緩存机制(ARC: Adaptive Replacement Cache)預留的最小内存空间,防止内存被其它应用耗光而大幅降低存储系统的性能
通常设置为总内存总量的 1/4 至 1/2
readonly 参数,设置 /boot/loader.conf 后重启方能生效
vfs.zfs.arc_max
ZFS 可以用于 ARC 的最大内存量
ZFS 的性能提升非常依賴内存,在保証服务器主应用内存空间的前提下,尽可能提升此值
readonly 参数,设置 /boot/loader.conf 后重启方能生效
vfs.zfs.arc_meta_limit
ARC 中可用于存储元数据(metadata)的比例,默认为 1/4
在面对巨量小文件的场景中,可次此值适当調高,如 ARC/2
readonly 参数,设置 /boot/loader.conf 后重启方能生效
vfs.zfs.prefetch_disable
是否启用 ARC 大块数据預读,默认为 0,即开启預读
在巨量随机读取的环境中,通过关闭預读(设置为:1)减少不必要的数据读取,可大幅提升性能
read/write 参数,sysctl 后即时生效
vfs.zfs.vdev.trim_on_init
针对 SSD 的 TRIM 功能,有助于延长使用寿命及提升长期性能,默认启用
read/write 参数,sysctl 后即时生效,不需要一直开启(尤其是新设备),可设置低负载时段定时开启
vfs.zfs.resilver_delay
更换新的硬盘后数据恢复的过程中,两个 I/O 之间的延迟时间,默认为 2 毫秒
IOPS (I/Os Per Second)=kern.hz / *_delay,kern.hz(Number of clock ticks per second) 默认为 1000,则默认情况下的 I/O 速度 IOPS=1000/2=500
若当前已无数据冗余保障,可将此项值調整为 0 不限制 I/O 速度,以提高恢复效率
read/write 参数,sysctl 后即时生效
vfs.zfs.scrub_delay
执行 scrub 操作时的 I/O 限制,默认延迟为 4 毫秒,IOPS=250
空閑时段或調试时可设为 0 提升速度
read/write 参数,sysctl 后即时生效
vfs.zfs.scan_idle
存储池空閑状态判定时限,默认为 50 毫秒(milliseconds)
任一存储池无 I/O 操作超过此值,即判定为 idle 状态,此时 scrub 与 resilver 的 I/O 速度限制将自动解除
read/write 参数,sysctl 后即时生效