web-dev-qa-db-ja.com

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

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

  • 最大ボリュームサイズ256兆ヨビバイト (2128 バイト)
  • 最大ファイルサイズ:16 exbibytes(264 バイト)
  • 最大ファイル数
    • ディレクトリごと:248
    • ファイルシステムごと: 無制限
  • 最大ファイル名の長さ:255 ASCII文字(Unicodeなどのマルチバイト文字エンコーディングでは少ない))

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

10
esote

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

長い答え

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

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

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

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

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

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

2128 バイトはすでに事実上無限です。代わりにその数をおよそ10と書くことができます38 バイト、つまり、その制限に達するには、1つの地球サイズのZFSプールが必要であり、そのすべての 1050 アトム はデータを格納するために使用され、各バイトは10以下の要素によって格納されます12 原子。

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

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

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

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

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

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

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

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

1038÷1010≈1028÷1019≈109

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

つまり、すべての人が最大サイズのファイルを約10億個、地球サイズのZFSストレージアレイの小さな個人用スライスに保存できます。

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

そのファイルごとの最大ファイルサイズは16 EiB で、ZFSでは ext4の最大ボリュームサイズよりも16倍大きい です。

誰かがPlanet ZFS(旧称Earth)のスライスを使用して、最大サイズのext4ディスクイメージのバックアップを保存するとします。さらに、この認知症のお客様(常に1人です)は、ZFSの最大ファイルサイズの制限に達するために、ファイルごとに16まで tar に決定しました。そうすることで、その顧客はそれをもう一度約10億回行う余地があります。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

短い答え

実際には、の制限ですか?


脚注:

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

  2. 75.5億 、これを書いている時点で。上記では、10に四捨五入しています。10、それは 20世紀半ばにヒットするはずです です。

27
Warren Young