重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Windows 7でアロケーションユニットサイズより小さい大きさのデータを記録する場合は、ハードディスクはその差分の領域も読み書きするのでしょうか。

例えば、アロケーションユニットサイズを64KBにしたハードディスクにファイルサイズ5KBのデータを書き込んだ場合は、差分の59KB (=64-5) の領域にはデータは何も記録されないことになりますが、書き込むときにはこの59KB部分も書き込むのでしょうか。また、このクラスタから読み出す場合は、この59KB部分も読みとるのでしょうか。

もし、ハードディスクが差分の領域も読み書きするのなら、小さいサイズのたくさんのファイルを読み書きするのに大きなアロケーションユニットサイズを設定していると読み書きが確実に遅くなるのではと思って質問しました。
よろしくお願いします。

A 回答 (2件)

ディスク読み書きの最小単位が「セクター」(通常512バイト)で、読み書きはセクター単位でしか


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

この回答への補足

ご返事が遅くなってすみません。

>ただ、読み書きはセクター単位で行なわれるため、64KBのアロケーションユニットに5KBのファイルを書き込むと、5KB=10セクターだけ読み書きされ、残りの59KBにはアクセスされません。

そうなんですか。そうであれば、遅くなることは全くないんですね。
よく分かりました。

>ファイルのサイズは千差万別のため、映像などGB単位のファイルばかりを保存するのでなければ、
アロケーションユニットサイズは数KB程度が良いのでは、と思います。

映像などは全く扱いません。
Windows 7はいろんなケースを考えて規定値を4KBにしているんでしょうね。

有り難うございました。

補足日時:2011/11/27 12:57
    • good
    • 0
この回答へのお礼

有り難うございました。

お礼日時:2011/11/29 13:22

素人の回答なので参考程度にして下さい。



アロケーションユニットサイズ単位で読み書きします。
そのため質問者さんの書かれている前半部分はそのとおりだと思います。

しかしアロケーションユニットサイズは連続した区画がとられます。
そのためアロケーションユニットサイズ内では断片化されないメリットがあります。
つまり64KB以内のファイルは実質断片化しないためシーケンシャルリード、ライトに有利です

---
HDDから4KBを読み書きする時間と64KBを読み書きする時間の差はHDDの回転速度を考えると無視できると思います。
それよりも断片化されてヘッドがシークする時間の方が大きいです。
だからといって1KBのデータでも64KBも占有するのは非効率なHDDの使い方です。

質問の「アロケーションサイズ≒データの大きさ」が一番効率と速度が良いのですが、データの大きさは予め判っていないので適当に決めるしかないのが現状でしょう。
効率と速度を両立するのは難しいというのが自分の考えです。

この回答への補足

ご返事が遅くなってすみません。

>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を規定値にしてますし、何かある仮定をしてこの値を設定しているのだと思います。そんな何かが分かればと思いました。

有り難うございました。

補足日時:2011/11/27 12:53
    • good
    • 0
この回答へのお礼

有り難うございました。

お礼日時:2011/11/29 13:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!