私は Linux システムで使用する外付けおよび内蔵 HDD をたくさん持っています。Linux システムしか持っていないので、Linux ファイル システムを使用するのは当然ですよね? ただし、現在はどこでも NTFS を使用しています。これは、HDD から最も多くの使用可能なスペースが得られるためです。
ただし、今は Linux ファイルシステムに切り替えたいと思っています。主な理由は、権限と互換性です (たとえば、Linux では LUKS で暗号化された NTFS パーティションのサイズを変更できず、Windows では chkdsk を実行するように指示され続けます)。
しかし、これらの HDD をフォーマットするときに、さまざまなファイルシステムを試してみましたが、私の知る限りジャーナリングのない ext2 を含むすべての Linux ファイルシステムが、それ自体に多くのスペースを使用していました。正確な値は覚えていませんが、2TB の HDD で NTFS を使用すると 100GB 以上使用できました。これはかなり大きいです。
そこで質問です。ext ファイルシステムが使用するスペースを少なくする方法はありますか? または、Linux を完璧にサポートし、使用可能なスペースが広い別のファイルシステム (ext2、ext3、ext4、NTFS、vfat を試しましたが、どれも NTFS が提供する使用可能なスペースに近づくことはありませんでした) はありますか?
ファイルシステム (特にジャーナリングのない ext2) が NTFS よりも多くのスペースを使用する仕組みと理由についてぜひ知りたいのですが、他にどこで質問すればよいかわかりません。可能であれば、ジャーナリングやこれほど多くのスペースを使用するその他の機能を使用せずに ext4 を使用する方法をお勧めします。
答え1
デフォルトでは、ext2 およびその後継は、ファイルシステムの 5% を root ユーザー用に予約します。これにより断片化が軽減され、管理者または root 所有のデーモンが作業するスペースがなくなる可能性が低くなります。
これらの予約ブロックは、ルートとして実行されていないプログラムがディスクを占有するのを防ぎます。これらの考慮事項が容量の損失を正当化するかどうかは、ファイルシステムが何のために使用されるかによって異なります。
5% という値は、ディスクがはるかに小さかった 1980 年代に設定され、そのまま残されました。現在では、システムの安定性には 1% で十分でしょう。
予約は、-m
次のコマンドのオプションを使用して変更できますtune2fs
。
tune2fs -m 0 /dev/sda1
これにより、予約ブロックの割合が 0% (0 ブロック) に設定されます。
現在の値(など)を取得するには、次のコマンドを使用します。
tune2fs -l <device>
答え2
まだ説明されていないもう 1 つのポイントは、ファイル システムで予約する inode の数です。
デフォルトでは、mkfs は多数の inode を作成し、非常に小さなファイルを大量にファイルシステムに格納できるようにします。ファイルが非常に大きいことがわかっていて、ファイルシステムに格納するファイルの数が少数だけの場合は、inode の数を減らすことができます。
注意してください! この数値 (スペースと inode 数の比率) は、ファイル システムの作成時にのみ設定できます。FS を拡張しても、比率は同じままです。
答え3
保存するデータが圧縮可能な場合、compress=zstd
(またはcompress-force=zstd
) でマウントされた btrfs は、ext* よりも大幅に少ないディスク容量を使用する可能性があります。
- これにより、btrfs はデータをディスクに書き込む前に透過的に圧縮し、読み戻すときに透過的に解凍します。また、ext4 はファイルシステムの作成時にすべての inode を事前に割り当て、btrfs は必要に応じてそれらを作成します。これにより、スペースも節約できると思います。