X

ZFS

ZFS

RAID-Z

安価なディスクで高速かつ信頼性の高いストレージを提供することが、RAID (Redundant Arrays of Inexpensive Disks) 本来の目的でした。安価なという点が重要なはずでしたが、現在こういった製品も販売されています。どうしてでしょうか。 RAID-5 (だ...

安価なディスクで高速かつ信頼性の高いストレージを提供することが、RAID (Redundant Arrays of Inexpensive Disks) 本来の目的でした。安価なという点が重要なはずでしたが、現在こういった製品も販売されています。どうしてでしょうか。 RAID-5 (だけでなく、RAID-4、RAID-6、Even-Odd 法、Row Diagonal Parity 法など、ほかのデータ/パリティースキーマ) は、RAID の目的を完全に達成するものではありません。また、RAID-5 書き込みホールと呼ばれる致命的欠陥があるため、目的の完全達成は不可能です。ディスク故障時のデータ復旧のために、RAID ストライプのデータを更新するときは必ずパリティーも更新して、全ディスクでの XOR をゼロにしておかなければなりません。問題は、複数のディスクをアトミックにアップデートする方法がないということです。このため、ディスククラッシュや停電で RAID ストライブのデータが破...

ZFS

ZFS 端到端数据完整性

文件系统的工作归结为:当被请求读取块时,它应该返回上次写到此块的数据。如果它做不到这一点(由于磁盘脱机或数据已经被损坏或篡改),那么它应该能检测并返回错误。难以置信的是,大多数文件系统未能做到这一点。它们依赖底层硬件来检测和报告错误。如果磁盘返回坏数据,一般文件系统甚至无...

文件系统的工作归结为:当被请求读取块时,它应该返回上次写到此块的数据。如果它做不到这一点(由于磁盘脱机或数据已经被损坏或篡改),那么它应该能检测并返回错误。难以置信的是,大多数文件系统未能做到这一点。它们依赖底层硬件来检测和报告错误。如果磁盘返回坏数据,一般文件系统甚至无法检测到这一点。即使我们可以假设所有磁盘都是完美的,数据也很容易在传输中受到损坏:控制器 bug、DMA 奇偶校验错误等等。您知道的只是数据离开磁盘片时是完好无缺的。如果将数据当作一个包,则这就像 UPS 所说的那样,“我们保证您的包裹在我们包装时没有损坏”。这根本不是您寻求的保证。过程中的损坏不仅仅是一个学术问题:甚至像糟糕的供电这样的小事都可能导致无提示数据损坏。任何昂贵的存储阵列都无法解决这个问题。I/O 路径仍然易受攻击,但它变得更长:不管阵列存在什么样的硬件和固件 bug,在离开磁盘片之后,数据必须要能够存活。如果您位于 SAN 上,您将使用磁盘固件读盘器设计的网络。上帝保佑您。 怎么办?一种选择是在每个磁盘块中存储校验和。大多数现代磁盘驱动器可以使用比通常的 512...

ZFS

豪快なレイヤー分け違反

Andrew Morton が ZFS を「豪快なレイヤー違反」と呼んだのは有名ですが、その理由は、ファイルシステムの機能、ボリューム管理、RAID コントローラを統合していることにあります。 違反という言葉の意味をどう取るかで、解釈が異なると思います。...

Andrew Morton が ZFS を「豪快なレイヤー違反」と呼んだのは有名ですが、その理由は、ファイルシステムの機能、ボリューム管理、RAID コントローラを統合していることにあります。 違反という言葉の意味をどう取るかで、解釈が異なると思います。 ZFS の設計に際して、ストレージスタックの標準的なレイヤー分けが、驚くほど大量の無駄手間と冗長な処理を含んでいることを発見しました。 問題点にちょっとしたリファクタリングを加えれば、つまり、レイヤーを分ける境界を移動させてやれば、全体をもっと単純化できるのではないかと気づきました。数学 (私のバックグラウンド分野) を例にするとわかりやすいでしょう。n=1 から 無限大まで、1/n(n+1) について数列の和を計算しなければならないと仮定します。項ごとにして開くと、次のような計算になります。        1/(1\*2) + 1/(2\*3) + 1/(3\*4) + 1/(4\*5) + ...つまり、        1/2 + 1/6 + 1/12 + 1/20...

ZFS

領域マップ

どんなファイルシステムで 2 つの基本的なことを記録します。どこにデータがあるかと、未使用領域がどこにあるかです。論理上、未使用領域の記録は、厳密には必須ではありません。すべてのブロックは割り当て済みと未割り当てのいずれかなので、まず全体が未使用領域である状態を想定し、そこから割り当て済みの領...

どんなファイルシステムで 2 つの基本的なことを記録します。どこにデータがあるかと、未使用領域がどこにあるかです。論理上、未使用領域の記録は、厳密には必須ではありません。すべてのブロックは割り当て済みと未割り当てのいずれかなので、まず全体が未使用領域である状態を想定し、そこから割り当て済みの領域を引き算してやれば、未使用の領域を知ることができます。割り当て済みの領域は、ファイルシステムをルートから走査することでわかります。 ルートからの走査でヒットしないブロックは、原理的に、すべて未割り当てのブロックです。このような方法による未使用領域の割り当ては、ファイルシステムのサイズがよほど小さくないかぎり、時間がかかりすぎて実用に耐えません。 ブロックの割り当てと開放を短時間で行うために、ファイルシステムは未使用領域を記録するトラックを効率的に管理しなければなりません。 今回は、もっともありふれた方法と、その方法で良好なスケーラビリティーを得られない理由、ZFS で工夫した新しいアプローチを紹介します。 ビットマップ未使用領...

ZFS

烟镜

重新同步(也称为重新构建或重新构造)是使用健康设备修复受损设备的过程。这是每个卷管理器或 RAID 阵列在它的某个磁盘死亡、被替换或经历瞬时断电时必须执行的操作。对于镜像,重新同步就像全盘复制一样简单。对于 RAID-5,它就略微有一些复杂了:不是将一个磁盘复制到另一个磁盘,而是...

重新同步(也称为重新构建或重新构造)是使用健康设备修复受损设备的过程。这是每个卷管理器或 RAID 阵列在它的某个磁盘死亡、被替换或经历瞬时断电时必须执行的操作。对于镜像,重新同步就像全盘复制一样简单。对于 RAID-5,它就略微有一些复杂了:不是将一个磁盘复制到另一个磁盘,而是 RAID-5 存储带中的其他所有磁盘都必须异或到一起。但基本思想是相同的。在传统存储系统中,重新同步或者发生在卷管理器中,或者发生在 RAID 硬件中。不管是哪种方式,它都会在文件系统下发生。但这是 ZFS,所以,我们当然必须与众不同。在上一篇文章中,我提到过 RAID-Z 重新同步需要一种不同的方法,因为它需要文件系统元数据来确定 RAID-Z 几何。事实上,ZFS 从一个磁盘到另一个磁盘对存储池的块树进行 cp -r 操作。它听起来没有直接的全盘复制有效,而且安全地遍历有效池一定比较棘手(更多内容在将来的帖子中介绍)。但事实上,元数据驱动的重新同步的优点如此之多,以至于我们在简单的镜像中都使用它。最重要的原因是数据完整性。使用简单的磁盘复制,无...