私が理解したのは、少なくともLinux ext3ファイルシステムでは、大容量ファイルが作成されたときにデータが実際にファイルのその部分に書き込まれるまで、ブロックは実際にディスクに割り当てられません。 Linuxは、プログラムがメモリを割り当てるときに同様のことを行います。割り当てが遅れてデータが書き込まれるまで、ページは実際には割り当てられませんが、これは別のトピックです。
BittorrentやGnutellaなどのファイル共有プログラムは、ファイルに書き込むと、ファイルの任意の領域に小さな塊を書き込みます。 Linuxファイルシステムは、ファイルのこれらの部分をディスクに配置し、多くの断片化を生成します。このように複数のファイルに同時に書き込む場合、問題は特に深刻です。ファイル共有プログラムで事前に割り当てられたファイルを選択しても役に立たないようです。これらのファイルは通常10MB /秒の速度でのみ読み取ることができ、多くの断片化を生成します。 filefragユーティリティを使用して、ファイル内のフラグメントの数を確認できます。 /var/log/messsagesのようなファイルはテストするのに最適な場所です。
ext3では、他のほとんどのLinuxファイルシステムでもこれが本当であると仮定します。断片化を最小限に抑えながら最初から最後まで完全に割り当てられたファイルを持つには、実際には一部のデータをファイル全体に書き込む必要があります。
LinuxでNTFSボリュームをマウントしてみることもできますが、より良い方法が必要です!考慮すべきext4、btrfs、xfs、jfs、ReiserFS、ExFAT、FAT32もあります!事前に割り当てられたファイルはありますか?それとも、最初にファイル全体にデータを書き込むことなくこれを行うことができるAPIはありますか?
答え1
2024年まで、次のLinuxファイルシステムはファイルの事前割り当てをサポートしていますposix_fallocate()
。
ローカルファイルシステム:
- bcachefs(現在は非常に実験的な段階にあり、一般的な使用には推奨されません)
- BTFS
- 外部4/外部3
- F2FS
- NTFS3(
prealloc
この機能を有効にするにはインストールオプションを指定する必要があります) - FAT/FAT32
- XFS
ネットワークファイルシステム:
- GFS2
- ネットワークファイルシステム
- OCFS2
- CIFS/サンバ
重要な考慮事項:
- アプリケーションはこの機能を使用する必要があります。
- ファイルシステムがすでに[非常に]断片化されており、十分なサイズの穴がない場合、事前割り当てでは最適な結果が得られない可能性があります。
- ファイルを適切にソートするのに十分な空き容量があるとします。
- Linuxでは、XFSのみを完全にデフラグできます。つまり、空き領域もデフラグできます。
- Windowsでは、NTFS / VFATの最適化を完全に実行できます。