私の理解では、穴はおそらく inode でメタデータとして維持されますが、実際のディスクは空のゼロで埋められません。
ファイルの穴が役立つ実際の使用例を誰かが説明できますか?
ホールはソフト事前割り当てと同じですか? ディスク使用量の観点からは、実際のディスク領域は使用されていませんが、その領域は他のプロセスにも使用できません。
私の理解では、穴はおそらく inode でメタデータとして維持されますが、実際のディスクは空のゼロで埋められません。
ファイルの穴が役立つ実際の使用例を誰かが説明できますか?
ホールはソフト事前割り当てと同じですか? ディスク使用量の観点からは、実際のディスク領域は使用されていませんが、その領域は他のプロセスにも使用できません。
穴のあるファイルは通常、スパースファイルと呼ばれます。
これらは、プログラムが広範囲のアドレス(オフセット)にアクセスする必要があるが、すべての潜在的なブロックに触れる可能性が低い場合に役立ちます。これは、仮想化製品が仮想ディスクを格納するために使用できます。20 GBのディスクを使用して仮想マシンを構成したが、すぐにデータでいっぱいになることはないとします。最初に数個のディスクブロックのみを使用する20GBのスパースファイルを作成してから、VMにファイルシステムを作成させ、ファイルを低速で保存させる方がはるかに高速です。
大きなスパースファイルは、そのブロックの一部が空白になっている(つまり、nullバイトで埋められている)ときにサイズを小さくすることもできます。それを実行するスパースファイル対応プログラムは、実際にブロックに書き込む代わりに、プログラムによって読み取られたときに未割り当てのブロックがゼロを返すため、まったく同じ効果でファイルからブロックを削除できます(つまり、ファイルに穴を開けます)。
スパースファイルは事前割り当ての反対であり、シンプロビジョニングと呼ばれるものであるか、ディスクオーバーコミットメントと呼ばれることもあります。これにより、実際のハードウェアがサポートするよりも多くの「仮想ディスクスペース」を作成し、必要な場合にのみファイルシステムを拡張するためにディスクを追加できます。
穴は、ディスクスペースの使用を減らすという意味で「便利」です(より多くのスペースを利用できるようにします)。他の意味では使用できません。ファイルシステム表現の一部としてのホールの存在は、ゼロの大きなブロックを含むスパースファイルがある場合に「便利」です。
穴は事前割り当てとは何の関係もありません。事前割り当てにより、ファイルに実際にデータが含まれる前に、ファイル内のデータ用にディスク上のスペースを使用できるようになります。穴はデータの表現です...特にゼロのみで構成されるブロックで構成されます。