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
自身),则使用bindfs
started 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
.