ZFSの制限の背後にある意味は何ですか?


10

Wikipediaよると、ZFSには次の制限があります。

  • マックス。ボリュームサイズ256兆ヨビバイト(2 128バイト)
  • マックス。ファイルサイズ:16エクスビバイト(2 64バイト)
  • マックス。ファイル数
    • ディレクトリごと:2 48
    • ファイルシステムごと:無制限
  • マックス。ファイル名の長さ:255 ASCII文字(Unicodeなどのマルチバイト文字エンコーディングの場合は少ない)

なぜこれらの制限があるのですか?これらのものを内部的に制限するものは何ですか?ZFSが理論的に無制限のボリュームサイズやファイル名の長さなどを持たないのはなぜですか?

回答:


27

これらのものを内部的に制限するものは何ですか?

長い答え

ZFSの制限は固定サイズの整数に基づいています。これは、コンピューターで計算を行う最も速い方法だからです。

別の方法は任意精度演算と呼ばれますが、本質的に低速です。これが、任意精度の算術がほとんどのプログラミング言語のアドオンライブラリであり、算術を実行するデフォルトの方法ではない理由です。例外もありますが、これらは通常、またはWolfram言語のような数学指向のDSLです。bc

高速演算が必要な場合は、固定サイズの単語、ピリオドを使用します。

任意精度の計算からの速度ヒットは、コンピューターのRAM内では十分に悪いですが、ファイルシステムが必要なすべての数値をRAMにロードするために必要な読み取り回数がわからない場合、非常にコストがかかります。任意のサイズの整数に基づくファイルシステムは、複数のブロックから各数値をつなぎ合わせる必要があり、メタデータブロックの大きさを前もって知っているファイルシステムに比べて、複数のディスクヒットから多くの追加のI / Oを必要とします。

次に、これらの各制限の実際的なインポートについて説明します。

マックス。ボリュームサイズ

2 128バイトは事実上すでに無限大です。代わりに、その数を約10 38バイトとして書き込むことができます。つまり、その制限に達するためには、10 個の50個の原子のすべてがデータの格納に使用される単一の地球サイズのZFSプールが必要です。バイトは、10 12アトム以下の要素によって格納されます。

10 12原子は多くのように聞こえますが、それは約47ピコグラムのシリコンです。

この ドキュメントの執筆時点で、microSDストレージのデータ密度はグラムで2.5×10 -13 g /バイトです。利用可能な最大のSDカードは1 TBで、重量は約0.25gです。¹microSDカードは純正品ではありませんシリコンですが、パッケージングを無視することはできません。これは、地球のコンピューターでも必要になるためです。プラスチックの密度が低く、金属ピンの密度が高いと、平均してシリコンとほぼ同じ密度になると仮定します。チップ間の相互接続などを考慮するために、ここでもいくつかの傾斜が必要です。

ピコ何かは10 -12なので、上記の47 pgと2.5×10 -13  g / Bの数値は約1桁離れています。つまり、最初の概算で、現在利用可能な最大のmicroSDカードから最大サイズのZFSプールを1つ構築するには、地球サイズの惑星全体の原子を使用する必要があるかもしれません。シリコン、カーボン、ゴールドなどの適切な組み合わせに近いもので、スラグが多すぎて見積もりを下回らないようにします。

ここで、テープやディスクのような密度の高いものの代わりにフラッシュストレージを使用しているのが不公平だと思われる場合は、関連するデータレートと、冗長性やデバイスの交換を検討していないことも考慮してください。この地球サイズのZFSプールは、置き換える必要のないvdevで構成され、妥当な時間でプールを満たすことができるほど高速にデータを転送できると想定する必要があります。ここでは、ソリッドステートストレージのみが有効です。

上記の概算はかなりおおざっぱであり、ストレージ密度は上昇を続けていますが、見通しを維持します。将来的には、最大サイズのZFSプールを構築するというこのスタントを取り除くために、クラストからクラストまでの合計を使用する必要があります小さな惑星のコアリソース。

マックス。ファイルサイズ

これで、惑星サイズのファイルシステムができました。その中に保存されているファイルのサイズについて、私たちは何と言えますか?

地球上のすべての人に、そのプールの同じサイズのスライスを与えましょう。

10 38  ÷10 10  ≈10 28  ÷10 19  ≈10 9

これは、プールのサイズをEarth²の人口で割った値を最大ファイルサイズで割った値です(端数)。

言い換えれば、誰もが私たちの地球サイズのZFSストレージアレイの小さな個人用スライスに最大10億の最大サイズのファイルを格納できます。

(この例では、ストレージアレイがまだ惑星のサイズであることが気になる場合は、上記の最初の制限に達するためには、それがそれほど大きくなければならないことを忘れないでください。したがって、この例で引き続き使用するのは当然です。ここに。)

そのファイルごとの最大ファイルサイズはZFSで16 EiBです  。これはext4の最大ボリュームサイズよりも16倍大きく、それ自体が今日、途方もなく大きいと考えられています。

最大サイズのext4ディスクイメージのバックアップを保存するために、Planet ZFS(旧称Earth)のスライスを使用しているユーザーを想像してください。さらに、この認知症の顧客(常に1人です)はtar、ZFSの最大ファイルサイズ制限に達するために、ファイルごとに16に増やすことにしました。そうすることで、その顧客はまだそれ約10億回繰り返す余地があります。

この制限について心配するなら、それはあなたが解決する必要があると想像しなければならない種類の問題です。そして、そのファイルをオンラインバックアップサービスに1回転送するために必要なデータ帯域幅を取得することさえありません。

地球コンピュータがどれほどありそうもないことについても明確にしましょう。最初に、重力の影響でそれ自体が崩壊して中央で溶融することを許可せずに、それを構築する方法を理解する必要があります。次に、残りのスラグなしで地球上のすべての原子を使用してそれを製造する方法を理解する必要があります。

さて、あなたは地球のコンピュータの表面を地獄のように変えたので、そのコンピュータを利用しようとするすべての人々は、どこか他の場所に住んでいなければならないでしょう。地球のコンピュータと現在の場所との間のすべてのトランザクションにレイテンシを追加する軽い遅延。今日の〜10msのインターネットping時間に問題があると考えている場合、地球の人口を月に移動させてこの地球コンピューターを作ることができる場合、キーボードとコンピューターの間に2.6光秒を置くことを想像してください。

ZFSのボリュームとファイルサイズの制限は、サイエンスフィクションの大きなものです。

マックス。ディレクトリあたりのファイル数

2 48は、ディレクトリあたり約10 14ファイルです。これは、ZFSをフラットファイルシステムとして処理しようとするアプリケーションでのみ問題になります

インターネット上の各IPアドレスに関するファイルを保存しているインターネット研究者を想像してみてください。最初に古いIPv4スペースのスラックスペースを差し引いてから、ホストにIPv6アドレスを追加して計算がうまくいくようにした後、正確に2 32個の IPが追跡されているとしましょう。以上2以上保存できるファイリングシステム構築するために彼を必要とする対処しようと、この研究者は何の問題である16 65536 - !— IPごとのファイル?

この研究者がTCPポートごとにファイルも保存しているとしましょう。そのため、IP:ポートの組み合わせごとに1つのファイルだけで、2 16乗数を使い果たしました。

修正は簡単です。IPにちなんだ名前のサブディレクトリにIPごとのファイルを保存し、IPごとのファイルを保持するディレクトリのサブディレクトリにポートごとのファイルを保存します。現在、私たちの研究者は、IP:ポートの組み合わせごとに10 14個のファイルを保存でき、長期的なグローバルインターネットモニタリングシステムに十分です。

ZFSのディレクトリサイズの制限は、私が「サイエンスフィクションビッグ」と呼んでいるものではありません。この制限に達する可能性のある実際のアプリケーションは今日知られているためですが、階層の力により、限定。

この制限は、特定のディレクトリでファイルを検索するために必要なデータ構造がRAMに収まりきらないようにするためだけに、これと同じくらい低く設定されている可能性があります。最初にこの問題を回避するために、データを階層的に編成することをお勧めします。

マックス。ファイル名の長さ

この1つの制限は厳しいように見えますが、実際には理にかなっています。

この制限はZFSに起因するものではありません。4.2BSDのFFSにさかのぼると思います。引用はわかりませんが、この制限が若い頃、「おばあちゃんへの短い手紙」を送るには十分なスペースだと誰かが指摘しました。

だから、それは疑問を投げかけます:なぜあなたはそれよりもわかりやすいようにファイルに名前を付ける必要があるのですか?それ以上の真のニーズがある場合は、おそらく階層が必要です。その時点で、制限に階層内のレベルの数に1を加えたものを乗算します。つまり、ファイルが階層の3レベル下に埋め込まれている場合、フルパスの名前の制限は4×255 = 1020文字です。

最終的に、この制限は人間の制限であり、技術的な制限ではありません。ファイル名は人間が使用するためのものであり、人間は実際にはファイルの内容を効果的に説明するために255文字を超える必要はありません。上限を高くしても役に立たないだけです。それ以来、人間は長いファイル名に対処する能力を獲得していないため、この制限は古い(1983)です。

奇妙に見える "255"の値がどこから来ているのかを尋ねる場合、それは8ビットバイトのサイズに基づくいくつかの制限です。2 8は256であり、ここで使用されるN-1値は、ファイルごとのメタデータの256バイトのフィールドでファイル名文字列の終わりをマークするためにnullターミネーターを使用していることを意味します。

簡潔な答え

実際には、どのような制限がありますか?


脚注:

  1. 0.01gの精度で指定されたスケールを使用してこれを測定しました。

  2. この記事の執筆時点で75億5000万。上記では、これ 10 10に四捨五入しています。これ世紀半ばにヒットするはずです。


3
楽しい読書、ありがとう!PATH_MAXPOSIXシステムでの最小数は256です。これは、最大でNAME_MAX各文字のコンポーネントで構成できます(この値は少なくとも14です)。
クサラナンダ

2
とても良い答えです。ファイル名の部分に追加するには:長いファイル名は実際には人間の使いやすさを低下させます。特に、短い名前と混合すると(表示に必要な画面サイズが増え、レイアウトに影響し、シェルの履歴が読みにくくなるなど)、それらは依然として(残念ながらZFSにはない)柔軟で検索可能なタグ付けシステムよりも劣ります。
user121391 2017年

驚くべきことですが、なぜファイル名を255文字に変更したのですか?そのための非常に実用的な使用例があります。たとえば、著者名のリストに沿って、長いコースや本や紙のタイトルがあります。そしてyoutube-dl、そのようなコースのビデオをダウンロードするときなど、完全なファイル名を書き込めないときに壊れるソフトウェアがあります。
Dan Dascalescu

@DanDascalescu私は答えでそれを正当化し、救済策を与えました。
ウォーレンヤング

@WarrenYoung:制限を課していないので、正当化する必要はありません。ただし、「ファイル名の最大長」セクションで問題が解決されたとは感じていません(「コース/本/紙」のタイトルの例を使用)。私の本/コース/ビデオのファイル名は、人為的にディレクトリ(例:作者)に加えてファイル名で分割するのではなく、十分なものにしたい。参照してください0個、1個、無限大のルールをとするための単純な検索実行「あまりにも長いファイル名を」-windows -それは、結果の数千万を明らかにする。
Dan Dascalescu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.