Wie lege ich eine Dateigrößenbeschränkung für ein Verzeichnis fest?

8

Ich habe ein Verzeichnis auf meinem System, das von Anwendungen und Benutzern aus einem bestimmten Grund verwendet wird, aber ich möchte nicht, dass seine Größe 2 GB überschreitet. Gibt es eine Möglichkeit, eine Art Limit festzulegen, die dies einfach nicht tut? Erlauben Sie der Dateigröße, diese oder eine andere Menge zu überschreiten, die ich in Zukunft festlegen möchte?

Wenn die Größenbeschränkung überschritten wird, sollte die letzte Änderung rückgängig gemacht werden (obwohl es eine Option geben sollte, damit der Vorgang nur gestoppt wird und es egal ist, ob eine halbe Datei kopiert und dort belassen wurde) und dann eine Warnung an angezeigt werden der Nutzer.

Ich verwende Ubuntu GNOME 16.10 mit GNOME 3.22.


quelle
@JacobVlijm: Ich werde Murus Antwort vorerst akzeptieren, aber wenn Sie eine bessere Antwort liefern können, würde ich diese gerne akzeptieren.

Antworten:

17

Das übliche Dateisystemkontingent für ext4 ist pro Benutzer / Gruppe und nicht pro Verzeichnis. ZFS kann ein Verzeichniskontingent festlegen, indem aus einem ZFS-Volume ein Dateisystem mit fester Größe erstellt wird. Ein einfacher Trick besteht jedoch darin, eine 2-GB-Datei zu erstellen, ein Dateisystem darauf zu erstellen und sie im gewünschten Ordner bereitzustellen:

$ 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

In jedem Fall sind Dateisystemkontingente (oder Methoden wie diese) nicht so benutzerfreundlich, wie Sie möchten. Diese Methode ist einseitig flexibel, da Sie die Größe online erhöhen können , es jedoch schwierig wäre, sie zu verringern.

Die Befehle:

  • touch: touch 2gbareaErstellt eine leere Datei mit dem Namen 2gbarea.
  • truncate: truncatewird verwendet, um die Größe von Dateien zu ändern (in diesem Fall verkleinere ich die Größe der derzeit leeren 2gbareaDatei auf 2 GB -s 2G).
  • mke2fs: mke2fsErstellt ext2 / 3/4 Dateisysteme (in diesem Fall ext4).
  • mount Hängt das Dateisystem im angegebenen Verzeichnis an.
  • df wird verwendet, um die Verwendung des Dateisystems aufzulisten.
muru
quelle
1
Eine neue Person könnte mit den Befehlen verwechselt werden. Sollte ihr Zweck erklärt / verknüpft werden?
Rohitt Vashishtha
@RohittVashishtha besser?
Muru
Gibt es eine Möglichkeit, eine kleine Popup-Warnmeldung zu starten, wenn das Kontingent erreicht ist?
@ParanoidPanda "es" sein? Ich denke, der Dateibrowser beschwert sich, wenn kein Platz mehr vorhanden ist.
Muru
@muru: Hauptsächlich glaube ich nicht, dass es der Dateibrowser sein wird, der an diesen Speicherort schreibt, eher andere spezifische Anwendungen. Gibt es keine Möglichkeit, diesen Ordner zu "überwachen", sodass bei Erreichen seiner Kapazität eine grafische Warnung angezeigt wird, um den Benutzer zu benachrichtigen?