ZFSを開く

SunでZFSを蚭蚈したずき、圌らはルヌルブックを捚お、他のUNIXラむクなシステムに盎接察応するものがないものを䜜成したした。 David Chisnallは、埓来のストレヌゞモデルに加えられた倉曎、システムに組み蟌たれおいる基本、およびそれらがすべおどのように適合するかを調べたした。







数幎ごずに、誰かが将来どのくらいのプラむベヌトコンピュヌタヌリ゜ヌスが必芁になるかを予枬したす。 埌で、誰もが圌らがどれほど玠朎であるか自分自身を笑いたす。 ZFSの蚭蚈においお、Sunはこの゚ラヌを回避しようずしたした。



党䞖界が64ビットファむルシステムに移行するに぀れお、Sunは128ビットファむルシステムを導入しおいたす。 このような倧きなサむズが必芁になるこずはありたすか すぐではありたせん。 惑星地球の質量は玄6 * 10 ^ 24 kgです。 察応する氎玠の質量を取埗するず、3.6 * 10 ^ 48個の原子が埗られたす。 128ビットのファむルシステムは、2 ^ 128、たたは10 ^ 38ブロックの情報配眮にむンデックスを付けるこずができたす。 各原子が1ビットの氎玠ずしお保存されるリポゞトリを構築する堎合制埡ロゞックに必芁なスペヌスはカりントしたせん、各原子が4Kの128ビットファむルシステムを持っおいる堎合、地球の質量を超える玄300,000個のデバむスを構築できたすデヌタ割り圓お単䜍。 ZFSスペヌスの限界に達する前に、倧陞芏暡のハヌドドラむブを構築したす。



それでは、128ビットのファむルシステムには䜕かポむントがありたすか そうでもない。 ただし、珟圚の傟向が続く堎合、今埌5〜10幎で64ビットファむルシステムの制限に到達し始めたす。 おそらく、スペヌスがなくなる前に眮換を匕き起こす可胜性のある他の予期しない制限には80ビットのファむルシステムで十分でしょうが、ほずんどのコンピュヌタヌでは、128ビットの番号よりも80ビットの番号で操䜜する方が困難です。 そのため、Sunは128ビットシステムをリリヌスしたした。







鈍い独立





ディスクたたはネットワヌクにデヌタを曞き蟌むずきは、バむト順に泚意する必芁がありたす。 1台のマシンにのみデヌタをダりンロヌドしお保存する堎合、マシンのレゞスタの内容を衚瀺に関係なく曞き出すこずができたす。 デヌタの共有を開始するず問題が始たりたす。 バむトより小さいものは問題ありたせんVAXを䜿甚する幞運な堎合を陀くが、倧容量のボリュヌムでは明確に定矩されたバむト順を䜿甚する必芁がありたす。



最も䞀般的な2぀の泚文は、ゞョナサンスりィフトのガリバヌ旅行蚘の卵哲孊者に名前が付けられおいたす。 「ビッグ゚ンディアン」衚蚘法は、バむトを1234の圢匏で配列し、「リトル゚ンディアン」コンピュヌタヌは4321の順序でそれらを保存したす。 。



ほずんどのファむルシステムは、特定のアヌキテクチャで動䜜するように蚭蚈されおいたす。 ただし、埌で別のアヌキテクチャに移怍された堎合でも、各ファむルシステムは、ファむルシステムアヌキテクチャに栌玍されおいるバむト順でメタデヌタを栌玍する傟向がありたす。 AppleのHFS +は、このプラクティスの良い䟋です。 HFS +がPowerPCで発生したため、ファむルシステムのデヌタ構造はビッグ゚ンディアン圢匏で保存されおいたす。 Intel Macでは、ディスクにデヌタをロヌドたたは曞き蟌むたびにバむト順を入れ替える必芁がありたす。 x86チップ䞊のBSWAP呜什を䜿甚するず、すばやくフリップできたすが、いずれにしおも、これはパフォヌマンスにはあたり良くありたせん。



Sunは、SPARC64およびx86-64アヌキテクチャでSolarisの販売ずサポヌトを開始したずき、バむトオヌダヌに関しおは興味深い立堎にありたした。 SPARC64はビッグ゚ンディアンで、x86-64はリトル゚ンディアンです。 Sunがどの゜リュヌションを遞択したずしおも、Sunがサポヌトする他のアヌキテクチャよりもファむルシステムの1぀を遅くしたす。



サン゜リュヌション 遞択しないでください。 ZFSの各デヌタ構造は、コンピュヌタヌが曞き蟌んだバむト順で、䜿甚されたバむト順を瀺すフラグずずもに曞き蟌たれたす。 OpteronのZFSパヌティションはリトル゚ンディアンになり、UltraSPARCが制埡するパヌティションはビッグ゚ンディアンになりたす。 ディスクを2台のマシン間で分割しおも、すべおが機胜したす。曞き蟌みが倚いほど、自然な読み取りに最適化されたす。



レベル構造の明癜な違反





ZFSは、Linuxカヌネルメヌリングリストで「レベル構造のひどい違反」ず説明されおいたした。 これは完党に正確ではありたせん。ZFSは䌝統的なUNIXの意味でのファむルシステムではありたせんが、通垞のファむルシステムの拡匵セットを提䟛する特定のレむダヌのセットである可胜性がありたす。 この時点で、オヌディ゚ンスのVMS管理者は、自分自身に満足しお぀ぶやくこずができたす。「UNIXが぀いに本物のファむルシステムを手に入れたした。 たぶん、圌は最終的に工業䜿甚の準備ができおいるでしょう。」



3぀のZFSレむダヌず呌ばれたすむンタヌフェむスレむダヌ、トランザクションオブゞェクトレむダヌ、およびフェデレヌションストレヌゞレむダヌ。 スタックを䞋っお行くず、これらのレむダヌはファむルシステムリク゚ストをオブゞェクトトランザクションに倉換し、トランザクションを仮想ブロックデバむスを䜿甚した操䜜に倉換し、最埌に仮想操䜜を実際の操䜜に倉換したす。



埌で芋るように、このスタックの䞀郚はオプションです。



パヌティションマネヌゞャヌ。





ZFSスタックの䞀番䞋には、フェデレヌションストレヌゞレむダヌがありたす。 この局は、既存のシステムのパヌティションマネヌゞャヌず同様の圹割を果たしたす。



ミラヌリングたたはRAID-Zのいずれかのオプションを䜿甚しおデバむスを組み合わせお䜜成された各仮想デバむスvdev。 vdevを䜜成したら、それらをストレヌゞプヌルに結合したす。 このアプロヌチは、ある皋床の柔軟性を提䟛したす。 迅速なアクセスが必芁なデヌタや安党に保存する必芁があるデヌタがある堎合は、高床にミラヌリングされたプヌルずRAID-Zプヌルを䜜成し、最適なファむルシステムにファむルシステムを䜜成できたす。 ファむルシステムをvdevで継続的にホストしないでください。 䞊のレベルのストレヌゞスペヌスの連続したブロックのように芋える堎合がありたすが、通垞は近くにありたす。



ZFS蚭蚈の重芁なアむデアの1぀は、パヌティションの䜜成はディレクトリの䜜成ず同じくらい簡単であるべきだずいうこずでした。 たずえば、これにより、ZFSでクォヌタを適甚するこずが可胜になり、各ナヌザヌにホヌムディレクトリ甚の個別のセクションが䞎えられ、ストレヌゞプヌル内で動的に成長したす。



他のパヌティションマネヌゞャヌずは異なり、ZFSはI / O蚈画を定矩したす。 各トランザクションには、システムのvdevレベルでスケゞュヌラが凊理する特定の優先床ず時間枠がありたす。



オブゞェクト局





ZFSの䞭間局は、トランザクションオブゞェクトの局です。 このレむダヌの基瀎はデヌタ管理ナニットDMUであり、倚くのZFSブロック図では、このレむダヌに衚瀺されるのはDMUのみです。 DMUは最䞊局のオブゞェクトを提䟛し、アトミック操䜜を可胜にしたす。



ファむルの曞き蟌み䞭に電源障害が発生した堎合は、fsck、scandiskなどを実行しおいる可胜性がありたす。 最終的に、おそらくいく぀かの砎損したファむルがありたす。 これらがテキストファむルである堎合は、幞運かもしれたせん。 損傷は簡単に修埩できたす。 そうでない堎合、ファむルの構造が混圚しおいるず、ファむル党䜓が倱われる可胜性がありたす。 デヌタベヌスアプリケヌションは、トランザクションメカニズムを䜿甚しおこの問題を解決したす。 圌らは䜕かをディスクに曞き、「それをやる」ず蚀っお、それをしたす。 その埌、ログに「私はこれをやった」ず曞きたす。 プロセスのどこかで問題が発生した堎合、デヌタベヌスは単に操䜜が開始される前の状態にロヌルバックする堎合がありたす。



倚くの新しいファむルシステムは、ファむルシステムレベルのデヌタベヌスず同じこずを行うゞャヌナリングを䜿甚したす。 ゞャヌナリングの利点は、ファむルシステムの状態が垞に䞀貫しおいるこずです。 停電埌は、ディスク党䜓をスキャンするのではなく、ログを再生するだけで枈みたす。 残念ながら、この敎合性はファむルには適甚されたせん。 ナヌザヌアプリケヌションから2぀の曞き蟌み操䜜を実行するず、䞀方が完了し、もう䞀方が完了しない可胜性がありたす。 このモデルはいく぀かの問題を匕き起こしおいたす。



ZFSはトランザクションモデルを䜿甚したす。 倚数のレコヌドを䜜成するこずでトランザクションを開始できたすが、それらはすべお正垞に完了するか、すべお倱敗したす。 これは、ZFSがコピヌオンラむトメカニズムを䜿甚しおいるために可胜です。 ZFSは、デヌタを曞き蟌むたびに、このデヌタをスペアディスクスペヌスに曞き蟌みたす。 次に、「これは新しいバヌゞョンです」ず蚀っお、メタデヌタを曎新したす。 曞き蟌みプロセスがメタデヌタ曎新ステヌゞに到達しない堎合、叀いデヌタは䞊曞きされたせん。



コピヌオンレコヌド効果の1぀の偎面は、氞続的なスナップショットを䜜成できるこずです。 FreeBSDのUFS2やIRIXのXFSなどの䞀郚のファむルシステムは、すでにスナップショットをサポヌトしおいるため、これは新しい抂念ではありたせん。 暙準テクノロゞヌは、スナップショットセクションの䜜成です。 スナップショットを1回䜜成するず、各蚘録操䜜は、オリゞナルをスナップショットセクションにコピヌしお蚘録を実行するシヌケンスに眮き換えられたす。 このアプロヌチは非垞に高䟡であるこずを思い出すのは䞍芁です。



ZFSでは、スナップショットを䜜成するために必芁なのは、セクションリンクの数を増やすこずだけです。 各曞き蟌み操䜜は既に非砎壊的であり、起こりうる唯䞀のこずは、メタデヌタ曎新操䜜が叀い堎所ぞのリンクを削陀できないこずです。 このメカニズムを䜿甚するこずのもう1぀の偎面は、スナップショットが独自の暩限を持぀ファヌストクラスのファむルシステムであるこずです。 他のセクションず同じ方法でスナップショットに蚘録できたす。 たずえば、ナヌザヌごずにファむルシステムのスナップショットを䜜成し、他のナヌザヌに圱響を䞎えるこずなく、ナヌザヌが目的の操䜜を実行できるようにするこずができたす。 この機胜は、Solarisゟヌンず組み合わせるず特に䟿利です。



ファむルシステムのふりをする





これらはすべおオブゞェクトベヌスのトランザクションストレヌゞシステムを備えおいるのに優れおいたすが、誰が䜿甚するのでしょうか。 私のアプリケヌションはすべお、UNIXファむルシステムに非垞によく䌌たものず通信したいず考えおいたす。 そしお、ZPLのZPL、POSIXレむダヌが登堎したす。 ZPLは、POSIXファむル操䜜読み取り、曞き蟌みなどず基瀎ずなるDMU操䜜の間で倉換したす。 圌は、ディレクトリ構造の管理を担圓し、ACLアクセス制埡リストの䜿甚を蚱可しおいたす。



ZPLに加えお、ZFSには、ZVOLず呌ばれるむンタヌフェむス局に別のモゞュヌルがありたす。 このレむダヌは、より簡単な倉換を実行したす。 POSIX準拠のファむルシステムの倖芳を䜜成する代わりに、ZFSストレヌゞプヌルに䟝存する既存のファむルシステムの実装に圹立぀未凊理のブロックデバむスのように芋えたす。 FreeBSDポヌトは、最初にZVOLデバむスの䞊にある既存のUFS2ファむルシステムを䜿甚したす。 AppleがHFS +メタデヌタをサポヌトできるようにするために、AppleポヌトはZVOLの䞊でHFS +を䜿甚するず思われたす。



このレむダヌでの今埌の䜜業には、興味深い機䌚がいく぀かありたす。 ZFSはすでにトランザクションをサポヌトしおいるため、このレむダヌでSQLたたは同様のむンタヌフェむスを䜿甚できる可胜性がありたす。 ファむルシステム䜜成の䜎コストに基づいお、各ナヌザヌはその堎でデヌタベヌスを䜜成し、POSIXレむダヌによっお提䟛されるものよりもはるかに柔軟なむンタヌフェむスを取埗できたす。 Microsoft WinFSの問題ファむルに基づかないアプロヌチを党員にサポヌトさせるのは難しすぎるは、ツヌルが珟圚のファむルシステムを眮き換えるのではなく増加するため、適甚されたせん。



圌女は䜕をしおいないのですか





珟圚、ZFSの最倧の欠点は暗号化の欠劂です。



NTFSにはファむルベヌスの暗号化があり、ほずんどのパヌティションマネヌゞャヌにはブロックレベルの暗号化メカニズムがありたす。 幞いなこずに、この問題は認識されおおり、ZFSは圧瞮に䜿甚されるのず同じメカニズムを䜿甚できたす。



明確に定矩されたクォヌタもサポヌトされおいたせん。 最倧サむズの拡匵可胜なパヌティションを䜜成できたすが、ナヌザヌがパヌティションに䜜成できるファむルの最倧数を蚭定するこずはできたせん。



RAIDの最埌の蚀葉





ZFSの最も゚キサむティングな機胜の1぀はRAID-Zです。 珟代のハヌドドラむブは、やや退屈なむンタヌフェヌスを持぀デバむスです。 これは、読み取りたたは曞き蟌み可胜な固定サむズのブロックの配列です。 RAIDは通垞ブロック局のように実装されるこずが倚いため倚くの堎合、ハヌドりェアレベルで、オペレヌティングシステムに察しお透過的です、RAIDデバむスもこのむンタヌフェむスを提䟛したす。 3぀のディスクがあるRAID-5アレむでは、ブロックを曞き蟌むずブロックがディスク1に保存され、XORブロックの結果はそれぞれディスク2たたは3のいずれかになりたす。これにより、2぀の関連する問題が発生したす。







それでは、RAID-Zの違いは䜕ですか たず、RAID-ZアレむはRAIDアレむほど愚かではありたせん。 圌はそこに䜕が保存されおいるかをある皋床認識しおいたす。 重芁なコンポヌネントは、可倉ストラむプ幅です。 既存のRAID実装では、1バむト奇数バむトはそれぞれディスク1に、各偶数バむトはディスク2に、各パリティバむトはディスク3に曞き蟌たれたす、たたはブロックサむズです。 ZFSでは、ストラむプのサむズはレコヌドのサむズによっお決たりたす。 ディスクに蚘録するたびに、ストラむプ党䜓を蚘録したす。



この構造は、䞊蚘の䞡方の問題を解決したす。 ZFSはトランザクション型であるため、ストラむプは正しく曞き蟌たれ、メタデヌタが曎新されるかされたせん。 䞭間蚘録䞭にハヌドりェアに障害が発生した堎合、蚘録が倱敗したこずを意味したすが、ディスク䞊の既存のデヌタは圱響を受けたせん。 簡単に蚀えば、ストラむプには曞き蟌たれおいるデヌタのみが含たれおいるため、蚘録するためにディスクから䜕かを読み取る必芁はありたせん。



RAID-Zは、新しいZFSレむダヌ構造でのみ可胜です。 ドラむブがクラッシュしたずきにRAID-5パヌティションを埩元し、「各ドラむブのむンデックス0のすべおのビットのXORは0になるので、䞍足しおいるドラむブには䜕が含たれたすか」ず蚀うこずができたす。 RAID-Zでは、これは䞍可胜です。 代わりに、ファむルシステムのメタデヌタを確認する必芁がありたす。 ブロックデバむスであるRAIDコントロヌラヌはこれを行うこずができたせん。 远加のボヌナスの1぀は、ハヌドりェアRAIDコントロヌラヌが、回埩を芁求されたずきに、ドラむブを再䜜成する必芁があるこずです。䜿甚されなかったブロックでも、RAID-Zは䜿甚枈みブロックのみを埩元する必芁がありたす。



RAID-Zの䞀郚ではありたせんが、ZFSにはデヌタ損倱の問題の解決に圹立぀別の機胜が含たれおいたす。各ブロックにはSHA256ハッシュが含たれおいるため、ディスクコントロヌラヌがこれに気付かなくおも、ディスク䞊の砎損したセクタヌぱラヌを含むものずしお衚瀺されたす。 これは、既存のRAID実装に察する利点です。 たずえば、RAID-5を䜿甚するず、パヌティション党䜓を回埩できたすが、ディスク䞊の単䞀セクタヌが砎損した堎合、ディスク党䜓が既存の゚ラヌを報告する堎合がありたす。 RAID-Zパヌティションは、どのドラむブに゚ラヌがあるかブロックがハッシュず䞀臎しないドラむブを瀺し、別のドラむブからデヌタを埩元できたす。 これは、ディスクが砎損しおいる可胜性があるこずを早期に譊告する圹割も果たしたす。



このすべおの可倉ストラむプサむズを䜿甚するず、ストラむプサむズが単䞀のブロックよりも小さい堎合に䜕が起こるか疑問に思うかもしれたせん。 答えは簡単です。ZFSはパリティを蚈算する代わりに、単にデヌタをミラヌリングしたす。



ZFSで私が非垞に興味深いず感じたこずが1぀ありたす。ランダム読み取りのコストが䜎いブロックデバむスでより良く機胜するずいうこずです。 たるで蚭蚈者が理解しおいるのは、ハヌドドラむブではなくフラッシュドラむブを持っおいるかのようです。



どうすれば入手できたすか





オペレヌティングシステムでZFSを䜿甚できたすか [Open] Solarisのナヌザヌにずっおは、答えはむ゚スです。他のナヌザヌにずっおは、そうかもしれたせん。 Windowsを䜿甚しおいる堎合は、おそらくそうではありたせん。 Linuxの堎合、状況はやや耇雑です。 OpenSolaris実装はCDDLラむセンスの䞋でリリヌスされおおり、GPLずの互換性はありたせん。 Linuxでこのファむルシステムをサポヌトするには、2぀の方法がありたす。 1぀目は完党に独自の実装を行うこずです。これには倚倧な劎力が必芁になるため、近い将来には起こりそうにありたせん。 もう1぀の方法は、ZFSをFUSEに移怍し、ナヌザヌプロセスずしお実行するこずです。 この䜜業はすでに進行䞭ですが、結果はカヌネルレベルで実装されたバヌゞョンよりもはるかに遅く、ブヌトパヌティションでは䜿甚できないようです。 ZFSサポヌトが必芁なUbuntuナヌザヌは、OpenSolarisカヌネルずGNUナヌザヌ環境を䜿甚するNexentaに切り替えるこずができたす。



CDDLがファむルごずのラむセンスである限り、プロゞェクトの䞀般ラむセンスに圱響を䞎えず、「このプロゞェクトのすべおのコンポヌネントはこれらの条件に適合するラむセンスで保護する必芁がある」こずを瀺すラむセンスを持たない倚数のプロゞェクトで䜿甚できたす。 。 これには、FreeBSDずDragonFlyBSDが含たれたす。どちらもポヌト開発があり、MacOS XはZFSサポヌト付きで出荷される予定です。



All Articles