記事にアフィリエイト広告を含みます

「アロケーションユニットサイズ」とは? ― USBメモリやmicroSDカードなどをフォーマットするとき、「標準」では不適切な場合がある!(natsuki)

アロケーションユニットサイズについて
こんにちは、natsukiです。今回は、USBメモリやmicroSDカードなどをフォーマットするときに知っておきたい知識の話です。フォーマットを行うとき、上のような画面が表示されますよね。この中で、こちらで設定する必要があるのが、「ファイルシステム」と「アロケーションユニットサイズ」です。「ファイルシステム」については、こちらの記事をご覧ください。で、今回は「アロケーションユニットサイズ」についてです。

スポンサーリンク

様々なサイトを見ると、「標準のままでOK」、という結論が多いです。もちろん、「標準」と銘打ってある以上、無難な選択であるとはいえます。しかし、近年のストレージの大容量化にともなって、「標準」の値では不都合が生じる場合も出てきました。というか、私は経験しているので、今回、記事にした次第です。記事中では、検証と考察をちまちまやっていますので、フォーマットするときの値をズバリ知りたいんじゃい! という方は、「7.まとめ」をお読みください。

なお、「アロケーションユニットサイズ」のことを「クラスターサイズ」とも言いますが、この記事では、Windowsのフォーマット画面に合わせて、「アロケーションユニットサイズ」で統一しました。その他の語句については、あんまり厳密に使っていませんが、「何が起こるのか」「どうすればいいのか」というところに重きを置いた記事なので、そこはご容赦ください。

1.不適切だと、何が起こるの?

最近の私が経験した事例から。例えば、こうなります。

アロケーションユニットサイズについて
大容量のUSBメモリ「SanDisk Extreme Pro 128GB」を、ファイルシステムを「exFAT」、アロケーションユニットサイズに「標準のアロケーションサイズ」を選択してフォーマットし、データを保存したところです。

保存したデータは53.4GBなのに対して、70.5GBもの領域を占有してしまっています。こりゃ、いくらなんでももったいないですね。この無駄は、自分で適切なアロケーションユニットサイズを設定することで、ほとんど解消することができます。

2.アロケーションユニットサイズとは何か

まず、根本的なところ。「アロケーションユニットサイズ」とは何か、という話です。ここを理解しておかないと、適切なアロケーションユニットサイズの選択はできませんから。

アロケーションユニットサイズとは、簡単に言うと、データを保存する最小の単位です。保存するデータをロッカーに入れる荷物、アロケーションユニットサイズをロッカーのサイズ、と考えると分かりやすいでしょう。極端に図式化すると、次のようになります。

アロケーションユニットサイズについて

クリックで拡大します

図では、37KBのデータを保存するのに、アロケーションユニットサイズが4KBの場合と、16KBの場合を示しています。

アロケーションユニットサイズが4KBの場合、37KBのデータを保存するためには10個のアロケーションユニットが必要で、実際に占有するサイズは40KBとなり、無駄は3KBしかありません。その代わり、元のデータを10個に分割しているため、データの断片化や、読み取り、書き込み速度の低下などが起こり得ます。

一方、アロケーションユニットサイズが16KBの場合は、37KBのデータを保存するために必要なアロケーションユニットは3個で、実際に占有するサイズは48KBとなり、11KBもの無駄が発生してしまっています。ただし、データの分割は3つにとどまるため、データの断片化は最小限で、読み取り、書き込みも高速で行えます。

まとめると、アロケーションサイズユニットを小さくすればするほど、保存領域の無駄は少なくて済むが、データの断片化や、読み取り、書き込み速度の低下など、機能性が低下する。アロケーションサイズユニットを大きくとれば、データの断片化が起こりにくく、読み取り、書き込みも高速に行えるといった機能面の向上が見込めるが、保存領域に無駄が発生する、ということになります。

どうやって調べればいいの?

現在のアロケーションユニットサイズを調べるのは、正規の方法だと、コマンドプロンプトが必要なもので、ちょっと面倒です。それはググっていただくとして、ここでは簡易的な方法を。

アロケーションユニットサイズについて
まず、このように、最小限のテキストファイルを用意します。このファイルサイズは、たったの8バイト。これを、アロケーションユニットサイズを調べたいストレージに放り込み、右クリックでプロパティを調べます。

アロケーションユニットサイズについて
ごらんの通り、本来のサイズは8バイトなのにもかかわらず、「ディスク上のサイズ」は512KBに。つまり、このストレージのアロケーションユニットサイズが512KBであることが分かります。同時に、しっかり512KBを占有していることも確認できました。なお、もちろん、ファイルは小さければ何でもいいので、別にテキストファイルである必要はありません。

3.システムの標準値はどのくらいで、それは妥当なのか?

では、実際、どのくらいが適切なんでしょうか? まず、Microsoftの公式サポートページを検索すると、「NTFS、FAT、および exFAT のデフォルトのクラスターサイズ」というページがあります。はじめに書いたように、ここで言う「クラスターサイズ」とは、「アロケーションユニットサイズ」のことです。機械翻訳で読みにくいうえに、すぐ下で引用している表のタイトルが「デフォルトの NTFS のクラスターサイズ」とあるのは、明らかに「デフォルトの FAT32 のクラスターサイズ」の間違いだろうという致命的誤植があったりしますが、ともかく、よく使うであろうファイルシステム「FAT32」と「exFAT」のデフォルトのクラスターサイズ(アロケーションユニットサイズ)は、以下のよう書かれています。

FAT32の場合

アロケーションユニットサイズについて

クリックで拡大します

ファイルサイズが大きければ大きいほど、アロケーションユニットサイズもある程度大きくしてやらないと、ファイルの分割が激しくなるので、ファイルシステムがFAT32の場合は、まあ、こんなもんでしょう。ただ、FAT32は1つのファイルが4GB以上だと扱えないことを考えると、32GBで線引きをする必要性があるのかな? という感じはします。容量をケチりたい人は、32GB以上の容量でも、アロケーションサイズユニットは16KBにしておいてもよいでしょうね。

exFATの場合

アロケーションユニットサイズについて

クリックで拡大します

さて、exFATの方ですが、こちらの方は、デフォルトの設定では大いに問題アリの場合があります。ごらんの通り、32GBを越えるとアロケーションユニットサイズが32KBから128KBへ一気に4倍に跳ね上がります。しかも、問題はこれにとどまりません。

サポートページのサイズと実際の挙動が違う!

上記の画像は、マイクロソフトの公式サポートページのものなのですが、しかし、実際に「標準のアロケーションサイズ」でフォーマットを行ってみると、この数字通りにはしてくれません。

アロケーションユニットサイズについて
先ほどの、テキストファイルですが、これは実際に、容量128GBのUSBメモリSanDisk「Extreme Pro」を「標準のアロケーションサイズ」を選択してフォーマットした後に、確認用に行ったものです。ということで、なんと、アロケーションユニットサイズは512KBにされてしまいました。

スポンサーリンク

アロケーションユニットサイズについて
先の画像を再掲します。ポータブルで使うソフトなども入っているので、ファイル数はかなりのもの。そりゃあ、ごらんのように、かなりの無駄ができてしまうわけです。

では、どのくらいが適切なのか? 直観的には、容量256MB~32GBの範囲なら32KBが標準とのことなので、32GB以上でも、そのままの32KBでもよさそうな感じはしますよね。一方、そのことによる機能性の低下も心配です。そこで、次に、それを検証してみたいと思います。

NTFSは、実質的に、一律4KB

なお、NTFS形式の場合ですが、先ほどのマイクロソフト公式サポートページによれば、16TBまでのアロケーションユニットサイズは、一律4KBです。個人では、16TB以上ものストレージを頻繁に扱うことはまず無いでしょうし、扱う人は相応の専門知識を持っていると思いますので、ここは、「一律4KB」でいいでしょう。

4.アロケーションユニットサイズ32KBと512KBを比較検証

それでは、検証します。フォーマットするのは、先ほどから引き合いに出している容量128GBのUSBメモリ、SanDisk「Extreme Pro(SDCZ880-128G)」。接続するPCは、Cube Mix PlusのUSB3.0ポートです。

検証内容

アロケーションユニットサイズが32KBの場合と、512KBの場合それぞれについて、以下の比較を行います。

(1)ファイル数約46,000個、容量約53.4GBのファイルを保存したときのサイズを計測。

これにより、どの程度、容量に無駄が出ているかを比べます。

(2)容量約3.82GBの、1つのファイルを書き込む時間を計測。
(3)約1,800個のファイルを含む、容量約3.36GBのフォルダを書き込む時間を計測。

これにより、アロケーションユニットサイズを縮小したことにより、どの程度機能性が低下するのかを調べます。

(2)(3)で使用するファイルの詳細は次の通りです。

アロケーションユニットサイズについて

アロケーションユニットサイズ 512KBの場合

(1) ― 占有サイズは、何度も出しているデータですが、次の通り。

アロケーションユニットサイズについて
実際のサイズが約53.4GBに対して、ディスク上のサイズが約70.5GBと、30%以上肥大化しています。これはひどい。

では、コピー速度をストップウォッチで測ってみます。

(2) ― 3.82GB×1個のファイル書き込み : 16秒。
(3) ― ファイル数約1,800個、合計3.36GBのフォルダの書き込み : 40秒

アロケーションユニットサイズ 32KBの場合

(1) ― まず、占有サイズを見てみます。

アロケーションユニットサイズについて
ファイルを移すときに、いじってしまったものがあって、わずかに容量が変わってしまっていますが、全体に比べればわずかな変化なのでご容赦ください。で、32KBだと、増加量は少なく、たかだか1~2%程度です。

では、機能性はどの程度低下するのか?

(2) ― 3.82GB×1個のファイル書き込み : 13秒。
(3) ― ファイル数約1,800個、合計3.36GBのフォルダの書き込み : 41秒

検証結果

あれ? おかしいな? アロケーションユニットサイズが小さいと、理論上はパフォーマンスが落ちるはずが……、速くなっただと!? コピー速度はバラつきもそれなりにあるので、これは誤差の範囲内だと思います。つまり、アロケーションユニットサイズが512KBと32KBくらいの差では、体感上は差は生じないとみていいでしょう。

参考までに、コピー元であるCube Mix PlusのSSDの速度は次の通り。この左側のReadの値が、Cube Mix Plus側のボトルネックとなります。

アロケーションユニットサイズについて

5.念のため、YEPO 737A6でも同様の検証

念のため、SSDを増設したYEPO 737A6でも検証データを取っていたので、そちらも報告しておきます。YEPO 737A6の増設ストレージは、おそらくSATA-II接続のため(詳細はこちらのレビューをどうぞ)、ストレージがM.2接続のSSDであるCubeMix Plusよりもシーケンシャルアクセスは低速で(ランダムアクセスは十分高速)、当然、Cube Mix Plusで差が付かない以上、YEPO 737A6で差が付くわけはないんですが、念のため。結果は、次の通りです。

アロケーションユニットサイズ 512KB

(2) ― 3.82GB×1個のファイル書き込み : 21秒。
(3) ― 約1,800個、合計3.36GBのファイルの書き込み : 1分33秒

アロケーションユニットサイズ 32KB

(2) ― 3.82GB×1個のファイル書き込み : 25秒。
(3) ― 約1,800個、合計3.36GBのファイルの書き込み : 1分34秒

検証結果

案の定、こちらもほとんど差がつきませんでした。(2)の方は、理論通りにやや遅くなっていますが、このくらいは誤差の範囲内でしょう。参考までに、YEPO 737A6の増設SSDのベンチマークは次の通り。

アロケーションユニットサイズについて

6.検証結果の考察

ご覧のとおりの結果となりました。理論上はアロケーションユニットサイズを小さくすると、パフォーマンスが悪化するはずなんですが、検証の結果、アロケーションサイズを512KBから32KBにした程度では、体感上の差は見られませんでした。

以上の検証で不足している要素としては、以下のようなことが考えられます。

第1に、コピー元のストレージがより高速であった場合。現在、高速なSSDは、シーケンシャルアクセスが数千MB/sに達するものも珍しくありません。ただし、今度はフォーマットするストレージ側の書き込み速度がボトルネックになります。今回、検証に使ったSanDisk「Extreme Pro」は、USBメモリとしては最高峰で、実際、検証時もシーケンシャルライトは安定して280MB/s程度をたたき出しています。これを大きく上回る性能のUSBメモリやSDカードは、よっぽど特殊な製品を除き、現状存在しません。従って、この点は考えなくてよいでしょう。

第2に、SanDisk「Extreme Pro」の性能が優秀なのであって、より低速なUSBメモリならば差が出る可能性があります。Extreme Proは、内部的にはSSDらしいので、Extreme Pro独自のコントローラーなりなんなりがその速度を下支えしているはずで、これがアロケーションユニットサイズを小さくしたことによるデータの分割をうまくさばいている、という可能性です。これは、十分考え得ることです。ただ、大容量データをガンガン出し入れする使い方をするならば、そもそもExtreme Proのような速度面で優秀なストレージを購入すべきでしょう。そうでないと、アロケーションユニットサイズうんぬん以前に、ストレージ側の読み取り、書き出し速度そのものがボトルネックになってしまいますから。従って、これもあんまり考慮に入れる必要はないと思います。

以上から、exFATにおいて、アロケーションユニットサイズを32KB以上に大きくする必要はない、と考えられます。

7.まとめ

アロケーションユニットサイズについて
結論です。今回の検証結果と、マイクロソフト公式の標準値を合わせて考えると、だいたい以下のような数値が、機能性と容量の無駄のバランスが取れた値なんじゃないでしょうか。

FAT32の最適アロケーションユニットサイズ

容量 : アロケーションユニットサイズ
~8GB : 4KB
8GB~16GB : 8KB
16GB~32GB : 16KB
32GB~2TB : 32KB

ただし、GBクラスの容量になると、アロケーションユニットサイズを16KBにすることによる容量のロスは大したことないので、一律16KBでも特に問題なさそうです。

exFATの最適アロケーションユニットサイズ

容量に関係なく、「32KB」。これで、ファイナルアンサー。検証の結果、これ以上大きくしても、パフォーマンスは変わらず、容量に無駄が出るだけです。

「標準のアロケーションサイズ」は信用しない

すでに述べたように、フォーマットのときに「標準のアロケーションサイズ」を選択すると、アロケーションユニットサイズを不必要に拡大される可能性があります。特に、大容量のストレージではその可能性が高いと言えそうです。ということで、以上の数値を参考に、フォーマット時には、手動でアロケーションユニットサイズを指定してあげた方がよいでしょう。

スポンサーリンク

コメント

  1. Merlin より:

    クラスタギャップのことですね。

    Win95 OSR2 で、FAT32 がサポートされる前は、自作ユーザーにとって半ば常識だったことです。
    FAT16で扱える最大容量は、2GBでしたので、クラスタギャップによる無駄は今以上に無視できませんでした。

    MS-DOS6.2では、OS付属のユーティリティとして、DriveSpaceというソフトがついていました。

    • natsuki より:

      コメントありがとうございます。
      私は、Windows98から入った人間ですが、知識としては知っていても、さほどこれによる不具合を感じたことがありませんでした。数GB~数十GBくらいは、扱う容量とアロケーションユニットサイズのバランスがいいんですね。
      それが先日、記事に書いたように、大きめのストレージだと大変なことになってしまったというわけです。512KBはいくら何でもでかすぎるよなぁ……

  2. 匿名 より:

    これは勉強になりました。
    家帰って早速見直さなきゃ…

    • natsuki より:

      コメントありがとうございます。
      ということで、32GBくらいまでの容量なら、標準のままでも特に問題ない場合が多いんですが、128GBくらいになると記事のように問題が出てくるようです。

  3. guga より:

    専門的な勉強はしていないので間違っていたらごめんなさい。

    ベンチマークはアクセスの速さを測るというか、断片化の起きやすさを比較するのが
    必要かもしれませんね。

    フォーマット直後の書き込みだと、どのクラスタサイズでもシーケンシャルな
    書き込みになって、クラスタ確保のオーバーヘッド位の差しか出ないのかも。

    書き込みと消去を繰り返して断片化させたあとの計測だと差が出るかもしれません。

    あと、Microsoftとしては多分exFAT辺りのファイルシステムはUSBメモリとかの
    携帯するストレージでの使用を考えているのかも、アクセス権制御できないし。

    USBメモリ用と考えると、普通あまりデフラグしないので断片化を少なくするために
    クラスタサイズが大きいのかもしれません。

    それにしても30%は大きいですよね。

    推測なので「かも」ばっかりになってすみません。

    • natsuki より:

      コメントありがとうございます。
      なるほど、長期使用による断片化の進行の危険ですね。そこまでは考えていませんでした。それでも、512KBはいくら何でも大きすぎるので、難しい判断ですが、容量のロスとのバランスで考えて、どの辺をとるかですね。

  4. 瀬川嘉洋 より:

    こちらの記事、非常に参考になりました。

    最近、スマホ(Xperia)のmicroSDカードのデータを128GBから256GBや512GBに移行しようとしていたのですが、どうしてもファイルが途中までしかコピーできなくて困っておりました。書き損ねた部分を書き込み直すと、他のファイルが今度は消えてしまうという困った状況でした。

    最初は中国から安物を買ったのが行けなかったのかと思っていたのですが、
    調べてみたらVerbatimは三菱ケミカルのブランドなので、信頼性は問題ないと
    思いました。また、256GB, 512GBの両方で同じ現象が出ているので
    書き込み数絡みの問題なのかなーとも思いました。

    データの書き込みがきちんとできているかを見るために、
    robocopyコマンドで 128GB microSDから 256GB micrSDに
    データコピーを行いつつ chkdsk でコピー状況を見てみたところ
    ファイル数が19863個で頭打ちになる事に気づきました。

    これって?と思いネットで検索したらこちらの記事にたどり着きまして、
    只今、アロケーションユニットサイズを32KBに変更して、コピーを
    試しております。

    良い結果が得られたら改めてご連絡いたします。
    ありがとうございました。

    なお、コピーに失敗したときは以下のようなchkdskの出力結果となっていました。
    時間を10分ほどおいて再度実施してもファイル数は変わらずでした。

    ———–以下、chkdskの出力————-

    C:\WINDOWS\system32>chkdsk k:
    ファイル システムの種類は exFAT です。
    <略>
    ファイルとフォルダーの検査を完了しました。

    Windows でファイル システムがチェックされ、問題が見つかりました。
    CHKDSK を /F オプションを使って実行し、問題を修正してください。

    262134656 KB : 全ディスク領域
    30159616 KB : 19863 個のファイル ★この値が頭打ちに
    71168 KB : 548 個のインデックス
    0 KB : 不良セクター
    384 KB : システムで使用中
    231903488 KB : 使用可能領域

    131072 バイト : アロケーション ユニット サイズ
    2047927 個 : 全アロケーション ユニット
    1811746 個 : 利用可能アロケーション ユニット

    C:\WINDOWS\system32>chkdsk k:
    ファイル システムの種類は exFAT です。
    <略>
    ファイルとフォルダーの検査を完了しました。

    Windows でファイル システムがチェックされ、問題が見つかりました。
    CHKDSK を /F オプションを使って実行し、問題を修正してください。

    262134656 KB : 全ディスク領域
    30159616 KB : 19863 個のファイル ★この値が頭打ちに
    71168 KB : 548 個のインデックス
    0 KB : 不良セクター
    384 KB : システムで使用中
    231903488 KB : 使用可能領域

    131072 バイト : アロケーション ユニット サイズ
    2047927 個 : 全アロケーション ユニット
    1811746 個 : 利用可能アロケーション ユニット

  5. natsuki より:

    どうも、アロケーションユニットサイズとは別のところに要因がありそうですね。
    頭内の容量を見ると、32GB以上に対応していないようにも見えますが、Xperieなら、それはないか…
    PC経由なら、PCのスロットが32GBまでしか対応していない可能性も? これも、よっぽど古いか安いPCでなければないとは思いますが。その場合、100円ショップでUSB―microSD変換アダプタを買ってきて、USB経由にしたらいけるかも?
    うーん、そのくらいしかアイデアが出ないです。

    • 匿名 より:

      スーパー亀レスで申し訳ありません。

      最終的に実際に使える容量を確認する
      h2testw
      というWindowsアプリを見つけて、それで利用可能容量を確認したところ、中国のサイトで買ったmicroUSBメモリが超不良品(128GBと書いてあるが実際には1GB位しか書き込めない)であることが判明し返金してもらいました。
      その後も大容量のメモリは何度買っても外ればかりです(h2testwの画面を先方に送ると即返金してもらえるのであまり損はしておりませんが)
      先日、32GBのものを購入したら正しい容量でした。転送速度がどうなのかとかは怪しいところですが、、、
      チャイナクオリティ、恐るべしです。

      • natsuki より:

        おっとぉ、「アタリ」を引きましたね!

        不謹慎な冗談はさておき、まずは、返金対応がなされたようでなによりです。
        microSDカードは、Amazonですら偽装ものが出回っているので、要注意な製品ですね。私は、「Check Flash」をつかって確認しています。

        これも、どこまで信用できるかは分かりませんが、NetacやMIXZAのようなそこそこ名の知れた中華microSDカードは、パッケージに偽造防止のためのQRコードがついています。シール貼りで、コードを読み取るとひとつひとつ違う製造番号が表示されます。私が買った限りでは、必ずついていました。

        また、Sandiskのような有名メーカーは、本物でもわざわざそんなQRコードとかはないので、狙われやすい上に偽造がしやすいとも言えます。中華通販で買うなら、あえて中華ブランドのmicroSDカードを買った方がいいかもしれませんね。ちなみに、私は中華通販ではNetacとMIXZAしか買っていません。

  6. kei より:

    アロケーションユニットサイズってクラスタサイズのことなんですね。
    いつ名称変更したんですか?
    知らぬ間に名称を変えられると、訳が分からなくなります。
    この他にも、名称変更した物があるんですか?

    • natsuki より:

      私が知る限り、どっちが正しいという類いのものではないと思います。記事中にもあるように、マイクロソフトの中ですらちゃんぽんで使われていますので。
      もちろんたいして古い言葉ではないので、徹底的に追求すれば、どっかが策定した仕様書にはどっちが正式だとか、どこかのメーカーやブランドが使い始めたのがこっちで……、のようなものがあるんでしょうが、実用面では両方使われるのが現実で、あまり追求する意味はないと思います。
      ノートブック、ラップトップ、クラムシェル、さあどれ? みたいな。

      • kei より:

        natsukiさんこんにちは、前回コメントしたkeiです。
        つい最近ですが、コマンドプロンプトの名称をWindowsPowerShellと名称変更しているのに気がつきました。
        起動してみればわかることなのですが、始めてみるとコマンドプロンプトどこのに行ったのとなってしまいます。
        些細なことですが、名称は大事です。

  7. kei より:

    natsukiさんこんにちは、前回コメントしたkeiです。
    つい最近ですが、コマンドプロンプトの名称をWindowsPowerShellと名称変更しているのに気がつきました。
    起動してみればわかることなのですが、始めてみるとコマンドプロンプトどこのに行ったのとなってしまいます。
    些細なことですが、名称は大事です。

  8. Koki より:

    とても勉強になりました。そしてとてもわかりやすかったです。自分で理解していることと人に伝える能力はまた別のものだと思ってましたので、伝える能力は格好の先生以上だと思います。思いがけずペードを見つけて、問題が気持ちよく解決できて、何か私もお役に立てればいいのですが・・・。本当にありがとうございました。

    • natsuki より:

      ありがとうございます。
      こういうレファレンス記事は、他のサイトと同じこと書いてもつまらんし、あんまり専門的になると何が目的なのか分からなくなるし、もちろん間違ったことを書いてはいけないけれど、ある程度は「丸めて」書かないと分かりにくくなるし、と、けっこう悩むので、そう言っていただけると大変励みになります。

  9. 文福茶釜 より:

    8TBのHDD5本をRAID5の28TBぐらいのディスクを作ってNTFSでフォーマットすると、アロケーションユニットサイズの最小は8KBでした。これが16TB越えってやつですね。うひ。

    • natsuki より:

      ご報告ありがとうございます。NTFSで4KBならないときって、本当にあるんだ……

  10. MR より:

    助かりました。
    ありがとうございます。
    今更ですけども。

  11. 匿名 より:

    この検証ではあまり差は発生しないように思います。
    更新されたファイルを保存する際にアロケーションサイズ以上に
    ファイルサイズの差が大きくなると追加のアロケーションユニットが
    必要になります。それによって速度差が発生するはずですから
    アロケーションサイズによる速度差を検証するのであれば
     (3) 1,800個のファイル書き込み
    の後に
     (4) 同じ名前でサイズの異なる1,800個のファイルを上書きコピー
    をすると差が出るのではないか思います。