ZFS 常见问题解答 及 ZFS Boot 问题探讨

  • Post author:
  • Post category:其他


首先我们来看一下上月Snow Leopard Server活动上Apple 对SUN ZFS发表的评论:

综观计算机业界的整个历史,这个行业往往推崇“奇思妙想”,原因在于它似乎喜欢给最新技术赋予近乎神奇的功效。ZFS(Zettabyte File System)常常发现自己被誉为是这种“神奇×××”。虽然ZFS可能不像某些人希望的那样能包治百病,但它确实能以一种优雅的方式解决许多实际问题。

任何管理员发现HFS+、NTFS和UFS等不同的磁盘格式都存在一个问题,那就是它们根本不是为直接管理的磁盘容量和文件大小而设计的。这倒不是说它们不是出色的工具,但如果开始在数TB、数百TB及更大容量的磁盘上运行HFS+、NTFS和 UFS之类的格式,它们的局限性就会体现出来。即便采用了日志(journaling)等方法,要是出了什么问题,解决起来也很费时间。而文件系统中的文件数量越多,保证修复文件系统的可能性就越小。RAID、快照及其他可靠性方面的改进等机制应用到了这些文件系统上,它们能起到作用。但凡是有组装车的人都知道,不管你怎样改动大众汽车的发动机,它仍不是一辆喷气式汽车。

Sun在ZFS方面高瞻远瞩,开发的文件系统着眼于未来,所以ZFS能够从根本上防止破坏出现,取代了chkdsk和fsck等实用程序。从一开始,快照、纠错和冗余就成了ZFS设计的一部分,另外还支持存储池和动态卷扩展。虽然目前大多数文件系统是 64位文件系统,ZFS却是128位文件系统。没错,有一天连128位文件系统也会太小,但这一天不会很快到来,所以管理空间实际上是无限的。

据OpenSolaris ZFS Boot Project的FAQ声称,使用ZFS作为引导/根文件系统仍处于“太先进了,会伤人”的阶段。它往往耗用CPU相当多的周期来完成工作。尽管ZFS不适合消费级文件系统,但确实是能够满足服务器存储要求的出色的文件系统: 需要资源的主要是文件和文件系统的完整性,而不是Photoshop或者《魔兽世界》之类的应用。

普通iMac用户可能不太关心数艾字节(EB,1EB=1000TB)的磁盘卷、支持目录里面有数十亿个文件的功能。但对支持大量用户和进程的服务器而言,这些问题正从“飞艇城市”幻想阶段进入到“几年后我们会需要它”的模式,而这些正是ZFS有望解决的几种问题。


ZFS 常见问题解答

  • 如何获得 ZFS?
  • ZFS 何时适于<在此处插入操作系统>?
  • ZFS 代表什么?
  • 为什么 ZFS 具有 128 位容量?
  • ZFS 有哪些限制?
  • 为什么 ZFS 没有类似于 fsck(1M) 的实用程序?
  • 为什么 du(1) 为 ZFS 和 UFS 报告的文件大小不同?
  • 如果每次引导时 ZFS 都出现故障,应该怎么做?
  • ZFS 是否支持热备件?
  • 能否从 ZFS 存储池中移除设备?
  • 能否将 ZFS 用作根文件系统?
  • 在群集环境中是否支持 ZFS?
  • 哪些第三方备份产品支持 ZFS?
  • ZFS 是否可以与 SAN 连接的设备一起使用?
  • 为什么 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 出现故障。这是一个错误,将在不久的将来得以修复(还会增强其他几个很好的功能,如后台清理以及查看已损坏文件列表的能力)。同时,如果发现您自己遇到因存储池损坏而无法引导的情况,请执行以下命令:

  • boot using ‘-m milestone=none’
  • # mount -o remount /
  • # rm /etc/zfs/zpool.cache
  • # 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。此软件提供了用户邮件配额、配额警告消息、配额到期和清除功能。

转载于:https://blog.51cto.com/zfs114/814153


关闭菜单