Tim*_*imB 5 linux filesystems ext4
Ext4 的最大文件系统大小为 1EB,最大文件大小为 16TB。
但是,是否可以在文件系统级别使最大文件大小更小?例如,我不想允许创建大于指定值(例如 1MB)的文件。这如何在 ext4 上实现?
如果不是 ext4,那么任何其他现代文件系统都支持此类功能?
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)
Run Code Online (Sandbox Code Playgroud)
那么在该目录中创建大于 1M 的文件的任何尝试都将失败。bindfs将EFBIG错误转发给写入文件的进程。
请注意,该限制仅适用于常规文件,不会阻止目录增长超过该限制(例如通过在其中创建大量文件)。