Comment définir une taille limite de fichier pour un répertoire?

8

J'ai un répertoire sur mon système qui est utilisé pour une raison spécifique par les applications et les utilisateurs, mais je ne veux pas que sa taille puisse dépasser 2 Go, existe-t-il un moyen de définir une sorte de limite qui ne fonctionne tout simplement pas autoriser la taille du fichier à dépasser ce montant ou tout autre montant que je décide de lui attribuer à l'avenir?

Lorsque la taille limite est dépassée, elle devrait annuler la dernière modification (bien qu'il devrait y avoir une option pour l'avoir afin qu'elle arrête simplement l'opération et ne se soucie pas si la moitié d'un fichier a été copiée et laissée là), puis affiche un avertissement à l'utilisateur.

J'utilise Ubuntu GNOME 16.10 avec GNOME 3.22.


la source
@JacobVlijm: J'accepterai la réponse de muru pour l'instant, mais si vous pouvez en fournir une meilleure, je serais heureux d'accepter celle-là à la place.

Réponses:

19

Le quota de système de fichiers habituel sur ext4 est par utilisateur / groupe, pas par répertoire. ZFS peut en quelque sorte définir un quota de répertoire, en créant un système de fichiers de taille fixe sur un volume ZFS. Une astuce simple, cependant, consiste à créer un fichier de 2 Go, à créer un système de fichiers dessus et à le monter dans le dossier souhaité:

$ 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

Dans tous les cas, les quotas de système de fichiers (ou des méthodes comme celle-ci) ne sont pas aussi conviviaux que vous le souhaitez. Cette méthode est flexible à sens unique, dans la mesure où vous pouvez augmenter la taille en ligne , mais la diminuer serait difficile.

Les commandes:

  • touch: touch 2gbareacrée un fichier vide nommé 2gbarea.
  • truncate: truncateest utilisé pour redimensionner les fichiers (dans ce cas, je redimensionne le 2gbareafichier actuellement vide à 2 Go en utilisant -s 2G).
  • mke2fs: mke2fscrée des systèmes de fichiers ext2 / 3/4 (dans ce cas, ext4).
  • mount monte le système de fichiers sur le répertoire donné.
  • df est utilisé pour répertorier l'utilisation du système de fichiers.
muru
la source
1
Une nouvelle personne pourrait se confondre avec les commandes. Leur objectif doit-il être expliqué / lié à?
Rohitt Vashishtha
@RohittVashishtha mieux?
muru
Y aurait-il un moyen de lui faire lancer un petit message d'avertissement contextuel lorsque le quota est atteint?
@ParanoidPanda "c'est" être? Je pense que le navigateur de fichiers se plaint quand il n'y a plus d'espace.
muru
@muru: Surtout, je ne pense pas que ce sera le navigateur de fichiers qui écrira à cet endroit, plus probablement d'autres applications spécifiques. N'y a-t-il aucun moyen de "surveiller" ce dossier de sorte que lorsqu'il a atteint sa capacité, un avertissement graphique s'affiche pour alerter l'utilisateur?