古くて遅いHDDが出てきたので、これの中に0バイトファイルを可能な限りたくさん作りたいなーと思った。
ファイルをコピーしまくる
まずHDDをフォーマットしてまっさらにする。
NTFSでフォーマット、アロケーションユニットサイズは最小の512B。
そしたら0バイトファイルを1個つくる。
それをコピーして2個にする。
できた2個を選んでまたコピーして、4個にする。
その4個をコピーして8個にする。また16個にする。32個にする。
……。
16384個にする。
フォルダに入れてもっとコピーしまくる
今度は16384個の0バイトファイルたちを1つのフォルダに入れて、入ったフォルダごと増やしていく。
とりあえず16個に増殖させる。
この16個を1つのフォルダに入れて、さらに4個に増やす。
この4個を1つのフォルダに入れて、さらに4個に増やす。
A, B, C, D └─ a, b, c, d └─ 00, 01, 02, ..., 15 └─ 00000-16383
この時点で↑のような感じ。
Aフォルダ1つの中に104万個のファイルがあって、AからBをコピーで作るだけで20分くらいかかる。
もっとコピーしまくる
コピーは続くよどこまでも。
さっきの4つをまた1つのフォルダにまとめて、さらに4倍にする。
それをもう1度1つにまとめて、さらに4倍にする。
このあたりで「コピーとかじゃなく、スクリプト使って無限ループでファイル生成するのが早かったのでは?」と気づいたが、考えないことにして先に進む。
エクスプローラは役立たず
大量ファイルをコピーするときのTipsを教えましょう。
エクスプローラを使うと、コピー準備の「計算中」みたいな表示のまま止まって、開始まで延々待たされます。これは、よくない。
そういう時はDOS窓を開いて xcopy /e W\ X\ みたいにやるとよいです。これなら瞬時にコピー開始してくれるからね。
しかも複数窓開けば並列コピーできるんだな。2窓なら合計1.4倍速くらいかな? 多少速い。
| XからYを作るxcopy中 |
ここまできた↓
W, X, Y, Z └─ w, x, y, z └─ A, B, C, D └─ a, b, c, d └─ 00, 01, 02, ..., 15 └─ 00000-16383
Wフォルダには2^24個の0バイトファイルが入っている。大体1700万個くらい。
1つ1つの中身は0バイトなんだけど、この個数になると管理用の容量消費がバカにならない。
実際WをコピーしてXを作ったところ、HDD全体の空き容量が20GiBくらい減っていた。こんなに役に立たない20GiBもなかなかないなあ。うれしい。ちなみにフォルダのプロパティでは相変わらず0バイトと出る。
俺がちりつもだ!
W, X, Y, Z の4つをまたひとまとめにして、4倍に増やす。
それをさらに1つにして、また4倍に増やす。
「塵も積もれば山となる」と、言葉ではよく聞くけれど、実際に塵を1つ1つ積もらせて山を作る経験をみんなはしてるかな? 私はしていますよ。
ついに新規ファイル作成が不可能に
最終完成形。
Ω └─ Υ, φ, χ, Ψ └─ α, β, γ, δ └─ W, X, Y, Z └─ w, x, y, z └─ A, B, C, D └─ a, b, c, d └─ 00, 01, 02, ..., 15 └─ 00000-16383
Υフォルダ1つだけで2^28個のファイルがあって、空き領域を308GiB消費する。
Ω全体では最大2^30個(10億7000万)のファイルを持てるのだが、その手前の8億ちょいでHDDが容量不足になった。
| 0バイトファイルだけでもHDDは埋められる |
正確なファイル数を数えてみる
- Υ、Φ、χはそれぞれ満タンあって、3 * 2^28個。
- Ψは、Ψ\α\W\w\ までが満タンで、2^22個。
- 次の x\ が途中終了していて、1923408個。
というわけで、NTFS 1TiBのHDDを埋めるまでに作れたファイル総数は
811,424,080個
でした!
| カウントだけで何十時間かかったかわからない 「0バイト、8億ファイル、16万フォルダ」 |
もちろんドライブの容量はちゃんと使い切っております。
| 全部埋まった記念写真。ピースピース。 |
ここまで達成できて感無量。コピーだけで2週間くらいかかった気がするな。
スクショだと残容量200KiBくらいあるように見えるんだけど、実際にはこれ以上1ファイルたりとも作成できない。
「0バイトの空き領域が不足している」という様子のおかしなメッセージが見れてうれしい。0除算みがあるよね。
ちなみに、計算するとファイル1個あたり1.2KiBくらい消費してたことになるんだけど、NTFSではファイル1個あたりが使うMFT容量は1.0KiBらしい。
一緒に作られてたフォルダの分とか、MFTファイル自体の断片化とかで、2割余分に消費したってことなのかな。
全ファイル削除しても容量が回復しない
フォーマットすれば元通りになるのだが、それはせず愚直に全部削除する。
するとファイルが0個なのに容量は減ったままという不思議状態ができあがる。
スクショのとおりで、ドライブ直下にファイルは1つもない。なのに8割以上の容量が消費されてる。
fsutilしてみると、消費されている774GiBは全部MFTの分だとわかる。なるほどな。
C:\>fsutil fsinfo ntfsinfo D: NTFS ボリューム シリアル番号 : 0x01dcab99bfc72e40 NTFS バージョン : 3.1 LFS バージョン : 1.1 総セクター数s : 1,953,521,663 (931.5 GB) 総クラスター数 : 1,953,521,663 (931.5 GB) 空きクラスター数s : 329,674,732 (157.2 GB) 予約済み総クラスター数 : 8,192 ( 4.0 MB) 記憶域予約用に予約済み : 0 ( 0.0 KB) セクターあたりのバイト数 : 512 物理セクターあたりのバイト数 : 4096 クラスターあたりのバイト数 : 512 (0 KB) FileRecord セグメントあたりのバイト数 : 1024 FileRecord セグメントあたりのクラスター数 : 2 MFT の有効なデータ長 : 773.89 GB MFT 開始 LCN : 0x0000000000075eef MFT2 開始 LCN : 0x000000000000001f MFT ゾーン開始 : 0x00000000747031c0 MFT ゾーン終了 : 0x0000000074703920 MFT ゾーン サイズ : 944.00 KB デバイスの最大トリム エクステント数 : 0 デバイスの最大トリム バイト数 : 0 ボリュームの最大トリム エクステント数 : 62 ボリュームの最大トリム バイト数 : 0x40000000 リソース マネージャー識別子: CADCF762-1784-11F1-B7E5-D4548B25DAB3
廃棄予定の古ノートPCから内蔵2.5インチSATA HDDを取り出してできる最高の遊び。
大変たのしいインクリメンタルゲームでした。まんぞく。
コメント