要创建存储池,请使用 zpool create 命令。此命令采用池名称和任意数目的虚拟设备作为参数。池名称必须符合ZFS 组件命名要求中的命名要求。
以下命令创建了一个名为 tank 的新池,该池由磁盘 c1t0d0 和 c1t1d0 组成:
# zpool create tank c1t0d0 c1t1d0 |
代表整个磁盘的设备名称可在 /dev/dsk 目录中找到,并由 ZFS 适当标记以包含单个大片。数据通过这两个磁盘以动态方式进行条带化。
要创建镜像池,请使用 mirror 关键字,后跟将组成镜像的任意数目的存储设备。可以通过在命令行中重复使用 mirror 关键字指定多个镜像。以下命令创建了一个包含两个双向镜像的池:
# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0 |
第二个 mirror 关键字表示将指定新的顶层虚拟设备。数据通过这两个镜像以动态方式进行条带化,并会相应地在每个磁盘之间创建冗余数据。
有关建议的镜像配置的更多信息,请参见以下站点:
http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
目前,ZFS 镜像配置中支持以下操作:
向现有镜像配置中添加用于其他顶层虚拟设备 (vdev) 的另一组磁盘。有关更多信息,请参见向存储池中添加设备。
向现有镜像配置中附加其他磁盘。或者,向非复制配置中附加其他磁盘,以创建镜像配置。有关更多信息,请参见附加和分离存储池中的设备。
只要替换磁盘的大小大于或等于要被替换的设备,便可替换现有镜像配置中的一个或多个磁盘。有关更多信息,请参见替换存储池中的设备。
只要剩余设备可为配置提供足够冗余,便可分离镜像配置中的磁盘。有关更多信息,请参见附加和分离存储池中的设备。
通过分离其中一个磁盘来分割镜像配置,以创建新的相同池。有关更多信息,请参见通过分割镜像 ZFS 存储池创建新池。
不能直接从镜像存储池中移除非日志或缓存设备。对于此功能,已经申请了 RFE(请求提高)。
您可以从 ZFS 根文件系统进行安装和引导。查看以下根池配置信息:
用于根池的磁盘必须有 VTOC (SMI) 标签,并且必须使用磁盘片创建池。
根池必须作为镜像配置或单磁盘配置创建。不能使用 zpool add 命令添加其他磁盘以创建多个镜像顶层虚拟设备,但可以使用 zpool attach 命令扩展镜像虚拟设备。
不支持 RAID-Z 或条带化配置.
根池不能有单独的日志设备。
如果您尝试使用不受支持的根池配置,将会看到类似如下的消息:
ERROR: ZFS pool <pool-name> does not support boot environments |
# zpool add -f rpool log c0t6d0s0 cannot add to 'rpool': root pool can not have multiple vdevs or separate logs |
有关安装和引导 ZFS 根文件系统的更多信息,请参见第 5 章。
创建单奇偶校验 RAID-Z 池与创建镜像池基本相同,不同之处是使用 raidz 或 raidz1 关键字而不是 mirror。以下示例说明如何创建一个包含由 5 个磁盘组成的单个 RAID-Z 设备的池:
# zpool create tank raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 /dev/dsk/c5t0d0 |
本例说明可以通过设备的缩写名称或全名指定磁盘。/dev/dsk/c5t0d0 和 c5t0d0 指代同一个磁盘。
创建池时,使用 raidz2 或 raidz3 关键字可以创建双奇偶校验或三奇偶校验 RAID-Z 配置。例如,
# zpool create tank raidz2 c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0 # zpool status -v tank pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 c1t0d0 ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 c3t0d0 ONLINE 0 0 0 c4t0d0 ONLINE 0 0 0 c5t0d0 ONLINE 0 0 0 errors: No known data errors |
# zpool create tank raidz3 c0t0d0 c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0 c6t0d0 c7t0d0 # zpool status -v tank pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz3-0 ONLINE 0 0 0 c0t0d0 ONLINE 0 0 0 c1t0d0 ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 c3t0d0 ONLINE 0 0 0 c4t0d0 ONLINE 0 0 0 c5t0d0 ONLINE 0 0 0 c6t0d0 ONLINE 0 0 0 c7t0d0 ONLINE 0 0 0 errors: No known data errors |
目前,ZFS RAID-Z 配置中支持以下操作:
向现有 RAID-Z 配置中添加用于其他顶层虚拟设备的另一组磁盘。有关更多信息,请参见向存储池中添加设备。
只要 RAID-Z 磁盘的大小大于或等于要被替换的设备,便可替换现有镜像配置中的一个或多个磁盘。有关更多信息,请参见替换存储池中的设备。
目前,RAID-Z 配置中不支持以下操作:
向现有 RAID-Z 配置中附加其他磁盘。
从 RAID-Z 配置分离磁盘,分离由备用磁盘替换的磁盘除外。
不能直接从 RAID-Z 配置中移除非日志或缓存设备。对于此功能,已经申请了 RFE(请求提高)。
有关 RAID-Z 配置的更多信息,请参见RAID-Z 存储池配置。
缺省情况下,ZIL 是通过主池中的块分配的。但是,通过使用单独的意图日志设备(如使用 NVRAM 或专用磁盘)可能会获得更佳的性能。有关 ZFS 日志设备的更多信息,请参见设置单独的 ZFS 日志设备。
创建存储池时或创建存储池以后,您可以设置 ZFS 日志设备。
以下示例显示如何使用镜像日志设备创建镜像存储池:
# zpool create datap mirror c1t1d0 c1t2d0 mirror c1t3d0 c1t4d0 log mirror c1t5d0 c1t8d0 # 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 c1t1d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 c1t3d0 ONLINE 0 0 0 c1t4d0 ONLINE 0 0 0 logs mirror-2 ONLINE 0 0 0 c1t5d0 ONLINE 0 0 0 c1t8d0 ONLINE 0 0 0 errors: No known data errors |
有关从日志设备故障中进行恢复的信息,请参见示例 11–2。
您可以使用高速缓存设备创建一个存储池,来缓存存储池数据。例如:
# zpool create tank mirror c2t0d0 c2t1d0 c2t3d0 cache c2t5d0 c2t8d0 # zpool status tank pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank 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 |
确定是否使用高速缓存设备创建 ZFS 存储池时,请考虑以下几点:
使用高速缓存设备,可以最大程度地提高大多数静态内容的随机读取工作的性能。
可以使用 zpool iostat 命令监视容量和读取操作。
创建池时,可以添加一个或多个高速缓存设备。也可以在创建池后添加或删除高速缓存设备。有关更多信息,请参见示例 4–4。
高速缓存设备不能镜像或成为 RAID-Z 配置的一部分。
如果高速缓存设备发生读取错误,则会向原始存储池设备(它可能是镜像配置或 RAID-Z 配置的一部分)重新发出读取 I/O。高速缓存设备的内容是易失性的,与其它系统高速缓存类似。