カスタムファイルサイズ制限をサポートするファイルシステムはありますか?

カスタムファイルサイズ制限をサポートするファイルシステムはありますか?

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_maxbytesmaxbytess_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;
}

これは、比較的基本的なコーディング技術(主に検索の切り取りと置換)を備えたカーネル初心者でも行うことができます。

関連情報