首页 > 代码库 > FreeBSD_11-系统管理——{Part_5-ZFS}

FreeBSD_11-系统管理——{Part_5-ZFS}

内核需求

  • ZFS 静态編译进内核
  • # 确保内核启用如下三项支持
    options        ZFS    #/usr/src/sys/amd64/conf/MyKernel
    options        NFSD
    options        UFS_ACL
    # 设置开机启动
    zfs_enable="YES"     #/etc/rc.conf.local
  • ZFS 做为模块开机加载
  • # 确保如下两个文件同时存在
    # /boot/kernel/zfs.ko
    # /boot/kernel/opensolaris.ko

    # 确保内核启用如下两项支持
    options NFSD #/usr/src/sys/amd64/conf/MyKernel
    options UFS_ACL

    # 必須的两个模块与内核同步編译
    MODULES_OVERRIDE= zfs opensolaris #/etc/make.conf # 设置开机启动 zfs_enable="YES" #/etc/rc.conf.local # 确保 zfs 模块开机加载 zfs_load="YES" #/boot/loader.conf

特别注意

  • ZFS 不通过常规的操作系统工具进行管理,如:pool 中的 diskset 挂载信息不需要写入 fstab
  • 包含多个成员的 vdev 创建之后,其結构无法修改,如:无法从 mirror 修改为 raidz2;仅包含单个成员的 vdev 添加设备后可升級为 mirror
  • vdev 的成员可以是整个磁盘或某个分区,FreeBSD 平台上两者没有显著的性能差异

操作摘要

  • zpool
    • zpool create POOL vdevtype MEM[s] #以一个或多个磁盘或磁盘分区作为成员创建 zfs pool ,vdev 的类型可以为 disk、file、mirror、raidz、log、spare、cache 等
    • zpool destroy POOL #消毁 zfs pool
    • zpool status [-x] POOL #查詢所有 pool 的健康状态,-x 显示简略信息
    • zpool list #显示 pool 列表
    • zpool iostat [-v] [N] #显示当前 I/O 负载,-v 显示详细信息,N 处可指定数字,表示每隔 N 秒动态追加新的监控結果
    • zpool history [-i] [-l] #显示历史操作记录
    • zpool clear #在錯誤修复之后清除旧的錯誤信息
    • zpool scrub POOL #校验指定 pool 的 checksum 值并修复损坏的文件, I/O 操作,同一时间仅允许一个 scrub 进程
    • zpool offline POOL MEM #停用指定的成员
    • zpool online [-e] POOL MEM #启用指定的成员,-e 选项用于扩展 POOL空间,例如:所有成员均替换成了更大的容量,此操作可使 POOL 识别扩展出的空间
    • zpool replace POOL DISKSET NEWDISK #替换失效的磁盘或分区,diskset 失效之后,其名称会退化为一串数字(18位 UUID,如:316502962686821739)
    • zpool attach POOL VDEV MEM #向当前 pool 中已有的 vdev 中追加一个成员,仅能应用于 mirror 或 disk 两种类型
    • zpool detach POOL MEM #从当前 pool 中撤出一个成员,仅能应用于 mirror
    • zpool add POOL vdevtype MEM[s] #在已有的 pool 中创建新的 vdev;vdev 一旦创建,则不能从 pool 中撤出
    • gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1DISK #若当前 pool 用于启动系统,则在 add 或 attach 之后需要执行此步,DISK 指新添加的成员所在的硬盘(不是分区!) 
    • zpool split [-n] [-R] POOL NEWPOOL [MEM...] #将一个具备足够冗余能力 POOL 分割成两个,默认将原 POOL 中每个 vdev 的最后一个设备分离出去,新生成的 NEWPOOL 与原 POOL 具有相同的数据,-n 选项指預览結果并不真正执行,-R 选项用于指定 NEWPOOL 的挂载目录,分离到 NEWPOOL 中的成员可以手工指定
    • zpool upgrade [-v] [POOL] #不指定 POOL 名称时显示 zfs 版本信息;当 zfs 升級之后,对每个旧版 zfs 系统中的 POOL 执行此命令以应用新特性(此操作不可逆)
  • zfs
    • zfs create POOL/DISKSET
    • zfs set copies=N POOL/DISKSET #设置数据 N 份冗余
    • zfs set compression=gzip/off/on... POOL/DISKSET #指定数据压缩方式及开关等
    • zfs mount POOL/DISKSET
    • zfs umount POOL/DISKSET
    • zfs destroy POOL/DISKSET #消毁 zfs diskset
    • zfs snap POOL/DISKSET@SNAPNAME #创建 snapshot, @ 之后的部分是快照名称
    • zfs rollback POOL/DISKSET@SNAPNAME #diskset 将回滚到指定快照创建时的状态
    • zfs destroy POOL/DISKSET@SNAPNAME #消毁快照
    • zfs set mountpoint=/usr/home POOL/DISKSET #为 diskset 指定挂载点
    • zfs list #显示 diskset 挂载信息

FreeBSD_11-系统管理——{Part_5-ZFS}