ファイルシステムの実際の内部動作が混乱しています。問題は、ファイルストレージとブロックストレージに関するものです。私が理解しているように、違いはデータにアクセスするレベルです。つまり、ファイルレベルのファイルストレージとブロックレベルのブロックストレージです。
私の質問は:ファイルリポジトリもファイルをチャンクに分割し、別のチャンクとして再度保存しますか?もしそうなら、違いは、ファイルを形成するためにチャンクを結合する責任が実際に誰にあるのかということです。ブロックストレージの場合、これは対応するブロックサーバーのオペレーティングシステムによって実行され、ファイルストレージの場合はファイルシステムの助けを借りてオペレーティングシステムによって実行されます。
フォローアップ:ブロックストレージの場合、オペレーティングシステムはファイルシステムを使用せずに、同じファイル内の個々のブロックをどのように追跡しますか?
答え1
ディスクドライバはディスクまたはディスクパーティションに接続し、システムにディスクブロック1からNまでのアクセスを提供する。ディスクドライバは、デフォルトの「デバイス」にアクセスする汚れた詳細を隠します。物理ディスクはシリンダー/ヘッド/セクター(C / H / S)を介してアクセスされ、実際にシリンダーの変更には物理的な操作(読み取り/書き込みヘッドを出入りするスライドアーム)が含まれます。磁気ヘッドはディスクプラッタの上に「飛ぶ」。ヘッドスワッピングは電子速度で発生しますが、セクタはディスクが回転するのを待つ必要があります。最適化には、C/H/S によるディスク I/O の順序付け、暗方向の変更の最小化、単一ヘッドの下のすべてのセクタの読み書きをブロックする、すべてのディスクとディスクのようなデバイス間のバッファリングなどがあります。詳細はさまざまです。ディスクドライバを使用すると、プログラムはこれらの詳細を無視できます。すべてのディスクドライブはブロック1からNまで存在します。
ディスクはGPTまたは以前のMBRによって制限されます。各パーティションはディスクのように「見えます」(ブロック1〜N)。ウィキペディアで詳しく説明します。
パーティションが「マウント」されると、man hier
ファイルシステム階層()の場所が割り当てられ、ファイルシステムの一貫性が確認され、必要に応じて回復されます。
i-nodes
ファイルシステムはこれらのディスクブロック(ブロック1〜N)を割り当て、mkfs
生成ファイルシステムを実行するときにそれ自身を割り当てるディスクブロック(オーバーヘッドブロック)を追跡します。読むman mkfs fsck
。ファイルシステムは、I / O最適化のためにブロックを「クラスタ」と「スーパークラスタ」で構成します。すべてのI / O(ユーザーデータ、フライシステムオーバーヘッド)はバッファリングされ、定期的にのみディスクにフラッシュされます。システムがクラッシュし、ファイルシステム割り当てブロックとファイルシステムメタデータのディスクコピーが一致しなくなる可能性があります。ファイルシステムは冗長性とロギングを使用してエラーを防ぎます。不一致を修復します。
ユーザプログラムは、システムが実施するアクセス規則に応じて、文字または(バイナリ)データブロックの形でファイルを読み書きすることができる。
ユーザーとハードウェアの間の各層は、他の層を変更することなく最適化できます(ただし、バッファにすべてのメモリを使用しますか?)。ブロック1からNまで。
答え2
ファイル保存の場合、最初はスーパーブロックファイルシステムの高度なチェックを提供します。
スーパーブロックは、サイズ、ブロックサイズ、空のブロック、または埋め込まれたブロックとその数、inodeテーブルのサイズと場所、ディスクブロックのマッピングと使用に関する情報、ブロックグループのサイズなど、ファイルシステムのプロパティの履歴です。
しかし、「ファイルを形成するためにこれらのブロックを結合する責任」は、インデックスノード- によって管理されるファイルシステム通常、inodeテーブル(または他の同様の構造)にあり、次のファイルを含むメタデータを含みます。オブジェクトデータのディスクブロック位置。
ブロックストレージの場合、「同じファイルの個々のブロックトレース」は実装によって異なります。ブロックストレージサーバーは、一部のファイルシステム自体(またはその両方)にブロックを保存することもできますが、通常はデータベースの形式でブロック管理を担当するソフトウェアがいくつかあります。