web-dev-qa-db-ja.com

ファイルシステムのブロックサイズ

ファイルシステムのブロックサイズの重要性は何ですか?ファイルシステムのブロックサイズがたとえば8Kに設定されている場合、それはすべての読み取り/書き込みI/Oがサイズ8Kで発生することを意味しますか?したがって、アプリケーションがオフセット4097で16バイトを読み取りたい場合、オフセット4096から始まる4Kブロックが読み取られますか?

この場合、書き込みはどのように機能しますか?たとえば64バイトを書きたいとしましょう。

19
user880946

あなたが正しいです。ブロックサイズは、ファイルシステムの作業単位です。すべての読み取りと書き込みは、ブロックサイズの完全な倍数で行われます。

ブロックサイズは、ファイルが持つことができるディスク上の最小サイズでもあります。 16バイトのブロックサイズがある場合、16バイトのサイズのファイルはディスク上の完全なブロックを占有します。

"実用的なファイルシステム設計" は次のように述べています。

ブロック:ディスクまたはファイルシステムによって書き込み可能な最小単位。ファイルシステムが行うことはすべて、ブロックに対して実行される操作で構成されます。ファイルシステムブロックは、常にディスクブロックサイズと同じかそれ以上のサイズ(整数倍)です。

19
dmeister

通常、プログラミングでファイルを処理する必要がある場合は、ストリーム抽象化を使用する必要があります。コードを介したI/O操作は、多くの場合、ストリームの読み取りと書き込みです。ストリームとの間の読み取りと書き込みは、ファイルのチャンクを読み取りまたは書き込みできるようにバッファリングできます。

Fsのブロックサイズは、ディスク表面のマッピングを指します。マイナー単一ブロックのサイズメジャーブロック数(したがって、ファイルの割り当てに関する情報を保持するテーブル内の要素)。

そのため、OSは、ブロックサイズに基づいてディスク上のファイルを個別にマップし、「ファイルのマップ」を小さくすることができます。私が知っているように、これはプログラミング言語のAPIのストリーム抽象化には影響しません。

0
Andrea Colleoni