EXT4には、各ディレクトリの最大サイズを設定するmax_dir_size_kbマウントオプションがあることがわかります。ただし、個々のファイルの最大サイズを指定する同様のオプションはありません。これを行うことができる他のファイルシステムを知っている人はいますか? XFS、ZFS、ReiserFSをチェックしましたが、これらのファイルシステムの専門家ではありませんが、何も見つかりませんでした。
私が達成しようとしている目標についてより具体的に説明するために、Samba共有に保存できる個々のファイルのサイズを制限したいと思います。防止)。 Sambaにはこのオプションはなく、Linux /etc/security/limits.confはSambaでは機能しません(参照:https://askubuntu.com/questions/1315369/is-obey-pam-restrictions-still-supposed-to-work-in-samba-4-ubuntu-20-04、答えは次のとおりです。 Samba 開発者は、/etc/security/limits.conf で設定されたファイルサイズ制限が適用されないことを説明します。
だから私の考えは、ファイルシステムレベルでその制限を定義することでしたが、この機能をサポートするファイルシステムはないようです。
答え1
Lustre 2.12以降では、「最大ファイルサイズ」コンポーネントを持たず、固定サイズコンポーネント側のPFLレイアウトを指定して、ファイルあたり、ディレクトリあたり、またはファイルシステムあたりの最大ファイルサイズ制限を指定できます。
$ lfs setstripe -E 1G -c 1 /path/to/<file|directory>
directory
その下に作成されるファイル(ログディレクトリなど)には1GiBのサイズ制限があり、directory
これがルートディレクトリの場合はすべてのファイルに適用されます。新しい特に明記しない限り、ファイルシステムのファイルです。つまり、おそらくSambaサーバーが要求しない限り、Lustreを有効にしたくありません。たくさん容量/性能拡張。
ext4にこれらの制限を追加することはそれほど難しくありません。maxbytes
ファイルがブロックマッピング(古いスタイル、4 TB制限)か範囲マッピング(新しいスタイル、16 TB制限)であるかに応じて、すでに異なる値を処理する必要があります。パラメータ設定s_maxbytes
と値を渡すのは非常に簡単で、アップストリームで承認される可能性が高いです(これまでサーバーカーネルにパッチを適用できます)。s_bitmap_maxbytes
/sys/fs/ext4/<dev>/maxbytes
唯一のトリッキーな部分は、sysfs値を次のように使用する必要があることです。減らす制限事項と既存の制限事項。 maxbytesは既存の制限より高く設定しないでください。パラメータが高く設定されていると、sysfsハンドラにいくつかのコードが必要になり、以前の制限をリセットおよび/または元に戻すs_maxbytes
ことができます。スーパーブロックに別々のパラメータとして保存するとコーディングは簡単ですが、使用するたびに確認する必要があるため、速度が遅くなり、s_bitmap_maxbytes
maxbytes
s_sysfs_maxbytes
非常にこの値は実行時に変更される可能性はありません。また、s_*_maxbytes
コードのすべてのアクセスを次のヘルパーに置き換える必要があります。
loff_t ext4_inode_get_maxbytes(struct inode *inode)
{
loff_t maxbytes;
if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
maxbytes = inode->i_sb->s_maxbytes;
else
maxbytes = EXT4_SB(inode->i_sb)->s_bitmap_maxbytes;
if (maxbytes > EXT4_SB(inode->i_sb)->s_sysfs_maxbytes)
maxbytes = EXT4_SB(inode->i_sb)->s_sysfs_maxbytes;
return maxbytes;
}
これは、比較的基本的なコーディング技術(主に検索の切り取りと置換)を備えたカーネル初心者でも行うことができます。