试运行创建存储池

zpool create -n可以模拟创建而不实际写入设备。正常情况下应该有类似以下的输出:
$ zpool create -n system1 mirror c1t0d0 c1t1d0
would create 'system1' with the following layout:

system1
  mirror
    c1t0d0
    c1t1d0		
		
注意:某些错误在不实际创建池的情况下可能无法检测到,因此,即使试运行成功,实际创建池也有可能失败

创建镜像存储池

使用关键字mirror创建镜像池。
如果要创建多个镜像,在命令行中重复使用mirror即可,下面例子创建一个池system1,包含两个顶级虚拟设备:
$ zpool create system1 mirror c1d0 c2d0 mirror c3d0 c4d0
两个虚拟设备都是双向镜像。数据在两个镜像之间动态条带化,数据在每个磁盘之间适当地冗余。
可以对ZFS镜像做如下操作:

创建RAID-Z存储池

$ zpool create rdpool raidz3 c0t0d0 c1t0d0 c2t0d0 c3t0d0 c4t0d0 \
c5t0d0 c6t0d0 c7t0d0 c8t0d0
可以对ZFS RAID-Z进行以下操作: 不可以进行以下操作:

创建带有日志设备的ZFS存储池

ZIL——ZFS intent log,满足同步事物的POSIX要求。
默认情况下,ZIL是从主池中的块分配的。但可以通过使用单独的设备(例如NVRAM或专用磁盘)来获得更好的性能。
ZIL的日志设备与数据库日志文件无关。部署单独的日志设备可以提高性能,但取决于设备类型、池的硬件配置和应用程序工作负载。
只能为镜像池创建镜像日志设备。
需考虑以下方面: 以下示例显示如何使用log关键字配置名为datap的镜像存储池:
$ zpool create datap mirror c0t5000C500335F95E3d0 c0t5000C500335F907Fd0 \
   mirror c0t5000C500335BD117d0 c0t5000C500335DC60Fd0 \
   log mirror c0t5000C500335E106Bd0 c0t5000C500335FC3E7d0

$ zpool status datap
pool: datap
state: ONLINE
scrub: none requested
config:

NAME                         STATE     READ  WRITE  CKSUM
datap                        ONLINE       0      0      0
   mirror-0                  ONLINE       0      0      0
      c0t5000C500335F95E3d0  ONLINE       0      0      0
      c0t5000C500335F907Fd0  ONLINE       0      0      0
   mirror-1                  ONLINE       0      0      0
      c0t5000C500335BD117d0  ONLINE       0      0      0
      c0t5000C500335DC60Fd0  ONLINE       0      0      0
   logs
   mirror-2                  ONLINE       0      0      0
      c0t5000C500335E106Bd0  ONLINE       0      0      0
      c0t5000C500335FC3E7d0  ONLINE       0      0      0

errors: No known data errors		
		
以下是在现有的镜像中添加日志的例子:
$ zpool add newpool log mirror c0t6d0 c0t7d0
$ zpool status newpool
pool: newpool
state: ONLINE
scrub: none requested
config:


NAME           STATE     READ  WRITE  CKSUM
newpool        ONLINE       0      0      0
   mirror-0    ONLINE       0      0      0
      c0t4d0   ONLINE       0      0      0
      c0t5d0   ONLINE       0      0      0
logs                                       	Added mirrored log device.
   mirror-1    ONLINE       0      0      0
      c0t6d0   ONLINE       0      0      0
      c0t7d0   ONLINE       0      0      0

errors: No known data errors		
		

创建带有缓存设备的ZFS存储池

缓存设备在主内存和磁盘之间提供了一个额外的缓存层。有助于提高静态内容随机读取的性能。
以下示例显示如何使用cache关键字配置存储池的缓存设备:
$ zpool create system1 mirror c2t0d0 c2t1d0 c2t3d0 cache c2t5d0 c2t8d0
$ zpool status system1
pool: system1
state: ONLINE
scrub: none requested
config:

NAME           STATE     READ  WRITE  CKSUM
system1        ONLINE       0      0      0
   mirror-0    ONLINE       0      0      0
      c2t0d0   ONLINE       0      0      0
      c2t1d0   ONLINE       0      0      0
      c2t3d0   ONLINE       0      0      0
   cache
      c2t5d0   ONLINE       0      0      0
      c2t8d0   ONLINE       0      0      0

errors: No known data errors		
		
可以为一个池添加一个或多个缓存设备,也可以在池创建时或创建后添加缓存设备。但不能创建镜像缓存或将它们创建为RAID-Z配置的一部分。
$ zpool add system1 cache c2t5d0 c2t8d0
$ zpool status system1
pool: system1
state: ONLINE
scrub: none requested
config:

NAME           STATE     READ  WRITE  CKSUM
system1        ONLINE       0      0      0
   mirror-0    ONLINE       0      0      0
      c2t0d0   ONLINE       0      0      0
      c2t1d0   ONLINE       0      0      0
      c2t3d0   ONLINE       0      0      0
   cache                                   	Added cache device.
      c2t5d0   ONLINE       0      0      0
      c2t8d0   ONLINE       0      0      0

errors: No known data errors		
		
注-如果缓存设备上遇到读取错误,该读取I/O将重新发送到原始存储池设备,该设备可能时镜像或RAID-Z配置的一部分。缓存设备的内容被认为是易变的,类似于其他系统缓存
添加缓存设备后,它们会逐渐填充主内存中的内容。缓存设备达到满容量之前的时间取决于其大小。使用zpool iostat命令监控容量和读取:
$ zpool iostat -v pool 5

常见问题的处理

正在使用的设备
一般有以下几种情况:
不匹配的冗余级别
使用虚拟设备创建不同冗余级别的池时会遇到以下错误提示:
$ zpool create system1 mirror c1t0d0 c2t0d0 mirror c3t0d0 c4t0d0 c5t0d0
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: 2-way mirror and 3-way mirror vdevs are present
		
如果使用不同大小的设备创建镜像或RAID-Z池,也会出现这样的情况。应该更正错误而不是忽略它。
存储池的挂载点不为空
创建池时,顶级文件系统默认的挂载点是/pool-name。如果这个目录已经存在并包含数据,则会产生错误。
创建池时使用不同的挂载点,可以使用zpool create -m mountpoint命令。例如:
$ zpool create system1 c1t0d0
default mountpoint '/system1' exists and is not empty
use '-m' option to provide a different default
$ zpool create -m /export/zfs system1 c1t0d0		
		
这个命令创建一个新池system1,然后将其挂载到/export/zfs

销毁ZFS存储池

可以使用命令zpool destroy pool销毁一个池,即使它包含已经挂载的数据集。
注意-ZFS无法始终跟踪正在使用的设备。所以应确保正在销毁正确的池。
销毁池后,仍然可以导入它。因此机密数据可能会被泄露。要完全销毁数据,应在销毁池中的每个磁盘上使用类似format程序的analyze->purge选项等功能。
为确保数据机密性,应创建加密的ZFS文件系统。即使恢复了被销毁的池,如果没有加密密钥,仍无法访问数据。
当混合了可用和不可用设备的池被销毁时,数据将写入可用磁盘以指示池不再有效。此状态信息可以防止在执行导入时将设备列为潜在池。即使设备不可用,池仍然可以被破坏。 修复不可用的设备后,它们会在创建新池时报告为potentially active(可能处于活动状态),并在搜索要导入的池时显示为有效设备。
如果有足够数量的设备不可用,则池本身可能会变得不可用。池的顶级虚拟设备的状态报告为UNAVAIL。此时只能使用zpool destroy -f命令销毁池。

2021/12/9