Como definir um limite de tamanho de arquivo para um diretório?

8

Eu tenho um diretório no meu sistema que é usado por um motivo específico por aplicativos e usuários, mas não quero que seu tamanho exceda 2 GB; existe uma maneira de configurar algum tipo de limite que simplesmente não permitir que o tamanho do arquivo exceda esse valor ou qualquer outro valor que eu decida definir no futuro?

Quando o limite de tamanho é excedido, ele deve desfazer a última alteração (embora exista uma opção para interromper a operação e não se importar se metade do arquivo foi copiado e deixado lá) e exibir um aviso para o usuário.

Estou executando o Ubuntu GNOME 16.10 com o GNOME 3.22.


fonte
@ JacobVlijm: Por enquanto, vou aceitar a resposta de muru, mas se você puder fornecer uma melhor, ficarei feliz em aceitá-la.

Respostas:

19

A cota usual do sistema de arquivos no ext4 é por usuário / grupo, não por diretório. O ZFS pode definir uma cota de diretório, criando um sistema de arquivos de tamanho fixo em um volume ZFS. Um truque simples, porém, é criar um arquivo de 2 GB, criar um sistema de arquivos e montá-lo na pasta desejada:

$ touch 2gbarea
$ truncate -s 2G 2gbarea
$ mke2fs -t ext4 -F 2gbarea
mke2fs 1.43.3 (04-Sep-2016)
Discarding device blocks: done                            
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: bf1b2ee8-a7df-4a57-9d05-a8b60323e2bf
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

$ sudo mount 2gbarea up    
$ df -h up
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0      2.0G  6.0M  1.8G   1% /home/muru/up

De qualquer forma, as cotas do sistema de arquivos (ou métodos como este) não são tão amigáveis ​​quanto você deseja. Esse método é flexível unidirecional, pois você pode aumentar o tamanho on-line , mas diminuí-lo seria difícil.

Os comandos:

  • touch: touch 2gbareacria um arquivo vazio chamado 2gbarea.
  • truncate: truncateé usado para redimensionar arquivos (neste caso, redimensiono o 2gbareaarquivo vazio no momento para 2 GB usando -s 2G).
  • mke2fs: mke2fscria sistemas de arquivos ext2 / 3/4 (neste caso, ext4).
  • mount monta o sistema de arquivos no diretório especificado.
  • df é usado para listar o uso do sistema de arquivos.
muru
fonte
1
Uma nova pessoa pode ficar confusa com os comandos. Seu propósito deve ser explicado / vinculado?
Rohitt Vashishtha 24/10
@RohittVashishtha melhor?
muru
Existe alguma maneira de fazê-lo lançar uma pequena mensagem de aviso pop-up quando a cota for atingida?
@ParanoidPanda "it" being? Acho que o navegador de arquivos reclama quando não há mais espaço.
muru
@ muru: Principalmente, acho que não será o navegador de arquivos que estará gravando neste local, mais provavelmente em outros aplicativos específicos. Não há como "vigiar" essa pasta para que, quando atingida sua capacidade, um aviso gráfico apareça para alertar o usuário?