• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「アロケーションサイズ≒データの大きさ」が速い?)

アロケーションサイズ≒データの大きさが速い?

このQ&Aのポイント
  • Windows 7でアロケーションユニットサイズより小さい大きさのデータを記録する場合、ハードディスクはその差分の領域も読み書きするのか?
  • アロケーションユニットサイズを64KBにしたハードディスクにファイルサイズ5KBのデータを書き込むと、差分の59KBの領域にはデータが記録されないのか?
  • ハードディスクが差分の領域も読み書きするのなら、小さいサイズのファイルを読み書きするのに大きなアロケーションユニットサイズを設定すると読み書きが遅くなるのか?

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

  • ベストアンサー
  • Barracuda
  • ベストアンサー率59% (60/101)
回答No.2

ディスク読み書きの最小単位が「セクター」(通常512バイト)で、読み書きはセクター単位でしか 行なえません。 1バイトのデータを読み書きしたい場合でも、1セクター分(512バイト)読み書きしなければなりません。 これに対し、「アロケーションユニット」(クラスター)は、ファイル管理の最小単位です。 ファイルを保存すると、どんなに小さいファイルでも1アロケーションユニット分の領域を使用します。 ただ、読み書きはセクター単位で行なわれるため、64KBのアロケーションユニットに5KBのファイルを書き込むと、5KB=10セクターだけ読み書きされ、残りの59KBにはアクセスされません。 このため、アロケーションサイズ未満のファイルでも、遅くなることはないと思われます。 ただ、アロケーションサイズが極端に大きいと、クラスターギャップ(上の例の59KB)が大きくなり、 ディスク上の無駄が多くなります。 ファイルのサイズは千差万別のため、映像などGB単位のファイルばかりを保存するのでなければ、 アロケーションユニットサイズは数KB程度が良いのでは、と思います。 NTFSのアロケーションユニットサイズはデフォルトで4KB(=8セクター)です。

yuri1993
質問者

お礼

有り難うございました。

yuri1993
質問者

補足

ご返事が遅くなってすみません。 >ただ、読み書きはセクター単位で行なわれるため、64KBのアロケーションユニットに5KBのファイルを書き込むと、5KB=10セクターだけ読み書きされ、残りの59KBにはアクセスされません。 そうなんですか。そうであれば、遅くなることは全くないんですね。 よく分かりました。 >ファイルのサイズは千差万別のため、映像などGB単位のファイルばかりを保存するのでなければ、 アロケーションユニットサイズは数KB程度が良いのでは、と思います。 映像などは全く扱いません。 Windows 7はいろんなケースを考えて規定値を4KBにしているんでしょうね。 有り難うございました。

その他の回答 (1)

  • u-bot
  • ベストアンサー率58% (1736/2988)
回答No.1

素人の回答なので参考程度にして下さい。 アロケーションユニットサイズ単位で読み書きします。 そのため質問者さんの書かれている前半部分はそのとおりだと思います。 しかしアロケーションユニットサイズは連続した区画がとられます。 そのためアロケーションユニットサイズ内では断片化されないメリットがあります。 つまり64KB以内のファイルは実質断片化しないためシーケンシャルリード、ライトに有利です --- HDDから4KBを読み書きする時間と64KBを読み書きする時間の差はHDDの回転速度を考えると無視できると思います。 それよりも断片化されてヘッドがシークする時間の方が大きいです。 だからといって1KBのデータでも64KBも占有するのは非効率なHDDの使い方です。 質問の「アロケーションサイズ≒データの大きさ」が一番効率と速度が良いのですが、データの大きさは予め判っていないので適当に決めるしかないのが現状でしょう。 効率と速度を両立するのは難しいというのが自分の考えです。

yuri1993
質問者

お礼

有り難うございました。

yuri1993
質問者

補足

ご返事が遅くなってすみません。 >HDDから4KBを読み書きする時間と64KBを読み書きする時間の差はHDDの回転速度を考えると無視できると思います。 確かにそうだと思うのですが、HDD全体を通常フォーマットすると1TBのHDDで5時間程度かかるので仮にデータの読み込みにもこれと同じ時間がかかるとすると、200MBのデータの読み込みには3.6秒(=5時間÷(1TB÷200MB))かかることになります。これを1個の200MBのファイルとして読み込めば3.6秒ですが、5KBの40,000個(=200MB÷5KB)のファイルとして読み込む場合で59KB(=64-5)部分も読むのであれば大変なロスが発生すると思いました。 >それよりも断片化されてヘッドがシークする時間の方が大きいです。 そうなんですね。シーク時間もロスになりますね。 >データの大きさは予め判っていないので適当に決めるしかないのが現状でしょう。 そうですね。もし、今の時点で分かっているとしても、将来どんな読み書きをするかは分からないですね。でも、Windows 7は4KBを規定値にしてますし、何かある仮定をしてこの値を設定しているのだと思います。そんな何かが分かればと思いました。 有り難うございました。

関連するQ&A