スパースファイル

スパースファイル

何らかの理由でOS Xでテキストファイルを作成する場合は、空でない限り常に少なくとも4kBです。なぜこれですか? 1バイトのプレーンテキストに4,000バイトのメタデータを含めることはできますか?

ここに画像の説明を入力してください。

答え1

ファイルシステムのブロックサイズは4kBでなければなりません。ファイルシステムに含まれるファイルにデータが書き込まれるとき、オペレーティングシステムはファイルに書き込まれるデータを含むストレージブロックを割り当てる必要があります。

通常、ファイルシステムが作成されると、そのファイルシステムに含まれるストレージは固定サイズのブロックに分割されます。 このウィキペディア記事このプロセスを簡単に説明してください。

ファイル内のファイルシステムのデフォルトのブロックサイズは4Kバイトのブロックサイズでなければなりません。ファイルは1つの4Kブロックを使用し、ブロックの1バイトにのみ実際のデータが含まれます。

答え2

すべてのファイルシステムには、クラスタまたはブロックサイズがあり、ファイルを保持するために割り当てることができる最小ディスク容量があります。実際のファイルサイズがクラスター/ブロックサイズより小さい場合でも、ファイルシステムはまだ1つのクラスターまたは4Kを消費します。クラスタサイズは、ファイルシステムとファイルシステムのオプションによって異なります。

次のように0バイトが含まれている場合ザイルズは指摘した。これは通常の* nixファイルシステムではブロック/クラスタを使用しませんが、1つのinodeを使用するため、「空でない場合」という警告にうまく応答します。

答え3

小さな実験でこれを説明できます。

まず、ルート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(4KiB)です。それでは、3つのファイルを作成してみましょう。最初のファイルは0バイト、2番目のファイルは1バイト、3番目のファイルは4KiB(ブロックサイズ)です。

[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つの点は次のとおりです。

  • ゼロバイトファイルはファイルシステム内のゼロブロックを占めます。これは何を確認しますか?ザイルズは言った。
  • 他の2つのファイルはファイルサイズが異なりますが、どちらも4 * 1024 = 1 4KiB ext4ブロックを占めます。

スパースファイル

スパースファイルは、ゼロの大きな塊で構成されるファイルです。データはすべてゼロとして知られているため、ディスクに保存する必要はありません。これにより、ファイルの見かけのサイズが実際に大きいディスクのサイズより。

インラインデータ

一部のファイルシステムでは、非常に小さなコンテンツのファイルを保存できます。インデックスノードそれ自体。バラよりUnix / Linuxファイルシステムのinode内に直接データを保存できますか?

関連情報