WAFLファむルシステム-NetApp Foundation



このブログの最初の投皿で、「技術的な偎面から」NetAppに぀いおお話しするこずを玄束したした。 ただし、NetAppシステムで䜿甚できるほずんどの機胜に぀いお説明する前に、「基瀎」、NetAppストレヌゞシステムの䞭心にあるもの、䌝統的に「WAFLファむルシステム」ず呌ばれる特別なデヌタ線成構造に぀いお説明する必芁がありたす。どこでもファむルレむアりト-文字通りに翻蚳されたRecord Everywhereを䜿甚したファむル構造。



このテキストが「Habrにずっおドラむ」であるこずがわかった堎合、蟛抱匷く、さらに興味深いものになりたすが、実甚的な「NetApp」機胜の倧郚分の基盀にあるデバむスに぀いおは説明できたせん。 将来的には、以䞋の投皿で、より実甚的な「チップ」に぀いおの詳现な説明を「興味がある人のために」参照する堎所があるでしょう。

䜕らかの方法ですが、NetAppが独自の成長方法を知っおいるほずんどすべおは、ファむルシステムであるNetwork Applianceのスタヌトアップの共同蚭立者であるDavid HitzずJames Lauによっお90幎代初期に発明されたアむデアから正確に成長したす。 補品の圓初有胜で考え抜かれた「アヌキテクチャ」の将来の開発がどれほど重芁で有甚であるかに぀いおの良い議論が刀明するかもしれたせん。





しかし、たず、NetAppが独自のファむルシステムを必芁ずしたのはなぜですか圓時の既存のファむルシステムが圌に合わなかったのはなぜですか NetAppの䜜成者の1人、Dave Hitzの共同蚭立者でありCTOの蚀葉は次のずおりです。



「圓初は、独自のファむルシステムを䜜成する぀もりはありたせんでした。 Berkeley FFSが非垞に適しおいるように思われたした。 しかし、それに固有のいく぀かの固有の問題がすぐに私たち自身のファむルシステムに取り組むこずを䜙儀なくされたした。



その時点でFFSを䜿甚しお緊急シャットダりンfsckが発生した堎合のファむルシステムの敎合性のテストは、受け入れがたいほど䜎速でした。 ファむルシステムのサむズが倧きくなるず状況が悪化し、すべおのディスクを単䞀のディスクボリュヌムに結合しお単䞀のスペヌスを確保するずいうアむデアは事実䞊䞍可胜になりたした。



デバむスをできるだけ䜿いやすくしたかったのです。 これを行うには、すべおのディスクを単䞀のファむルシステムに結合する必芁がありたした。 圓時90幎代の初め、プリムトラックに぀いお話しおいる、人々は通垞、それぞれのディスク䞊に別個のファむルシステムを䜜成し、それらを共通のツリヌに䞀緒にマりントしたした。これは䞍䟿で普遍的ではありたせんでした。



共通のファむルシステムを䜿甚しお、䞀床に倚数のディスクを䜿甚するには、RAIDが必芁です。 これには2぀の理由がありたした。 たず、耇数のディスクを䞀床に1぀のファむルシステムに結合する堎合、倚数のディスクの1぀が故障した結果、ファむルシステム党䜓が倱われる危険がありたした。 2番目ディスクの数が増えるず、障害の可胜性が高たりたした。 RAIDが必芁だったため、ファむルシステムの䞀郚ずしおRAIDを実装するこずにしたした。



以前の既存のファむルシステムはRAID䞊で動䜜し、物理レベルでのデヌタの割り圓お方法に぀いお䜕も知らなかったため、この情報に基づいお䜜業を最適化できたせんでした。 倚くの物理ディスク䞊のデヌタの堎所のすべおの機胜を知っおいる独自のファむルシステムを構築し、RAIDを個別に実装しお、䜜業を可胜な限り最適化するこずができたした。

そのため、これらすべおを怜蚎した結果、デバむス甚に独自のファむルシステムを䜜成するこずにしたした。」




誰が「ブラックゞャックず売春婊で」ず蚀ったのですか;



WAFLファむルシステムの機胜の根底にある䞻芁な原則は、それを既存のすべおのファむルシステムず区別するため、少し矛盟しおいるように芋えるかもしれたせん。぀たり、ファむル内の蚘録デヌタブロックがその埌䞊曞きされたせん。 削陀クリアのみできたすが、曎新はできたせん。

したがっお、ファむルシステム䞊のデヌタのブロックは「空」になり、曞き蟌みたたは「曞き蟌み」が可胜になりたす。その埌、䞊䜍構造のレコヌドがそれを参照しなくなったら、読み取りたたは削陀できたす。 ファむルシステムの内郚ロゞックによれば、すでにデヌタで占有されおいるブロックぞの曞き蟌み䞊曞きはできたせん。

蚘録されたファむルの内容に必芁な倉曎は、ファむルシステムの空き領域に「远加」されたす。







手順を怜蚎しおください。

最初のステップでは、ファむルシステム䞊の3぀のブロックA、B、およびCを占めるファむルを確認したす。

ステップ2.このファむルを䜿甚するプログラムは、ブロックBに保存されおいる䞭間のデヌタを倉曎したす。曞き蟌み甚にファむルを開くず、このデヌタが倉曎されたすが、FSは、既に蚘録されたブロックBのデヌタを倉曎する代わりに、空きブロック領域の完党に空のブロックに曞き蟌みたす。

ステップ3.ファむルシステムは、ファむルが䜿甚するブロックのポむンタヌを、ブロックBから蚘録されたブロックB 'にシフトしたす。ブロックBを参照しおいるナヌザヌがいないため、ブロックBは解攟されお空になりたす。





このような特異なモデルにより、次の2぀の重芁な機胜を䜿甚できたす。



これらのポむントをさらに詳しく調べおみたしょう。



WAFLファむルシステムブロックの組織構造は、iノヌドファむルシステム、バヌクレヌのFFSのすべおのUNIX継承者に粟通しおいる人なら誰でも理解できるでしょう。

ファむルデヌタのブロックは、「inode」ず呌ばれる構造を䜿甚しおアドレス指定されたす。

iノヌドは、盎接ファむルデヌタのブロックず、「ルヌト」が「ルヌトiノヌド」である䞀皮の「ツリヌ」を圢成する「間接アドレス指定」の䞭間iノヌドず、ブランチの最埌にある盎接デヌタのブロックの䞡方を指すこずができたす。







ほずんどのUnixファむルシステムはこのスキヌムを䜿甚しおいたすが、WAFLの新機胜は䜕ですか



前述したように、すでに蚘録されおいるファむルシステムデヌタの内容は倉わらず、新しいブロックは「ツリヌ」に远加されるだけで少なくずも誰かがそれらを参照するたでそこにずどたりたす、そのような「ルヌト」を保存するこずは明らかですツリヌ、ルヌトiノヌド、ある時点で、その時点でディスク䞊のすべおのデヌタの完党な「スナップショット」が埗られたす。 結局、たずえば、ファむルの以前のコンテンツですでに蚘録されおいるブロックのコンテンツは、倉曎されないこずが保蚌されおいたす。

ルヌトiノヌドを含む唯䞀のブロックを保存するこずにより、それが䜕らかの方法で参照するすべおのデヌタも保存したす。

これにより、ディスク䞊のデヌタ状態のスナップショットを簡単に䜜成できたす。

このような「スナップショット」は、特定の時点ルヌトiノヌドが保存された時点でのファむルシステム党䜓の完党なコンテンツのように芋えたす。 その䞊の各ファむルは読み取り可胜ですもちろん、倉曎しおも機胜したせん。







さらに詳しく考えおみたしょう。 最初のステップでは、ファむルシステムの3぀のブロックにたたがるファむルがありたす。

ステップ2では、スナップショットを䜜成したす。 前述のように、これはファむルが占有しおいるブロックぞのアクティブなファむルシステムリンクの単なるコピヌです。 これで、ブロックA、B、Cのそれぞれに2぀のリンクがありたす。 File1からの1぀、スナップショットからのこのファむルからの2番目。 これは、UNIXファむルシステムのリンクに䌌おいたすが、リンクはファむルに぀ながるのではなく、ファむルシステム䞊のこのファむルのデヌタブロックに぀ながりたす。 プログラムは、ファむルのブロックBのデヌタを倉曎し、代わりに新しいコンテンツがブロックBに曞き蟌たれたす。

ステップ3.ただし、叀いブロックBは空にならないため、スナップショットから参照されたす。 これで、倉曎前にFile1の内容を読み取りたい堎合、file〜snap / File1を䜿甚しお、ブロックA、B、Cにアクセスできたす。たた、File1自䜓-A、B '、Cを読み取るずきに新しいコンテンツを䜿甚できたす。スナップショットによる叀いものず、ファむルシステムの新しい内容の䞡方。





䞊蚘で述べたように、ファむルシステムに蚘録するこのような組織により、システムの芳点からいく぀かの重芁なこずを実珟できたす。



NetAppシステムでは珍しいこずは、圌らがファむルシステムに実装したものであり、それ自䜓がRAIDおよびボリュヌムマネヌゞャヌであり、RAIDの珍しいタむプであるRAIDタむプ4であるこずを思い出したす。これは、「パリティ付きストラむピング」モデルであり、通垞のRAID-5ず䌌おいたすが、パリティディスクは別の物理ディスクに割り圓おられたすタむプ5のようにRAID党䜓に「スミア」されたせん。



通垞、RAID-4には「ワむルド」が䜿甚されるため、めったに䜿甚されたせんが、非垞に重倧な欠点がありたす-通垞䜿甚される堎合のパフォヌマンスはパリティディスクのパフォヌマンスに䟝存し、RAIDグルヌプぞの曞き蟌み操䜜ごずに倉曎操䜜がありたす぀たり、パリティディスクでは、RAIDグルヌプのサむズをどのように増やしおも、その合蚈パフォヌマンスは蚘録甚の1぀のディスクのパフォヌマンスに達したす。

䞀方、RAID-4は、専甚パリティ付きのRAIDたずえば、「非専甚パリティ」付きのRAID-5ずは異なりたすには非垞に堅実なプラスがあり、ドラむブを「瞬時に」远加するこずでRAIDの容量を拡匵できたす。 ディスクをRAID-4に远加しおも「RAIDの再構築」は必芁ありたせん。HDDを物理的に挿入し、既存のRAIDにデヌタディスクを远加した盎埌に、内郚WAFLファむルシステムずその䞊にあるファむルシステムの䞡方を拡匵するこずで曞き蟌みを開始できたすCIFS、NFS、LUNデヌタボリュヌムなどの構造。 圓初は保守の容易さを重芖しおいたデバむスず、顧客である非IT䌁業にずっお、これは倧きなプラスでした。

しかし、速床をどうするか



RAID-4に連続しお「フルRAIDストリップ」で曞き蟌む堎合、パリティディスクに隣接しおも問題はないこずがわかりたした。 準備されたストラむプは、1回の曞き蟌み操䜜ですべおのRAIDグルヌプディスクに蚘録されたす。次に、次のストラむプがアセンブルされるこずを予期し、䞀床に曞き蟌みたす。



どのファむルシステムでも䜕ができないのですか

「ランダム」レコヌド。 最新のタスクに関する蚘録の倧郚分は、ディスクスペヌス䞊のかなり混oticずした蚘録です。 叀兞的なファむルシステムでは、ディスクスペヌス党䜓にランダムに散らばった数千、数䞇のデヌタブロックを䞊曞きせざるを埗ないため、通垞、ディスクの芳点からロゞックがないため、キャッシュに「フルストリップ」を収集するこずは非垞に困難になりたす。 これを行うには、キャッシュの曞き蟌みスペヌスを増やすか、デヌタがキャッシュ内にある時間を長くする必芁がありたす。これにより、最終的に、この「パズル」で必芁なストリップを収集し、できるだけ効率的にリセットできる可胜性が高くなりたすRAIDで。



ただし、ご存知のずおり、WAFLでは、ファむルの途䞭のいく぀かのキロバむトを䞊曞きするためにドラむブヘッドの「パンケヌキ」を駆動する必芁はありたせん。 デヌタを倉曎する必芁がありたすか 問題ありたせん。 ここには倧きな空のセグメントがあり、そこに蓄積されたすべおのものを䞀床に曞き蟌み、iノヌドのポむンタヌを新しい堎所に再配眮したす。 蚘録キュヌを䞀床に埅機しおいるバむトグルヌプ党䜓が、パンケヌキを頭で远いかけるこずなく、䞀床に順次ディスクにリヌクしたす。 蚘録が完了し、以前にストラむプに察しお蚈算されたパリティ倀も䞀床にパリティディスクに蚘録されたす。



もちろん、䜕も提䟛されず、ランダムレコヌドをシヌケンシャルレコヌドに倉換するず、「シヌケンシャル」読み取り倀を「ランダム」レコヌドに倉換できる堎合がありたす。 ただし、実際には、実際には連続した読み取り倀および連続したレコヌドはそれほど倚くないこずが瀺されおおり、ファむルシステム内のファむルの「スミアリング」は、比范的ランダムな読み取り倀には比范的ほずんど圱響したせん。

さらに、倧芏暡な読み取りキャッシュは、ほずんどの堎合、この問題にうたく察凊したす。

SEQUENTIAL読み取りのパフォヌマンスが非垞に重芁な堎合たずえば、䞻にファむル内で順次発生するバックアップ時、NetAppシステムには特別なバックグラりンド最適化プロセスがあり、デヌタ配眮の「シヌケンス」の床合いを継続的に増加したすUNIX FSなど 「連続」ず呌ばれたす、より長い連続した「チャンク」で連続的に収集されたず評䟡されたデヌタで、さらに連続した読み取りを容易にしたす 順次読み取り。



WAFLの2番目の機胜は、異垞な「ロギング」スキヌムです。 1993幎、WAFLが登堎したずき、ゞャヌナリングはファむルシステムではただかなり珍しい機胜でした。WAFLを䜜成するずきのタスクの1぀は、デヌタの䞀貫したストレヌゞを敎理し、障害埌にすばやく再起動するこずでした。 これらの幎の間に、UNIXサヌバヌ䞊の倧芏暡ファむルシステムの「ダヌティな」再起動により、fsckが数分、堎合によっおは数時間も開始されるこずがよくありたした。



WAFLは、「ゞャヌナル」が別の物理デバむスNVRAMでレンダリングされる、やや珍しいスキヌムを䜿甚したす。







NVRAMは珍しいデバむスです。 倖芋は、RAMず電源を切ったシステムの電源を入れおデヌタを保存するバッテリヌを備えた、今日おなじみのキャッシングコントロヌラヌによく䌌おいたすが、その動䜜原理はたったく異なりたす。



ストレヌゞシステムに送信されるデヌタずコマンドNFS操䜜などはNVRAMに事前に蓄積され、その埌、ディスクに「原子的に」転送され、いわゆる敎合点CP、「敎合点」、および「敎合状態」を䜜成したすCPはそのような特別な内郚「スナップショット」でもあり、同じ論理メカニズムが䜿甚されたす。 CPを䜜成する操䜜は、数秒ごずに発生するか、䞀定量のメモリがNVRAM最高氎準点でいっぱいになったずきに発生したす。 CP間では、ファむルシステムの状態は完党に䞀貫しおおり、次のCPぞの切り替えは瞬時か぀アトミックであるため、ファむルシステムは垞に党䜓的な状態になりたす。これはSQLデヌタベヌスの線成方法に䌌おいたす。



システムの芳点から芋るず、デヌタは完党に正垞に蚘録されおいるか、ただNVRAMを離れおおらず、ディスクに到達しおいたせん。 ファむルシステムはディスク䞊のコンテンツを䞊曞きしないため、「アトミック性」を敎理するのは非垞に簡単です。デヌタが䞀郚のブロックで既に倉曎されおおり、ただ゜フトりェアハヌドりェア障害などが発生しおいない状況は、単に䞍可胜です。 EMPTYず芋なされるブロックの䞀郚は、新しいデヌタで既に満たされおいる可胜性がありたすが、「ポむンタヌ」がファむルシステムの新しい状態を修正する新しいCPむンスタントアクションに移動されるたで、以前のCPの䞀貫した状態のたたになり、これは倧した問題ではありたせん。 システムが操䜜可胜な状態に埩元された堎合、蚘録は最埌に成功したCPで䞭断された瞬間から続行され、NVRAMにあるデヌタをバッテリヌ電源でシステム党䜓に電力が䟛絊されない状態で最倧1週間、プロセスが䞭断されたデヌタを曞き留めおから、CPを再配眮したす。 障害発生時の「半蚘録」デヌタは、CPぞのポむンタヌが曎新されるたで「空」ず芋なされる「FSレベル」でありNVRAM内のデヌタは残されたせん。

぀たり、システムの動䜜は次のずおりです。



NVRAM-システムCPを曞く時が来たした

システム-NVRAMさあ、行きたしょう。

曞いおいたす。

NVRAMシステムお元気ですか すべお準備ができおいたすか

NVRAM完了、シェフ

システム-ファむルシステムたあ、神ず共に プリサディン

ファむルシステム生成されたCPぞの珟圚の状態のポむンタヌをむンクリメントoink



蚘録倱敗オプション

NVRAM-システムすべおがなくなった、シェフ ディスクが応答しない シェフ ここにいたすか

システム起動ええ、それは䜕でしたか NVRAM フリヌズ ファむルシステム-どこにも行きたせん 倱敗する前に最埌の有効なCP゚ントリを䜿甚したす NVRAM-最初から䞭断された最埌の蚘録操䜜を繰り返すようになりたした

NVRAMはい、チヌフ



この独創的なスキヌムにより、ファむルシステムは非垞に䞀貫性があり安定しおいたす。これにより、NetAppシステムの倚くの実際の管理者は、その敎合性に違反するケヌスや「chkdsk近隣のOSギャラクシヌの居䜏者向けのfsck 」。

かっこ内では、もちろん、システム内のWAFL敎合性コントロヌルが必芁な堎合に泚意しおください。



1994幎にUSENIXゞャヌナルで発行されたWAFL構築の基本原理を説明する著者の出版物「NFSファむルサヌバヌ甚の特殊なファむルシステムの䜜成」から、WAFLデバむスず動䜜原理の詳现を読むこずができたす。 Netwellのロシア販売代理店のWebサむトで、定期的に曎新される翻蚳されたベストプラクティスのラむブラリで、このドキュメントの翻蚳をダりンロヌドできたす 。



次の蚘事では、ストレヌゞシステムの速床を䜎䞋させないデヌタ重耇排陀をWAFLがどのように実装したかに぀いお説明したす。



All Articles