在 Oracle® Solaris 11.2 中管理 ZFS 文件系统

退出打印视图

更新时间: 2014 年 12 月
 
 

创建 ZFS 存储池

要创建存储池,请使用 zpool create 命令。此命令采用池名称和任意数目的虚拟设备作为参数。池名称必须符合ZFS 组件命名要求中的命名要求。

创建基本存储池

以下命令创建了一个名为 tank 的新池,该池由磁盘 c1t0d0c1t1d0 组成:

# zpool create tank c1t0d0 c1t1d0

代表整个磁盘的设备名称可在 /dev/dsk 目录中找到,并通过 ZFS 恰当地标记为包含单个大分片。数据通过这两个磁盘以动态方式进行条带化。

创建镜像存储池

要创建镜像池,请使用 mirror 关键字,后跟将组成镜像的任意数目的存储设备。可以通过在命令行中重复使用 mirror 关键字指定多个镜像。以下命令创建了一个包含两个双向镜像的池:

# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0

第二个 mirror 关键字指明将指定一个新的顶层虚拟设备。数据在这两个镜像中以动态方式进行条带化,并会相应地在各个磁盘上创建冗余数据。

有关建议的镜像配置的更多信息,请参见Chapter 11, 建议的 Oracle Solaris ZFS 做法

目前,ZFS 镜像配置中支持以下操作:

  • 向现有镜像配置中添加用于其他顶层虚拟设备 (vdev) 的另一组磁盘。有关更多信息,请参见向存储池中添加设备

  • 向现有镜像配置中附加其他磁盘。或者,向非复制配置中附加其他磁盘,以创建镜像配置。有关更多信息,请参见附加和分离存储池设备

  • 只要替换磁盘的大小大于或等于要被替换的设备,便可替换现有镜像配置中的一个或多个磁盘。有关更多信息,请参见替换存储池中的设备

  • 只要剩余设备可为配置提供足够冗余,便可分离镜像配置中的磁盘。有关更多信息,请参见附加和分离存储池设备

  • 通过分离其中一个磁盘来拆分镜像配置,以创建新的相同池。有关更多信息,请参见通过拆分镜像 ZFS 存储池创建新池

不能直接从镜像存储池中移除非备用设备、非日志设备或非缓存设备。

创建 ZFS 根池

请注意以下根池配置要求:

  • 在 Oracle Solaris 中,在基于 x86 的系统和具有 GPT 感知固件的受支持 SPARC 系统上用于根池的磁盘会在安装时加上 EFI (GPT) 标签,在没有 GPT 感知固件的基于 SPARC 的系统上用于根池的磁盘会在安装时加上 SMI (VTOC) 标签。安装程序会尽可能地应用 EFI (GPT) 标签,如果需要在安装后重新创建 ZFS 根池,则可以使用以下命令来应用 EFI (GPT) 磁盘标签和正确的引导信息:

    # zpool create -B rpool2 c1t0d0
  • 根池必须作为镜像配置或单磁盘配置创建。不能使用 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 根文件系统的更多信息,请参见Chapter 4, 管理 ZFS 根池组件

创建 RAID-Z 存储池

创建单奇偶校验 RAID-Z 池与创建镜像池基本相同,不同之处是使用 raidzraidz1 关键字而不是 mirror。以下示例说明如何创建一个包含单个 RAID-Z 设备的池,该设备由 5 个磁盘组成:

# zpool create tank raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 /dev/dsk/c5t0d0

本例说明可以通过设备的缩写名称或全名指定磁盘。/dev/dsk/c5t0d0c5t0d0 指代同一个磁盘。

创建池时,通过使用 raidz2raidz3 关键字,您可以创建双奇偶校验或三奇偶校验 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 c8t0d0
# 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
c8t0d0      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 存储池配置

创建使用日志设备的 ZFS 存储池

为了满足对同步事务的 POSIX 要求,提供了 ZFS 意图日志 (ZFS intent log, ZIL)。例如,数据库通常要求其事务在从系统调用中返回时应该在稳定的存储设备上。NFS 和其他应用程序也可以使用 fsync() 来确保数据的稳定性。

缺省情况下,从主池中的块分配 ZIL。但是,通过使用单独的意图日志设备(如使用 NVRAM 或专用磁盘)可能会获得更佳的性能。

确定设置 ZFS 日志设备是否适合您的环境时,请注意以下几点:

  • ZFS 意图日志的日志设备与数据库日志文件无关。

  • 通过实施单独的日志设备获得的任何性能改进均取决于设备类型、池的硬件配置,以及应用程序工作负荷。有关初步性能信息,请参见以下博客:

    http://blogs.oracle.com/perrin/entry/slog_blog_or_blogging_on

  • 可以取消复制或取消镜像日志设备,但日志设备不支持 RAID-Z。

  • 如果未镜像单独的日志设备,且包含日志的设备出现故障,则存储日志块将恢复至存储池。

  • 可以将日志设备作为较大存储池的一部分进行添加、替换、移除、附加、分离,以及导入和导出。

  • 可以将日志设备附加到现有日志设备,以创建镜像日志设备。此操作等同于在未镜像的存储池中附加设备。

  • 日志设备的最小大小与池中每个设备的最小大小 (64 MB) 相同。可能存储在日志设备中的相关的数据量相对较小。提交日志事务(系统调用)时将释放日志块。

  • 日志设备的最大大小应大约为物理内存大小的 1/2,因为这是可存储的最大潜在相关的数据量。例如,如果系统的物理内存为 16 GB,请考虑 8 GB 的最大日志设备大小。

创建存储池时或创建存储池以后,您可以设置 ZFS 日志设备。

以下示例显示如何创建使用镜像日志设备的镜像存储池:

# 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

有关从日志设备故障中进行恢复的信息,请参见Example 10–2

创建使用高速缓存设备的 ZFS 存储池

高速缓存设备在主内存和磁盘之间提供了一个进行高速缓存的附加层。使用高速缓存设备,可以最大程度地提高大多数静态内容的随机读取工作的性能。

您可以创建一个使用高速缓存设备来缓存存储池数据的存储池。例如:

# 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

添加高速缓存设备之后,这些设备中将逐渐填充来自主内存的内容。填充设备可能需要一个小时以上的时间,具体取决于高速缓存设备的大小。可以通过按以下方式使用 zpool iostat 命令来监视容量和读取操作:

# zpool iostat -v pool 5

创建池后,可以在池中添加高速缓存设备或从池中删除高速缓存设备。

确定是否创建使用高速缓存设备的 ZFS 存储池时,请注意以下几点:

  • 使用高速缓存设备,可以最大程度地提高大多数静态内容的随机读取工作的性能。

  • 可以使用 zpool iostat 命令监视容量和读取操作。

  • 创建池时,可以添加一个或多个高速缓存设备。也可以在创建池后添加或删除高速缓存设备。有关更多信息,请参见Example 3–4

  • 高速缓存设备不能镜像或成为 RAID-Z 配置的一部分。

  • 如果高速缓存设备发生读取错误,则会向原始存储池设备(它可能是镜像配置或 RAID-Z 配置的一部分)重新发出读取 I/O。高速缓存设备的内容是易失性的,与其他系统高速缓存类似。

创建存储池的注意事项

创建和管理 ZFS 存储池时,请注意以下事项。

  • 请勿对属于现有存储池一部分的磁盘重新分区或重新设置标签。如果尝试对根池磁盘重新分区或重新设置标签,可能需要重新安装 OS。

  • 创建存储池时,请勿包含来自其他存储池的组件(如文件或卷)。这种配置不受支持,且会发生死锁。

  • 使用单个分片或单个磁盘创建的池没有冗余,会面临丢失数据的风险。使用多个分片创建的池如果没有冗余,也会面临丢失数据的风险。使用磁盘中多个分片创建的池比使用整个磁盘创建的池难以管理。

  • 创建时未设置 ZFS 冗余(RAID-Z 或镜像)的池只能报告数据不一致性,无法修复数据不一致性。

  • 虽然创建池时设置 ZFS 冗余有助于减少因硬件故障而导致的停机时间,但是这样的池仍不可避免地会受硬件故障、电源故障或电缆断开的影响。请确保定期备份您的数据。对非企业级硬件上的池数据定期执行备份很重要。

  • 池不能在系统之间共享。ZFS 不是群集文件系统。