• ベストアンサー

Linuxの「セクタ」と「データブロック」の違い

Linuxの本を読んでいたら、 データを保存する領域として「セクタ」と「データブロック」という 二つの単語が出て来ました。 本を読む限り、微妙に意味合いが違っているようなのですが どのように違うのか明確に分かりませんでした。 どなたか分かる方教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

セクタはハードウェア的な最小単位というのは正しいですが、これも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 の影響を受けている』とも。

その他の回答 (1)

回答No.1

いろいろと面倒くさいのですが、取り合えず、簡潔にわかりやすく言い換えると、 セクタは、HDDの"物理的な"最小単位。 ブロックは、HDDの"仮想的な"最小単位。です。 たとえば、 一般的なHDDの最小単位セクタは、512kBで、一般的にlinuxでパーティションを切るとブロックは4096kBなのですが、 この時、linuxは、物理的な512kBのセクタを8個くくりで1個とし、仮想敵に4096kBのセクタとして扱います。 この仮想的なセクタの大きさがブロックサイズです。 なぜ、仮想敵にHDDの最小単位を変える必要があるのか? そこには読み取りや書き取りの速度を向上させるための配慮があるからです。 ファイルを書き込む時、ファイルはブロックサイズの大きさに分割され、HDDにブロック単位で書き込まれます。 なので、大きな、たとえば4MBのデータを読むとき、512kBブロックなら約8000個のブロックをHDDから探しだして読まなければなりませんが、 4096kBブロックなら約1000個で済みます。 では、8倍も読み取りが早くなるのかといえば、もちろんそんなことはないのですが(とくにlinuxでデフォのetx系のファイルシステムは)、 読み取り書き取りの向上があるのは事実です。 では、逆にブロックサイズをでかくしまくればいいのかというと、 それではたとえば1kBのファイルを保存したときに、1kBのファイルのためだけに膨大な大きさの容量を食ってしまいます。 現段階では4096くらいがいいかなというのでそのサイズです。 ちなみに、ウェストンデジタルが、1セクタが4096kBサイズのHDDを近頃だしました。 どうせ、ブロックサイズを4096にするんならば、もともと4096kBのセクタHDDでもいいじゃないか、と思うでしょうが、フォーマットが面倒くさいです。 パソコン側が既定の512kBセクタと認識してしまうことと、ファイルシステム構築で最初のセクタをいくらか使うことによって8の倍数からデータを入れられないことがあるということによってズレが生じ、 セクタを無理やり割ってデータを入れなきゃいけなくなるために遅くなります。 このばあい、fdiskやpartedコマンドで開始セクタを8の倍数からになるようにしてやらなければなりません。 でも、こういう問題が現在あるおかげで、4096kBセクタのHDDは安いです。

関連するQ&A