ext4
tem uma opção max_dir_size_kb
mount para limitar o tamanho de diretórios , mas nenhuma opção semelhante para arquivos regulares.
No entanto, um processo pode ser impedido de criar um arquivo maior que um limite usando limites definidos por setrlimit()
ou ulimit
ou limit
embutidos em alguns shells. A maioria dos sistemas também permite que você defina esses limites em todo o sistema, por usuário.
Quando um processo excede esse limite, ele recebe um sinal SIGXFSZ. E quando ignorar esse sinal, a operação que faria com que o tamanho do arquivo fosse excedido (como uma chamada de sistema write()
ou truncate()
) falha com um erro EFBIG
.
Para mover esse limite para o sistema de arquivos, um truque que você pode fazer é usar um sistema de arquivos fuse (sistema de arquivos no espaço do usuário), onde o manipulador de espaço do usuário é iniciado com esse limite definido. bindfs
é um bom candidato para isso.
Se você executar bindfs dir dir
(que é bind dir
over itself), com bindfs
iniciado como ( zsh
syntax):
(limit filesize 1M; trap '' XFSZ; bindfs dir dir)
Então, qualquer tentativa de criar um arquivo maior que 1M nesse diretório falhará. bindfs
encaminha o erro EFBIG
para o processo que está gravando o arquivo.
Observe que esse limite só se aplica a arquivos regulares, o que não impedirá que os diretórios cresçam além desse limite (por exemplo, criando um grande número de arquivos neles).