limita o tamanho máximo do arquivo no sistema de arquivos ext4

3

O Ext4 tem um tamanho máximo de sistema de arquivos de 1EB e um tamanho máximo de arquivos de 16 TB.

No entanto, é possível diminuir o tamanho máximo do arquivo no nível do sistema de arquivos? Por exemplo, eu não gostaria de permitir a criação de arquivos maiores que um valor especificado (por exemplo, 1MB). Como isso pode ser alcançado no ext4?

Se não ext4, então qualquer outro sistema de arquivos moderno tem suporte para tal recurso?

    
por TimB 31.08.2016 / 11:03

2 respostas

4

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).

    
por 31.08.2016 / 12:03
2

Você precisa definir isso no nível do sistema.

Para o Ubuntu editar /etc/security/limits.conf

Adicione uma linha como:

timb        hard    fsize           10000

Você também pode usar curingas.

AFAIK, isso não funciona para o root, a menos que você adicione session required pam_limits.so a /etc/pam.d/common-session .

    
por 31.08.2016 / 11:52