限制 ext4 文件系统中文件的最大大小

限制 ext4 文件系统中文件的最大大小

Ext4 的最大文件系统大小为 1EB,最大文件大小为 16TB。

但是,是否可以在文件系统级别减小最大文件大小?例如,我不想允许创建大于指定值(例如 1MB)的文件。如何在 ext4 上实现这一点?

如果不是 ext4 那么任何其他现代文件系统都支持此类功能吗?

答案1

ext4有一个max_dir_size_kb安装选项来限制大小目录,但对于常规文件没有类似的选项。

然而,可以使用某些 shell设置的限制setrlimit()或内置的限制来ulimit阻止进程创建大于限制的文件。limit大多数系统还允许您在系统范围内为每个用户设置这些限制。

当进程超过该限制时,它会收到 SIGXFSZ 信号。当它忽略该信号时,导致超出该文件大小的操作(如write()truncate()系统调用)将失败并出现错误EFBIG

要将该限制移至文件系统,您可以使用的一个技巧是使用保险丝(用户空间中的文件系统)文件系统,其中用户空间处理程序以该限制集启动。bindfs是一个很好的候选人。

如果您运行bindfs dir dir(即绑定dir自身),则使用bindfsstarted as (zsh语法):

(limit filesize 1M; trap '' XFSZ; bindfs dir dir)

那么在该目录中创建大于 1M 的文件的任何尝试都将失败。将错误bindfs转发EFBIG给写入文件的进程。

请注意,该限制仅适用于常规文件,这不会阻止目录增长超过该限制(例如在其中创建大量文件)。

答案2

您必须在系统级别进行设置。

对于 Ubuntu 编辑/etc/security/limits.conf

添加一行,例如:

timb        hard    fsize           10000

您也可以使用通配符。

AFAIK 这对 root 不起作用,除非你添加session required pam_limits.so/etc/pam.d/common-session.

相关内容