Ext4の最大ファイルシステムサイズは1EB、最大ファイルサイズは16TBです。
しかし、ファイルシステムレベルで最大ファイルサイズを小さくすることは可能ですか?たとえば、指定した値(1 MBなど)より大きいファイルを作成することは許可しません。これはどのようにext4で実現できますか?
Ext4でない場合、他の最新のファイルシステムはそのような機能をサポートしていますか?
_ext4
_には、ディレクトリのサイズを制限する_max_dir_size_kb
_マウントオプションがありますが、通常のファイルには同様のオプションはありません。
ただし、setrlimit()
または一部のシェルのulimit
またはlimit
ビルトインによって設定された制限を使用して、プロセスが制限よりも大きなファイルを作成するのを防ぐことができます。ほとんどのシステムでは、ユーザーごとにこれらの制限をシステム全体に設定することもできます。
プロセスがその制限を超えると、SIGXFSZシグナルを受信します。そして、そのシグナルを無視すると、そのファイルサイズを超える原因となった操作(write()
またはtruncate()
システムコールなど)はEFBIG
エラーで失敗します。
この制限をファイルシステムに移動するには、Fuse(ユーザースペース内のファイルシステム)ファイルシステムを使用して、ユーザースペースハンドラーをその制限を設定して開始します。 bindfs
はそのための良い候補です。
_bindfs dir dir
_(つまり、dir
をそれ自体にバインドする)を実行し、bindfs
を(zsh
構文)として開始した場合:
_(limit filesize 1M; trap '' XFSZ; bindfs dir dir)
_
次に、そのディレクトリに1Mより大きいファイルを作成しようとすると失敗します。 bindfs
は、EFBIG
エラーをファイルに書き込むプロセスに転送します。
この制限は通常のファイルにのみ適用され、ディレクトリがその制限を超えて成長するのを阻止しないことに注意してください(たとえば、ファイルを多数作成することにより)。
これはシステムレベルで設定する必要があります。
Ubuntuの場合は/etc/security/limits.conf
を編集します
次のような行を追加します。
timb hard fsize 10000
ワイルドカードも使用できます。
これは、session required pam_limits.so
を/etc/pam.d/common-session
に追加しない限り、rootでは機能しません。