![Torrent/Gnutella ファイルの断片化を減らすためにファイル全体を事前割り当てすることをサポートする Linux ファイルシステムは何ですか?](https://rvso.com/image/231082/Torrent%2FGnutella%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%96%AD%E7%89%87%E5%8C%96%E3%82%92%E6%B8%9B%E3%82%89%E3%81%99%E3%81%9F%E3%82%81%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%85%A8%E4%BD%93%E3%82%92%E4%BA%8B%E5%89%8D%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%20Linux%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
私の理解では、少なくとも 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 (現時点では実験段階であり、一般的な使用には推奨されません)
- btrfs
- 拡張子
- F2FS
- NTFS3 (
prealloc
機能を有効にするにはマウント オプションを指定する必要があります) - FAT32 の
- .XFS の
ネットワーク ファイルシステム:
- GFS2
- NFS
- OCFS2
- CIFS/SAMBA
重要な考慮事項:
- アプリケーションはこの機能を利用する必要がある
- ファイルシステムがすでに [高度に] 断片化されており、十分なサイズの穴がない場合、事前割り当てでは最適な結果が得られない可能性があります。
- ファイルを適切に整列させるのに十分な空き領域がある場合:
- Linuxでは、XFSのみを完全にデフラグできます(つまり、空き領域もデフラグできます)。
- Windows では、当然のことながら、NTFS/VFAT を完全にデフラグできます。