
すべての Linux ファイル システムのブロック サイズは 4kb です。ハード ディスク ストレージが 10 MB だとします。つまり、2560 個のブロックが使用可能で、それぞれ 1kb のサイズのファイルを 2560 個コピーしたとします。1 kb ブロックはそれぞれ 1 ブロックを占めますが、ブロック全体を占めるわけではありません。
ディスク全体がいっぱいになりましたが、まだ 2560x3kb の空き領域があります。たとえば 1mb の別のファイルを保存したい場合、ファイル システムは保存を許可しますか? 個々のブロックに残っている空き領域に書き込むことができますか? この問題を解決する概念はありますか?
もう少し説明していただけるとありがたいです。よろしくお願いします
答え1
デフォルトのブロック サイズは、最初の Linux 以来 512 バイトでした。ただし、最近まで、ディスクの増大に対応するために 4k ブロック サイズが導入されていました。これは実際にはディスク ハードウェアによってほぼ決定されています (詳細については、以下を参照してください)。https://unix.stackexchange.com/questions/178899/optimizing-logical-sector-size-for-physical-sector-size-4096-hdd)。
しかし、あなたの具体的な質問については、多くの種類のファイルシステムでは、すべてのファイルが最後のブロックの未使用バイトを無駄にしているというのは正しいです。これは特に小さなファイルでは無駄です。しかし、btfrsとreiserfsは、https://en.m.wikipedia.org/wiki/ブロックサブアロケーション
答え2
ファイルシステムのブロック サイズは、512 から (通常) 65536 バイトです。ブロック サイズは、mkfs.xxx オプションで指定できます。ほとんどの Linux ファイルシステムのデフォルトのブロック サイズは 4096 バイトです。
一部のファイルシステムは、テールパッキングやサブブロック割り当てをサポートしています。BTRFS、RaiserFS、ZFS、Raiser4 ではサポートされますが、XFS、Ext2/3/4 ではサポートされません。
パーティションを複数の小さなファイルで埋める予定の場合は、ブロック サイズを 512 または 1024 に縮小するか、テール パッキングまたはサブブロック割り当て機能をサポートする FS を使用することで、無駄な「テール」領域を削減できます。