以下各节提供了一般的和较具体的池做法。
使用整个磁盘来启用磁盘写入高速缓存并使维护更轻松。在分片上创建池会增加磁盘管理和恢复工作的复杂性。
使用 ZFS 冗余以便 ZFS 可以修复数据不一致性。
创建非冗余池时,将显示以下消息:
# zpool create tank c4t1d0 c4t3d0 'tank' successfully created, but with no redundancy; failure of one device will cause loss of the pool
对于镜像池,使用镜像磁盘对
对于 RAID-Z 池,为每个 VDEV 组合 3-9 个磁盘
不要在同一个池中混用 RAID-Z 和镜像组件。这些池更难以管理,并且性能可能会受到影响。
使用热备件以减少因硬件故障而导致的停机时间
使用大小近似的磁盘以便在各个设备之间平衡 I/O
较小的 LUN 可以扩展为大的 LUN
扩展 LUN 时请避免大小差异极大(如 128 MB 到 2 TB),以保持最佳 metaslab 大小
考虑创建一个小的根池和较大的数据池,以支持更快的系统恢复
建议的最小池大小为 8 GB。虽然最小池大小为 64 MB,但是小于 8 GB 会使空闲池空间的分配和回收比较困难。
建议根据您的工作负荷和数据大小确定最大池大小。不要尝试存储比您可以例行定期备份的数据更多的数据。否则,您的数据可能因某种无法预料的事件而处于风险中。
另请参见在本地或网络连接存储阵列上创建池的做法。
SPARC (SMI (VTOC)):通过使用 s* 标识符使用分片创建根池。不要使用 p* 标识符。通常,在安装系统时会创建系统的 ZFS 根池。如果要创建第二个根池或者重新创建根池,请在 SPARC 系统上使用类似如下内容的语法:
# zpool create rpool c0t1d0s0
或者,创建一个镜像根池。例如:
# zpool create rpool mirror c0t1d0s0 c0t2d0s0
Solaris 11.1 x86 (EFI (GPT)):通过指定 d* 标识符使用整个磁盘创建根池。不要使用 p* 标识符。通常,在安装系统时会创建系统的 ZFS 根池。如果要创建另一个根池或者重新创建根池,请使用类似如下内容的语法:
# zpool create rpool c0t1d0
或者,创建一个镜像根池。例如:
# zpool create rpool mirror c0t1d0 c0t2d0
根池必须作为镜像配置或单磁盘配置创建。不支持 RAID-Z 和条带化配置。不能使用 zpool add 命令添加其他磁盘以创建多个镜像顶层虚拟设备,但可以使用 zpool attach 命令扩展镜像虚拟设备。
根池不能有单独的日志设备。
在 AI 安装期间可以设置池属性,但是在根池上不支持 gzip 压缩算法。
通过初始安装创建了根池后,请勿对根池重命名。重命名根池可能会导致系统无法引导。
由于根池磁盘对连续操作至关重要(特别是在企业环境中),因此对于生产系统请勿在 USB 存储器上创建根池。可以考虑将系统的内部磁盘用作根池,或至少使用与非根目录数据所要使用磁盘的质量相同的磁盘。此外,USB 存储器 (USB stick) 的空间可能不足以支持转储卷大小,转储卷大小至少为物理内存大小的 1/2。
考虑创建双向或三向镜像根池,而不是向根池添加热备件。此外,不要在根池和数据池之间共享热备件。
请勿将 VMware 精简置备的设备用作根池设备。
通过使用 d* 标识符使用整个的磁盘创建非根池。不要使用 p* 标识符。
ZFS 在没有任何其他卷管理软件的情况下工作最佳。
为了获得更出色的性能,请使用单个磁盘,至少也要使用仅由少数几个磁盘组成的 LUN。通过在 LUN 设置中为 ZFS 提供更大的可见性,ZFS 能够更好地进行 I/O 调度决策。
在多个控制器之间创建冗余的池配置,以减少因控制器故障而导致的停机时间。
镜像存储池-占用更多磁盘空间,但通常情况下,对于小的随机读取,性能更好。
# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0
RAID-Z 存储池-可以使用 3 个奇偶校验策略创建,其中奇偶校验等于 1 (raidz)、2 (raidz2) 或 3 (raidz3)。RAID-Z 配置最大限度地利用了磁盘空间,通常情况下,在以大块(128K 或更大)写入和读取数据时性能良好。
考虑一个单奇偶校验 RAID-Z (raidz) 配置,其中 2 个 VDEV 各有 3 个磁盘 (2+1)。
# zpool create rzpool raidz1 c1t0d0 c2t0d0 c3t0d0 raidz1 c1t1d0 c2t1d0 c3t1d0
RAIDZ-2 配置可提供更高的数据可用性,其性能与 RAID-Z 类似。与 RAID-Z 或双向镜像相比,RAIDZ-2 的数据丢失平均时间 (mean time to data loss, MTTDL) 要好得多。在 6 个磁盘 (4+2) 上创建双奇偶校验 RAID-Z (raidz2) 配置。
# zpool create rzpool raidz2 c0t1d0 c1t1d0 c4t1d0 c5t1d0 c6t1d0 c7t1d0 raidz2 c0t2d0 c1t2d0 c4t2d0 c5t2d0 c6t2d0 c7t2d
RAIDZ-3 配置最大限度地利用了磁盘空间并提供了极佳的可用性,因为它可以承受 3 个磁盘故障。在 9 个磁盘 (6+3) 上创建三重奇偶校验 RAID-Z (raidz3) 配置。
# zpool create rzpool raidz3 c0t0d0 c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0 c6t0d0 c7t0d0 c8t0d0
在本地或远程连接的存储阵列上创建 ZFS 存储池时,请考虑以下存储池做法。
如果在 SAN 设备上创建池,且网络连接较慢,池的设备可能会有一段时间处于 UNAVAIL 状态。需要评估网络连接是否适合以连续的方式提供数据。另外请注意,如果将 SAN 设备用于根池,这些设备在系统引导后可能不会马上可用,从而可能使根池的设备变为 UNAVAIL。
向您的阵列供应商确认磁盘阵列未在 ZFS 发出刷新写入高速缓存请求后刷新其高速缓存。
将整个磁盘(而非磁盘分片)用作存储池设备,以允许 Oracle Solaris ZFS 激活小型本地磁盘高速缓存,从而在适当时间进行刷新。
为获得最佳性能,请为阵列中的每个物理磁盘创建一个 LUN。仅使用一个大型 LUN 可能会导致 ZFS 中排队的读取 I/O 操作过少,实际上无法获得最佳存储性能。与之相反,使用许多小型 LUN 可能会造成大量待处理的读取 I/O 操作,使存储器无法及时处理。
对于 Oracle Solaris ZFS,不建议存储阵列使用动态(或瘦)置备软件实现虚拟空间分配。Oracle Solaris ZFS 将已修改的数据写入空闲空间时,它将写入整个 LUN。从存储阵列的角度来看,Oracle Solaris ZFS 写入过程分配了所有虚拟空间,使得动态置备的优势无法体现。
使用 ZFS 时可能无需考虑动态置备软件:
可以将现有 ZFS 存储池中的 LUN 扩展为使用新空间。
使用较大的 LUN 替换较小的 LUN 时的行为与此类似。
如果评估池的存储需求,并使用可满足必需的存储需求的较小 LUN 创建池,则在需要更多空间时,始终可以将 LUN 扩展为更大大小。
如果阵列可以提供单个设备(JBOD 模式),则考虑在此类型的阵列上创建冗余 ZFS 存储池(镜像或 RAID-Z),以允许 ZFS 报告并更正不一致的数据。
在创建 Oracle 数据库时,请考虑以下存储池做法。
为池使用镜像池或硬件 RAID
对于随机读取工作负荷,通常不建议使用 RAID-Z 池
为数据库恢复日志创建一个具有单独日志设备的小的单独池
为归档日志创建一个小的单独池
有关为 Oracle 数据库调优 ZFS 的更多信息,请参见Oracle Solaris 11.2 可调参数参考手册 中的为 Oracle 数据库进行 ZFS 调优。
缺省情况下,Virtual Box 配置为忽略来自底层存储器的高速缓存刷新命令。这意味着,系统崩溃或硬件发生故障时数据可能会丢失。
通过发出以下命令可在 Virtual Box 上启用高速缓存刷新:
VBoxManage setextradata vm-name "VBoxInternal/Devices/type/0/LUN#n/Config/IgnoreFlush" 0
vm-name-虚拟机的名称
type-控制器类型,为 piix3ide(如果使用常用的 IDE 虚拟控制器)或 ahci(如果使用的是 SATA 控制器)
n-磁盘编号