質問: linuxの「セクタ」と「データブロック」の違い linuxの本を読んでいたら、 データを保存する領域として「セクタ」と「データブロック」という 二つの単語が出て来ました。 本を読む限り、微妙に意味合いが違っているようなのですが どのように違うのか明確に分かりませんでした。 どなたか分かる方教えて下さい。
回答: セクタはハードウェア的な最小単位というのは正しいですが、これもhddでは標準で512バイトというだけで実際には可変です。 ※物理フォーマット時に設定(変更)する事ができます。 ブロックサイズは入出力時に一度に扱う単位で管理単位とは違います。 例えばe2fsの場合、mke2fsコマンドで調整できる値としてフラグメントサイズとブロックサイズがあって管理の最小単位はフラグメントサイズで入出力の最小単位はブロックサイズとなります。 例えばフラグメントサイズが1024バイトでブロックサイズが4096バイトの場合に4100バイトのファイルと3000バイトのファイルを書き込む時、4100バイトのファイルは4096+4なので4096バイトのブロックと1024バイトのフラグメント1つ、3000バイトのファイルは2048+952なので1024バイトのフラグメント3つとして扱われ、4つまでのフラグメントは1ブロックとして一度の入出力で読み書きされる場合があります。 ※入出力はブロックサイズで行われますが、管理はフラグメントサイズで行われるので速度は4096ブロックの速度で、利用効率は1024バイト/ブロック時の利用効率で使えます。(カーネル内で組立て・分解されるのでその処理に若干の負荷は余分に掛りますが) 前の例では単純にブロックサイズで管理した場合、4100バイトのファイルが2ブロックを消費し、3000バイトのファイルが1ブロックを消費するので合計3ブロックを占めますが、ブロックとフラグメントの2層で管理する事により、1ブロック+1/4ブロックと3/4ブロックで合計2ブロックに占有ブロックを減らせる事になります。効率のみでなく速度も入出力の回数が減らせて向上します。 http://ja.wikipedia.org/wiki/unix_file_system 上記ページで『ファイルの最後の部分はブロックサイズ未満になるので、それをブロックを分割したサブブロックに格納することで領域を有効活用できるようにする。これをブロックのサブアロケーション、テールマージ、テールパッキングなどとも呼ぶ』と説明されています。また、『linux の ext2 ファイルシステムは ufs の影響を受けている』とも。