初めに
HDDの作りを学んでいた際、プロパティに表示されるファイルのサイズには2種類あることが分かりました。違いを理解したので備忘のためにまとめます。
プロパティを開くとサイズが二種類ある
適当なテキストファイルのプロパティを開いてみると、サイズの他に「ディスク上のサイズ」という項目があることが分かります。これは一旦なんでしょうか。
二種類の違い
この二つの違いは以下です。
- サイズ:ファイルの実際の大きさ
- ディスク上のサイズ:実際にファイルがHDDを占有している大きさ
実は、ファイルはHDDに保存される際、1バイト単位できっちりと保存されるわけではありません。
ある程度余裕をもって保存されるというわけですね。
これにはHDDの作りが関係しています。
HDDの作り
それでは、HDDの作りを理解するのに必要な、「セクター」と「クラスター」について説明します。
セクターとは
セクターとは、HDDのディスクを物理的に区切った部屋の一つのことを指します。
だいたい一つのセクターの大きさは512バイトほどです。
参考:https://wa3.i-3-i.info/word12631.html
クラスターとは
クラスターとは、HDD上に1つのファイルを格納する際の最小単位のことです。
クラスターはセクターの集合であり、1クラスターに何個のセクターで構成されているかはHDDの大きさなどによりまちまちです。
参考:https://wa3.i-3-i.info/word12631.html
以上より、
ディスク上のサイズが4KBになっているのは、1クラスターに満たないファイルサイズを保存しているためということが分かります。
ファイルがどんなに小さくても、ひとつのファイルを保存する場合は1クラスターの容量を使うことですね。
(大きい家だからといって、他人と暮らすのは嫌ですもんね、そんなイメージです)
クラスターの大きさの確認方法
クラスターの大きさは以下の方法で確認できます。
- Poweshellを管理者権限で開く
-
fsutil fsinfo ntfsinfo c:
コマンドをうつ- 最後のc:はドライブ
自分の場合は1セクターが512バイトで、1クラスターが4096バイトでした。
PS C:\Windows\system32> fsutil fsinfo ntfsinfo c:
NTFS ボリューム シリアル番号 : 0x80f6c430f6c427ec
NTFS バージョン : 3.1
LFS バージョン : 2.0
総セクター数s : 995,452,927 (474.7 GB)
総クラスター数 : 124,431,615 (474.7 GB)
空きクラスター数s : 83,968,778 (320.3 GB)
予約済み総クラスター数 : 1,068,026 ( 4.1 GB)
記憶域予約用に予約済み : 1,036,899 ( 4.0 GB)
セクターあたりのバイト数 : 512
物理セクターあたりのバイト数 : 512
クラスターあたりのバイト数 : 4096 (4 KB)
FileRecord セグメントあたりのバイト数 : 1024
FileRecord セグメントあたりのクラスター数 : 0
MFT の有効なデータ長 : 845.50 MB
MFT 開始 LCN : 0x00000000000c0000
MFT2 開始 LCN : 0x0000000000000002
MFT ゾーン開始 : 0x00000000033335e0
MFT ゾーン終了 : 0x000000000333fe00
MFT ゾーン サイズ : 200.13 MB
デバイスの最大トリム エクステント数 : 256
デバイスの最大トリム バイト数 : 0xffffffff
ボリュームの最大トリム エクステント数 : 62
ボリュームの最大トリム バイト数 : 0x40000000
リソース マネージャー識別子: 1144DEF5-4C4C-11EE-AC61-04AB183C5884
終わりに
HDDにデータがどのように保存されているのかはあまり意識したことがなかったのですが、分かると面白いですね。
アプリを作るうえでハードの勉強もしたほうが良いなと感じている今日この頃なので、これからも勉強しようと思います。
ここまでご覧いただきありがとうございました!