何らかの理由で、OS Xでテキストファイルを作成する場合、空白でない限り、常に少なくとも4kBです。どうしてこれなの?1バイトのプレーンテキストに関する4,000バイトのメタデータがありますか?
:P
何らかの理由で、OS Xでテキストファイルを作成する場合、空白でない限り、常に少なくとも4kBです。どうしてこれなの?1バイトのプレーンテキストに関する4,000バイトのメタデータがありますか?
:P
回答:
ファイルシステムのブロックサイズは4 kBでなければなりません。ファイルシステムに含まれるファイルにデータを書き込む場合、オペレーティングシステムは、ファイルに書き込まれるデータを格納するためにストレージのブロックを割り当てる必要があります。
通常、ファイルシステムが作成されると、そのファイルシステムに含まれるストレージは固定サイズのブロックにセグメント化されます。 このウィキペディアの記事では、このプロセスについて簡単に説明しています。
このファイルのファイルシステムの基本ブロックサイズは、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つのファイルを作成します。最初のファイルは0バイト、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
が、その値ですべてをスケーリングします。実際のファイルサイズもバイト単位で表示します)。
[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つの点に注意できます。
スパースファイルは、ゼロの大きなブロックを持つファイルです。データはすべてゼロであることがわかっているため、データをディスクに保存しても意味がありません。このようにして、ファイルの見かけのサイズは実際にはディスク上のサイズより大きくなる可能性があります。
一部のファイルシステムでは、非常に小さなファイルの内容をiノード自体に保存できることに注意してください。参照してくださいそれは、Unix / Linuxファイルシステム上のinode内のデータを直接保存することは可能ですか?。