知识库

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 后即时生效


4006699654

服务时间:9:00-20:00

联系电话:0755-25408887/4006699654

电子邮箱:szchangxun@88nas.com

在线售前询问

服务时间:9:00-24:00

在线售后服务

服务时间:9:00-24:00

关注官方微信

故障报修