web-dev-qa-db-ja.com

ext4ファイルシステムのファイルの最大サイズを制限する

Ext4の最大ファイルシステムサイズは1EB、最大ファイルサイズは16TBです。

しかし、ファイルシステムレベルで最大ファイルサイズを小さくすることは可能ですか?たとえば、指定した値(1 MBなど)より大きいファイルを作成することは許可しません。これはどのようにext4で実現できますか?

Ext4でない場合、他の最新のファイルシステムはそのような機能をサポートしていますか?

5
TimB

_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エラーをファイルに書き込むプロセスに転送します。

この制限は通常のファイルにのみ適用され、ディレクトリがその制限を超えて成長するのを阻止しないことに注意してください(たとえば、ファイルを多数作成することにより)。

5

これはシステムレベルで設定する必要があります。

Ubuntuの場合は/etc/security/limits.confを編集します

次のような行を追加します。

timb        hard    fsize           10000

ワイルドカードも使用できます。

これは、session required pam_limits.so/etc/pam.d/common-sessionに追加しない限り、rootでは機能しません。

3
holzkohlengrill