なんらかの理由で、OS Xでテキストファイルを作成する場合、空白でない限り、常に少なくとも4 KBです。どうしてこれなの? 1バイトのプレーンテキストについて4,000バイトのメタデータがあるのでしょうか。
ファイルシステムのブロックサイズは4 kBである必要があります。ファイルシステムに含まれているファイルにデータが書き込まれるとき、オペレーティングシステムは、ファイルに書き込まれるデータを含むためにストレージのブロックを割り当てる必要があります。
通常、ファイルシステムが作成されると、そのファイルシステムに含まれるストレージは、固定サイズのブロックにセグメント化されます。 このWikipediaの記事 は、このプロセスを簡単に説明しています。
このファイルのファイルシステムの基盤となるブロックサイズは、4Kバイトのブロックサイズでなければなりません。このファイルは1つの4Kブロックを使用しており、そのブロック内の1バイトのみが実際のデータを含んでいます。
すべてのファイルシステムには、クラスターまたはブロックサイズ、またはファイルを保持するために割り当てることができる最小のディスク領域があります。実際のファイルサイズがクラスター/ブロックサイズよりも小さい場合でも、ファイルシステムでは1つのクラスター、つまり4Kを消費します。クラスタサイズは、ファイルシステムとファイルシステムオプションによって異なります。
Gillesが指摘 のようにゼロバイトが含まれている場合、ブロック/クラスターはゼロですが、典型的な* nixファイルシステムでは1つのiノードが使用されます。
これを説明するのに役立つ小さな実験:
最初に、ルートext4(LVM)パーティションの実際のブロックサイズを確認します。
[root@Fedora17 blocksize]# dumpe2fs /dev/mapper/vg_Fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size: 4096
予想どおり、4096(4 KiB)です。次に、3つのファイルを作成しましょう。最初のファイルはゼロバイト、2番目のファイルは1バイト、3番目のファイルは4 KiB(ブロックサイズ)です。
[root@Fedora17 blocksize]# touch 0_bytes.bin
[root@Fedora17 blocksize]# dd if=/dev/zero of=1_byte.bin bs=1 count=1
[root@Fedora17 blocksize]# dd if=/dev/zero of=4096_bytes.bin bs=1 count=4096
これで、ディレクトリがls
になりました。 -s
オプションを使用すると、1024バイトの「ブロック」の数で、割り当てられたサイズ(左端の列)を確認できます。
(lsは実際のブロックサイズが4096であることを認識していません---block-size
しかし、それはeverythingをその値でスケーリングし、actualファイルサイズもバイト単位)。
[root@Fedora17 blocksize]# ls -ls
total 8
0 -rw-r--r--. 1 root root 0 Jan 21 23:56 0_bytes.bin
4 -rw-r--r--. 1 root root 1 Jan 21 23:38 1_byte.bin
4 -rw-r--r--. 1 root root 4096 Jan 21 23:38 4096_bytes.bin
ここで2つのことに注意してください。
スパースファイルは、ゼロの大きなブロックを持つファイルです。データはすべてゼロであることがわかっているため、ディスクに保存しても意味がありません。このようにして、ファイルの見かけのサイズは実際にはディスク上のサイズよりも大きい場合があります。
一部のファイルシステムでは、内容が非常に小さいファイルをinode自体に格納できることに注意してください。 nix/Linuxファイルシステムのiノード内に直接データを格納することは可能ですか? を参照してください。