管理 ZFS 存储池( 三 )


c12t0d0 c13t0d0 c14t0d0
如果要创建包含许多磁盘的 RAID-Z 配置(如本示例所示),则最好将包含 14 个磁盘的 RAID-Z 配置拆分为两个包含 7 个磁盘的分组 。若 RAID-Z 配置包含的分组中的磁盘数目为一位数 (1-9),则该配置的性能应该更好 。
冗余配置中的自我修复数据
ZFS 在镜像配置或 RAID-Z 配置中提供了自我修复数据 。
检测到坏的数据块时,ZFS 不仅会从另一个冗余副本中提取正确的数据,还会通过将错误数据替换为正确的副本对其进行修复 。
存储池中的动态条带化
对于添加到池中的每个虚拟设备,ZFS 会跨越所有可用设备以动态方式对数据进行条带化 。由于是在写入时确定放置数据的位置,因此在分配时不会创建固定宽度的条带 。
向池中添加虚拟设备时,ZFS 会将数据逐渐分配给新设备,以便维护性能和空间分配策略 。每个虚拟设备也可以是包含其他磁盘设备或文件的镜像或 RAID-Z 设备 。使用此配置,可以灵活地控制池的故障特征 。例如,可以通过 4 个磁盘创建以下配置:
使用动态条带化的四个磁盘
一个四向 RAID-Z 配置
使用动态条带化的两个双向镜像
尽管 ZFS 支持在同一池中组合不同类型的虚拟设备,但是建议不要采用这种做法 。例如,可以创建一个包含一个双向镜像和一个三向 RAID-Z 配置的池 。但是,容错能力几乎与最差的虚拟设备(在本示例中为 RAID-Z)相同 。建议做法是使用相同类型的顶层虚拟设备,并且每个设备的冗余级别相同 。
创建和销毁 ZFS 存储池
以下各节介绍创建和销毁 ZFS 存储池的不同情况 。
创建 ZFS 存储池
处理 ZFS 存储池创建错误
销毁 ZFS 存储池
根据设计,可快速轻松地创建和销毁池 。但是,执行这些操作请务必谨慎 。虽然进行了检查,以防止在新的池中使用现已使用的设备,但是 ZFS 无法始终知道设备何时已在使用中 。销毁池更为容易 。请谨慎使用 zpool destroy 。这是一个会产生重大后果的简单命令 。
创建 ZFS 存储池
要创建存储池,请使用 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 关键字表示将指定新的顶层虚拟设备 。数据通过这两个镜像以动态方式进行条带化,并会相应地在每个磁盘之间创建冗余数据 。
目前,ZFS 镜像配置中支持以下操作:
向现有镜像配置中添加用于其他顶层 vdev 的另一组磁盘 。
向现有镜像配置中附加其他磁盘 。或者,向非复制配置中附加其他磁盘,以创建镜像配置 。
只要可供替换的磁盘大于或等于要被替换的设备,便可替换现有镜像配置中的一个或多个磁盘 。
只要剩余设备可为配置提供足够冗余,便可分离镜像配置中的一个或多个磁盘 。
目前,镜像配置中不支持以下操作:
不能从镜像存储池中彻底删除设备 。对于此功能,已经申请了 RFE(请求提高) 。

推荐阅读