UbuntuとWindowsでファイルを書き込む際にドライブ上にどのように配置されるか比較してみた

※2016年12月27日、追記と若干の書き直し。
※追記。日本語に翻訳された記事は消えていたが、元の英語のページは残っていた → Why doesn't Linux need defragmenting?


以前、Windowsではファイルは連続して保存され、Linuxではディスクドライブ全体に分散されるように保存される、というような内容の記事を見た覚えがあったので、探してみたのだけれども既に消えていて、

一部を引用したページのみが見つかった。

↑の記事より引用。

Windows(FAT、NTFS?)は全てのファイルが隣り合うように配置するので、断片化しやすい
Linuxは散らばらせて配置するので、空き容量に余裕があるなら断片化は気にしなくてよい

Windowsに関してはデフラグツールを使えばファイルがパーティションのどの辺りに保存されているか一目瞭然だけど、Linuxだと分かりやすいGUIツールが無いので、本当に散らばらせて配置されているのか確認のしようがないなと思っていたのだが、よく考えたら最近のLinuxWindowsのNTFSに書き込めるし、Linuxで書き込んでWindowsで確認すればいいんじゃないかという事に気がついたので、実際にNTFSでフォーマットされたパーティションUbuntuから書き込んで、ファイルがどんな風に配置されるか確かめてみた。

Ubuntuでファイルをコピーして確認

  1. まずWindows 10でVドライブをNTFSで(クイックフォーマットでは無い方で)フォーマット。
  2. 次にUbuntu 16.10でホームフォルダーをVドライブへコピー(約3.5GiB、ファイル総数約96,000。コピーにはsnowcpを使用)。
  3. Windows 10でDefragglerを使ってVドライブを解析。

すると以下のように表示された。

f:id:sicklylife:20161225200539p:plain

パーティションの先頭部分以外に分散して書き込まれているが、思った以上に断片化している。しかし断片化が起こっていると言っても、その殆どが断片数が2なので、激しい断片化は起こっていない様子。最も断片化したファイルのサイズは約200MBで、断片数は7だった。

Windowsでファイルをコピーして確認

  1. VドライブにコピーしたホームフォルダーをWindows 10で別のHDDに移動。
  2. Windows 10で再びVドライブをNTFSで(クイックフォーマットでは無い方で)フォーマットし直し。
  3. 移動させたホームフォルダーを再びVドライブにコピー(コピーにはFastCopyを使用)。
  4. Defragglerを使ってVドライブを解析。

すると以下のように表示された。

f:id:sicklylife:20161225201403p:plain

パーティションの先頭部分にまとめて書き込まれている。ファイルの断片化は起こっていないが、$UsnJrnlの断片数が100を超えていた。

両者を比較してみて

ファイルを書き込む際に「Windowsは全てのファイルが隣り合うように配置」し、「Linuxは散らばらせて配置する」ことが確認できた。

NTFSはLinuxのfallocateに未対応なのでLinuxから書き込むとファイルの断片化が起きたが、ext4やXFSといったLinuxネイティブのファイルシステムなら断片化はもっと起こりにくいはず。

ただ分散して配置するということは逆に空き領域の断片化が起こっているということなので、パーティションの使用率が上がれば上がるほどファイルサイズの大きなファイルを書き込む際に断片化しやすくなる。

ファイル倉庫的な使い方(一度書き込んだファイルは編集しないし消さない)をするならWindowsのファイルの配置方法の方が良いような気がする。