我知道EXT4有一个max_dir_size_kb挂载选项来设置每个目录的最大大小。但是,它没有一个类似的选项来指定单个文件的最大大小。有人知道另一个文件系统可以这样做吗?我检查了XFS、ZFS和ReiserFS,但是没有发现任何东西,尽管我不是这些文件系统的专家。
为了更具体地说明我试图实现的目标:我想限制可以存储在Samba共享上的单个文件的大小(单个文件,而不是全局配额,例如,防止用户存储超过给定大小的文件)。Samba没有这方面的选项,Linux /etc/security/fins.conf也不适用于Samba (请参阅https://askubuntu.com/questions/1315369/is-obey-pam-restrictions-still-supposed-to-work-in-samba-4-ubuntu-20-04,并回答: Samba开发人员解释说,在/etc/security/fins.conf中设置的文件大小限制没有强制执行)。
所以我的想法是在文件系统级别上定义这个限制,但是似乎没有支持这个特性的文件系统。
发布于 2021-02-11 20:43:42
使用Lustre 2.12及更高版本,可以指定每个文件、每个目录或每个文件系统的最大文件大小限制,方法是指定一个PFL布局,该布局具有固定大小的组件端,没有“到最大文件大小”组件,例如:
$ lfs setstripe -E 1G -c 1 /path/to/<file|directory>在directory下创建的文件将被限制为1GiB大小(例如在日志目录中),如果directory是根目录,它将应用于文件系统中的所有新文件,除非另有规定。也就是说,除非您的Samba服务器需要大量的容量/性能扩展,否则您可能不想为您的使用设置光泽。
对ext4添加这样的限制也不难。它已经必须处理不同的maxbytes值,这取决于文件是块映射(旧样式,4TB限制)还是范围映射(新样式,16 to限制)。通过一个s_maxbytes参数设置/sys/fs/ext4/<dev>/maxbytes和s_bitmap_maxbytes值是非常直接的,并且很可能在上游被接受(同时您可以修补服务器内核)。
唯一棘手的部分是sysfs值应该用作下限,而不是现有的限制。不应设置比现有限制更高的最大字节。如果将s_maxbytes参数设置得更高,那么sysfs处理程序中需要一些代码来将maxbytes和/或s_bitmap_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;
}即使有了相对基本的编码技能,这也可以由内核新手来完成,主要是搜索、剪切和替换。
https://unix.stackexchange.com/questions/633940
复制相似问题