USBメモリーにファイルをコピーする際に遅いと感じたら、ひと手間加えるだけで時間を短縮できる場合がある。
そもそも書き込み速度が遅いUSBメモリーだからどうしようもない。そういう場合が大半だと思う。そしてこれから紹介する方法は普通の人にはあまり効果的ではないと思う。
普通の人は小さいサイズのファイルを大量に書き込んだりしないから。
USBメモリーは、小さいサイズのファイルの書き込みがとても苦手な場合が多い。
小さいサイズのファイルの大量な書き込みに時間がかかっている場合は、ひと手間加えるだけで作業時間をぐっと短縮できる。そういう限定的な状況で有効な方法である。
※SanDiskのUSBメモリーの一部の製品で試したことだが、低下した書き込み速度を回復できる裏技的な方法がある。これについては別の機会に記事にしようかと考えている。
そのひと手間とは、「小さいサイズの大量のファイル」を「一つのファイル」にまとめるというこである。
どうやってまとめるか?
Windowsのエクスプローラーで、書き込みたい小さいファイルを選択し、そこにマウスポインタを合わせ、右クリック → 送る → 圧縮 (zip 形式) フォルダーをクリックする。
これでzip形式の1つのファイルにまとめることができる。
あとはこれをUSBメモリーに書き込めば良い。
読み出すときは、このzip形式のファイルを目的のフォルダーにコピーし、そこで展開すればよい。
ただ、大きいサイズのファイルが混ざっていたりすると、それらはzip形式のファイルにまとめない方がいいかもしれない。PCの性能によっては逆効果になる可能性もある。実際にやってみて使えるかどうか判断するしかない。
SONYのUSBメモリーで試してみた
USB3.1のUSBメモリー SONY USM32GU を使って試してみた。
フォーマット形式はexFAT、アロケーションユニットサイズは16KB。

この SONY USM32GUはとても残念な製品で、コストパフォーマンスは最底辺クラスだと思う。とても高価なのに低性能。耐久性については分からないが、小さいサイズのファイルを大量に書き込む用途にはお勧めできない代物。でも普通の人は気にならないかもしれないし、天下のSONY様の製品に対して遅いなどと感じる方がおかしいと信者達から怒られそうだ。
どれぐらい遅いのか。4KiB(4,096Byte)のファイルを5,000本コピーしてみた。
計測環境:Windows10、Intel(R) Core(TM) i3-3220 CPU、SSD(SATA3)、12GBRAM
普通にコピーする場合



書き込みにかかった時間は220秒。1秒当たり22.7本。PCの性能によってかなり変動するはず。
読み出し時間はどうかというと、100秒だった。
書き込みと読み出しとの合計時間は320秒。
ひと手間加える場合
zip形式にまとめる処理にかかる時間は10秒、このひと手間の操作にかかる時間を10秒とみて、書き込む時間は一瞬なので、合計で20秒。
読み出し時間は一瞬で、zip形式のファイルを展開する時間が110秒、このひと手間の操作にかかる時間を10秒とみて、合計で120秒
書き込みと読み出しとの合計時間は140秒。
トータルの作業時間は半分以下
作業時間の短縮はできた。当然の結果だが、条件が揃わないと逆効果になってしまう。個人的には今は高速なUSBメモリーを使っているが、このひと手間で何度も凌いだことがある。現在でもスタンダードなUSBメモリーの多くは小さいサイズのファイルの書き込みが低速なので、役に立つ状況にいる人もいるはず。いるはず。ほとんどいないかも。ゼロじゃないだろ。
他に試すこと
小さいサイズのファイルの書き込みが遅いなら、フォーマット形式を変えてみることで、かなり改善することがある。
Windowsなら、FAT32、exFAT、NTFSのいずれかでフォーマットすることが多いはず。
あくまで経験上の話だが、小さいサイズのファイルの書き込み速度は、
FAT32 < exFAT < NTFS の順番になる。NTFSが最も速い。削除もNTFSが速い。
アロケーションユニットサイズによっても異なってくるし、USBメモリーによってはNTFSはダメという場合もある。「ダメ」というのはメーカーが正式にサポートしていない場合や、実際にNTFSで試してみて使い物にならなかったりと様々である。もしかすると壊れるものもあるかもしれない。FAT32だろうがexFATだろうがNTFSだろうが、ほとんど変化しないUSBメモリーもある。
ちなみに、SONY USM32GUをNTFS(4KB)でフォーマットして4KiBのファイル5,000本のコピーを行ってみたときの時間は154秒だった。exFAT(16KB)の場合だと220秒なので、少しは速くなる。
NTFSでフォーマットした場合は、Windowsを終了する際、先に「ハードウェアの安全な取り外し」を行いUSBメモリーを取り外しておいた方が良い場合もあるので注意が必要。理由は少々複雑なのでググって欲しい。
アロケーションユニットサイズは個人的には以下のように設定している。
小さいファイルを扱う場合
※小さいファイル:ここではファイルサイズがUSBメモリーの「標準のアロケーションユニットサイズ」より小さいファイル
- FAT32:16KB、32KB
- exFAT:16KB、32KB
- NTFS:4KB
※「標準のアロケーションユニットサイズ」は16KBより小さいこともあるが、個人的には16KBでフォーマットしている。なお、NTFSの場合は常に4KB。
小さいファイルを扱わない場合
USBメモリーの「標準のアロケーションユニットサイズ」でフォーマットしている。
容量が大きくなればなるほど既定のアロケーションユニットサイズは大きくなる傾向がある。
アロケーションユニットサイズの確認方法(たぶんWindows7以降)
※コマンドプロンプトにて diskpart list volume select volume [number] filesystems ※[number]はlist volumeで表示された目的のボリューム番号 ※(規定)と記されているのが「標準のアロケーションユニットサイズ」

zip形式にまとめると良いこともある
zip形式にまとめることで、必然的に展開する必要が生じる。展開の際、各ファイルが正常であるか(正常に展開できるか)チェックが行われ、異常が見つかるとエラー表示される。このエラー表示されるところが良いことである。
エラーが起きることが良いことではない。エラーを検出できることが良いことなのである。
例えば画像ファイルをUSBメモリーに保存したとしよう。USBメモリーの不良個所に保存されてしまってもエラーとならない場合がある。その画像ファイルを読み込んだ際に初めてエラーに気付くのである。画像が正常に表示されなかったり、開けなかったり。一つ一つの画像ファイルを開いて確認することは現実的ではないが、確認しなければ画像ファイルが破損していることに気付くこともない。でも、zip形式にまとめていれば、展開する際にファイルに異常がないかエラーチェックが行われる。100%ではないが(ほぼ100%)、壊れていることに気付けるのである。
※USBメモリーに書き込んだzip形式のファイルをすぐに展開してエラーがないか確認したい場合は、zip形式のファイルを書き込んだ後、一旦USBメモリーを通常の手順で抜き差ししてから行った方がよい。そうしないとPCのメモリー(RAM)にキャッシュされたzip形式のファイルを元に展開されてしまった場合はエラーは起こり得ないのでエラーがないかの確認にはならない。
ChatGPTに画像ファイルと動画ファイルが正常であるか確認するプログラムを作ってもらった。画像ファイルと動画ファイルの正常性をチェックするプログラム
おすすめしなこと
読み書きが遅い原因の一つにセキュリティソフトの影響がある。ファイルのコピーを行う際には、コピー元とコピー先をスキャンの対象から外すことで速度が改善する可能性がある。当然、一時的にセキュリティソフトを停止しても速度は改善する可能性がある。PCのスペックが低ければ低いほどその影響は大きいかもしれない。
当然、セキュリティ面でリスクが伴う方法なので、おすすめはしない。