OpenSolaris.org 中的 ZFS 常见问题解答

如何获得 ZFS?

    ZFS 可在以下发行版中获得:

        * OpenSolaris 发行版,内部版本 27a 及更高版本
        * Solaris Express 发行版
        * Solaris 10 6/06 发行版和 Solaris 10 11/06 发行版

ZFS 何时适于<在此处插入操作系统>?
    现在有几个项目正在进行中,这些项目要将 ZFS 移植到 FreeBSD 和 Linux(使用 FUSE)。有关 CDDL 的更多信息,请参见有关许可的常见问答。
ZFS 代表什么?

    最初,ZFS 是 "Zettabyte File System" 的首字母缩写。我们喜欢的最大 SI 前缀("yotta" 是不可能的)是 "zetta"。由于 ZFS 是一个 128 位文件系统,这表示 ZFS 可以存储 256 x 1015 ZB(其中,每个 ZB 是 270 字节)。随着时间的推移,除了 128 位容量之外,ZFS 还具备许多其他功能,如稳定的数据完整性、易于管理和用于数据管理的简化模型。
为什么 ZFS 具有 128 位容量?
    业已证实,文件系统的生命周期比大多数传统软件各部分的生命周期长得多,原因在某种程度上是盘上格式非常难以更改。考虑到 UFS 的当前格式(大部分)已沿用了将近 20 年,因此让 ZFS 至少在未来 30 年内保持格式的一成不变也是合理的期望。就这一点,摩尔定律开启了存储领域的新纪元,我们可以预测,将能够在单个文件系统中存储超过 64 位的数据。有关此主题的更详细说明以及 128 位足够使用的原因,请参见 Jeff 的博客文章。
ZFS 有哪些限制?

    ZFS 的限制如此宽泛,以至于在任何实际的操作中都不会遇到任何限制。ZFS 可在每个存储池、文件系统、文件或文件属性中存储 16 百亿亿字节。ZFS 可存储几十亿个名称:目录中的文件或目录、文件系统中的文件系统,或文件系统中的快照。ZFS 可存储几万亿个项目:文件系统中的文件、文件系统、卷或存储池中的快照。
为什么 ZFS 没有类似于 fsck(1M) 的实用程序?

    需要具有类似于 fsck(1M) 的实用程序的基本原因有两个。

        *

          验证文件系统完整性-很多时候,管理员只想要确保其文件系统中没有出现盘上损坏。对于大多数文件系统而言,当文件系统处于脱机状态时,就需要运行 fsck(1M)。这可能既耗时,成本又高。ZFS 在系统运行时提供了“清理”存储池中所有数据的功能,从而可在该过程中查找并修复任何坏数据。根据将来计划,会增强此功能以便实现后台清理,并精确跟踪哪些文件包含无法更正的错误。
        *

          修复盘上状态-如果机器崩溃,有些文件系统的盘上状态将不一致。添加的日志记录功能已解决了其中一部分问题,但无法滚动日志仍可能导致文件系统需要修复。在这种情况下,就会出现已知的异常错误(如在更新父链接之前创建目录条目),不过这些错误能够可靠地修复。ZFS 不会遇到此问题,因为盘上数据总是一致的。

          如果硬件或软件出现故障,则会引发更具危害性的问题。即使那些文件系统或卷管理器具有基于块的校验和功能,也易于出现各种其他异常,进而生成有效但损坏的数据。在这种情况下,故障模式本质上是随机的,大多数文件系统将出现故障(如果是元数据),或无提示地将坏数据返回到应用程序。在上述任意一种情况下,使用 fsck(1) 实用程序几乎没有作用。由于这种损坏与已知异常不符,因此它可能无法修复。如果使用 ZFS,从统计学意义上讲,上述错误在冗余配置中是不存在的。在非冗余配置中,会正确地检测到这些错误,但在尝试读取块时会导致 I/O 错误。理论上可以编写一个工具来修复此类损坏,但进行这样的尝试可能要使用特殊的一次性工具。当然,ZFS 同样易于受软件错误的影响,但这些错误所导致的一致性损坏模式使用普通工具即可修复。在 5 年的 ZFS 开发过程中,还没有出现过这样的模式。

为什么 du(1) 为 ZFS 和 UFS 报告的文件大小不同?
    在 UFS 中,du(1) 报告文件内数据块的大小。在 ZFS 中,du(1) 报告磁盘中存储的文件的实际大小,其中包括元数据和压缩数据。这确实有助于回答此问题:“如果删除此文件,将释放出多少额外空间?”。因此,即使在压缩处于关闭状态时,您仍会看到 ZFS 和 UFS 之间的不同结果。
如果每次引导时 ZFS 都出现故障,应该怎么做?

    根据设计,ZFS 通过使用冗余(镜像或 RAID-Z)技术在发生任意硬件故障时保持完好。遗憾的是,非复制配置中的某些故障可能导致在尝试装入存储池时 ZFS 出现故障。这是一个错误,将在不久的将来得以修复(还会增强其他几个很好的功能,如后台清理以及查看已损坏文件列表的能力)。同时,如果发现您自己遇到因存储池损坏而无法引导的情况,请执行以下命令:

       1. boot using '-m milestone=none'
       2. # mount -o remount /
       3. # rm /etc/zfs/zpool.cache
       4. # reboot

    这将从系统中删除有关存储池的所有信息。您将必须重新创建存储池,并从备份恢复。
ZFS 是否支持热备件?

    支持,ZFS 热备件功能可用于 Solaris Express Community Release(内部版本 42)、Solaris Express July 2006 发行版和 Solaris 10 11/06 发行版。有关热备件的更多信息,请参见 ZFS 管理指南。
能否从 ZFS 存储池中移除设备?

    ZFS 支持通过 "zpool detach" 从镜像中移除设备。当前不支持移除顶级 vdev(如整个 RAID-Z 组或未镜像的磁盘)。计划在将来的发行版中增加此功能。
能否将 ZFS 用作根文件系统?

    ZFS 文件系统当前不能用作根文件系统,但将来支持此功能!ZFS Boot 项目的目的就是提供 ZFS 文件系统的引导和安装支持。敬请等待 ZFS Boot 发行计划的消息!
在群集环境中是否支持 ZFS?

    SunCluster 3.2 支持本地 ZFS 文件系统在 Solaris 10 11/06 发行版中用作高可用性 (highly available, HA) 系统。此支持允许在系统间进行实时故障转移,以及在系统间自动导入存储池。

    如果使用 SunCluster 3.2 将本地 ZFS 文件系统配置为高可用性,请留意一下以下注意事项:

    不要将已配置的仲裁设备添加到 ZFS 存储池。如果将已配置的仲裁设备添加到存储池,将重新标记磁盘,仲裁配置信息将丢失。这意味着磁盘不再向群集提供法定票数。将磁盘添加到存储池之后,您可以将该磁盘配置为仲裁设备。或者,可以取消该磁盘的配置,将它添加到存储池,然后将该磁盘重新配置为仲裁设备。

    建议不要在 Nevada 发行版中将 SunCluster 3.2 与 HA-ZFS 一起使用。

    ZFS 不是本机群集,也不是分布式文件系统或并行文件系统,因此不能提供来自多台不同主机的并发访问。当在分布式 NFS 环境中共享时,ZFS 表现优异。

    从长远观点来看,我们打算就 ZFS 作为本机群集文件系统进行研究,以便实现并发访问。目前还未开展这项工作。
哪些第三方备份产品支持 ZFS?

  # EMC Networker 7.3.2 可备份和恢复 ZFS 文件系统,包括 ZFS ACL。
  # Veritas Netbackup 将在 6.5 版中提供 Netbackup 支持,该版本计划在 2007 下半年发行。当前版本的 Netbackup 可备份和恢复 ZFS 文件系统,但不保留 ZFS ACL。
  # IBM Tivoli Storage Manager 可借助 CLI 工具备份和恢复 ZFS 文件系统,但 GUI 可能会排除 ZFS 文件系统。就像 Netbackup 产品一样,不保留重要的 ZFS ACL。
  # Computer Associates 的 BrightStor ARCserve 产品可备份和恢复 ZFS 文件系统,但不保留 ZFS ACL。
ZFS 是否可以与 SAN 连接的设备一起使用?

    可以,ZFS 可以与直接连接的设备或 SAN 连接的设备一起使用。但是,如果存储池不包含镜像或 RAID-Z 顶级设备,则 ZFS 只能报告校验和错误,但不能更正这些错误。如果存储池由镜像或 RAID-Z 设备(使用 SAN 连接的设备中的存储构建)组成,则 ZFS 可报告校验和错误,还可以对这些错误进行更正。

    例如,考虑一个 SAN 连接的硬件 RAID 阵列,设置该阵列以便向基于其内部镜像磁盘的 SAN Fabric(结构)提供 LUN。如果使用此阵列中的一个 LUN 来构建单磁盘池,则该存储池将不包含 ZFS 更正检测到的错误所需的副本数据。在这种情况下,ZFS 无法更正该阵列引入的错误。

    如果使用此阵列中的两个 LUN 来构建镜像存储池,或使用三个 LUN 来创建 RAID-Z 存储池,则 ZFS 将拥有可用于更正检测到的错误的副本数据。在这种情况下,ZFS 通常可更正该阵列引入的错误。

    在 ZFS 存储池缺少镜像或 RAID-Z 顶级虚拟设备的所有情况下,存储池的生存能力完全取决于基础存储设备的可靠性。

    如果 ZFS 存储池仅包含单个设备,不管它是来自 SAN 连接的存储还是直接连接的存储,您都无法利用 RAID-Z、动态条带化、I/O 负载平衡等功能。

    ZFS 总是可以检测到无提示数据损坏。有些存储阵列可以检测到校验和错误,但无法检测到以下种类的错误:

        * 意外覆写或虚写
        * 错误定向读写
        * 数据路径错误

    总的来说,ZFS 的设计考虑到与 SAN 连接的设备协同使用,但如果为 ZFS 呈现更简单的设备,则可以更好地利用所有可用功能。

    总之,如果将 ZFS 与 SAN 连接的设备一起使用,可通过在 ZFS 存储池中配置冗余(即使冗余在较低硬件级别上可用),来充分利用 ZFS 的自我修复功能。
为什么 ZFS 没有用户或组配额?

    ZFS 文件系统可用作逻辑管理控制点,这样,您便可以查看使用情况、管理属性、执行备份、捕获快照等等。对于起始目录服务器,ZFS 模型使您可以轻松地基于每个用户设置一个文件系统。ZFS 配额并不特意与特定用户关联,因为文件系统是管理控制点。

    可以在能够代表用户、项目、组等的文件系统上设置 ZFS 配额,也可以针对文件系统分层结构的整个部分设置 ZFS 配额。这样,便能以一些方式合并配额,而这些方式是传统按用户配额所无法实施的。之所以引入按用户配额,是因为多个用户必须共享同一个文件系统。

    ZFS 文件系统的配额非常灵活,而且易于设置。在创建文件系统时,即可应用配额。例如:

    # zfs create -o quota=20g tank/home/users

    在此文件系统中创建的用户文件系统会自动继承在父文件系统中设置的 20 GB 配额。例如:

    # zfs create tank/home/users/user1
    # zfs create tank/home/users/user2
    # zfs list -r tank/home/users
    NAME                    USED  AVAIL  REFER  MOUNTPOINT
    tank/home/users        76.5K  20.0G  27.5K  /tank/home/users
    tank/home/users/user1  24.5K  20.0G  24.5K  /tank/home/users/user1
    tank/home/users/user2  24.5K  20.0G  24.5K  /tank/home/users/user2

    如果在文件系统处于活动状态时增大了 ZFS 存储池中的磁盘空间,则可以增大 ZFS 配额,而不需要任何停机时间。

    ZFS 小组正致力于改进多文件系统的管理,而不是尝试使基于用户的配额适合基于文件系统的管理模型,让该模型用作控制点。

    对于需要包含邮件所用磁盘空间的、基于用户的配额,另一种方法是使用具备配额功能的邮件服务器软件,如 Sun Java System Messaging Server。此软件提供了用户邮件配额、配额警告消息、配额到期和清除功能。

你可能感兴趣的:(职场,休闲,ZFS)