Wie kann ich die Größe eines Ordners für Benutzer wie Desktop/Downloads in Ubuntu ändern/einschränken?

Wie kann ich die Größe eines Ordners für Benutzer wie Desktop/Downloads in Ubuntu ändern/einschränken?

Ich möchte Größenbeschränkungen aktivieren, das heißt, ich möchte die Größe einiger Ordner für Benutzer anpassen, z. B. Desktop-, Download- oder Musikordner. Wenn ein Benutzer den Speicher überschreitet, sollte er nicht überschrieben werden und erhält eine Warnmeldung.

Wie ändere ich die Größe der Ordner über Ansible? Das geht für viele Hosts und direkt auf dem System mit Root-Berechtigung. Ich möchte das auf der Ubuntu 14.04 Desktop Edition machen.

Antwort1

Basierend auf der akzeptierten Antwort unterWie kann man in Linux eine Begrenzung der Verzeichnisgröße festlegen?vonSergej Nikulowund dasursprüngliches Tutorialhabe ich ein Skript zusammengestellt, das bei Bedarf ein kontingentbeschränktes Verzeichnis erstellen kann.

Das Skript basiert auf der Annahme, dass ein Loop-Gerät mit bestimmter Größe und einem bestimmten Dateisystem erstellt und das Loop-Gerät im benutzerdefinierten Verzeichnis bereitgestellt wird.

Skript

Auch verfügbar aufGitHub. Dort wird weiterentwickelt.

#!/usr/bin/env bash
# Author: Serg Kolo
# Date: June 1, 2018
# Written for: https://askubuntu.com/q/1043035/295286
# Based on: https://www.linuxquestions.org/questions/linux-server-73/directory-quota-601140/

set -e

print_usage(){

cat <<EOF
Usage: sudo mklimdir.sh -m <Mountpoint Directory> -f <Filesystem> -s <INT>

-m directory
-f filesystem type (one of supported by mke2fs)
-s size in bytes
-h this message

Exit statuses:
0:
1: Invalid option
2: Missing argument
3: No args
4: root privillege required
EOF
} > /dev/stderr

parse_args(){
    #set -x

    option_handler(){

        case ${opt} in
            m) mountpoint=$( realpath -e "${OPTARG}" );;
            s) size=${OPTARG} ;;
            h) print_usage; exit 0 ;;
            f) mkfs_cmd=mkfs."${OPTARG}" ;;
            \?) echo ">>>Invalid option: -$OPTARG" > /dev/stderr; exit 1;;
            \:) echo ">>>Missing argument to -${OPTARG}" > /dev/stderr; exit 2;;
        esac
    }

    local OPTIND opt
    getopts "m:s:f:h" opt || { echo "No args passed">/dev/stderr;print_usage;exit 3;}
    option_handler 
    while getopts "m:s:f:h" opt; do
         option_handler
    done
    shift $((OPTIND-1))

}


main(){

    if [ $EUID -ne 0 ]; then
        echo ">>> Please run the script with sudo/as root" > /dev/stderr
        exit 4
    fi

    local mountpoint=""
    local size=0
    local mkfs_cmd

    parse_args "$@"
    quota_fs=/"${mountpoint//\//_}"_"$(date +%s)".quota
    dd if=/dev/zero of="$quota_fs" count=1 bs="$size"
    "$mkfs_cmd" "$quota_fs"
    mount -o loop,rw,usrquota,grpquota "$quota_fs" "$mountpoint"

    chown $SUDO_USER:$SUDO_USER "$mountpoint"

}

main "$@"

Verwendung

Es gibt drei erforderliche Flags:

  • -mfür den Mountpoint, also das Verzeichnis, das Sie einschränken möchten
  • -sdie Größe in Bytes, auf die Sie beschränken möchten
  • -fDateisystem. Wenn Sie nicht sicher sind, was das sein soll, bleiben Sie einfach bei ext4 oder ext3

Hier ist ein Beispiel, wie ich dieses Skript verwendet habe, um ./quoted_dirauf 1 MiB (das sind 1024 2 inBinäres Präfix)

sudo ./mklimdir.sh -m ./quoted_dir/ -s $((1024*1024)) -f ext4

Ich habe das Skript mit einer Schleife getestet , die den Inhalt an die Datei im durch Anführungszeichen begrenzten Verzeichnis while true; do cat /etc/passwd >> ./quoted_dir/passwd; sleep 1; doneanfügte . Es kam schließlich zu einem Fehler mit:/etc/passwdcat

cat: write error: No space left on device

und das Schreiben der Datei wurde bei 909 KiB gestoppt, was knapp unter 1 MiB liegt und ein Überschreiten der Grenzen innerhalb des Verzeichnisses verhindern würde.

Weitere Entwicklung

Für einen dauerhaften Effekt kann das durch das Skript erstellte Loop-Gerätsollte hinzugefügt werden/etc/fstab. Dies kann später auf GitHub hinzugefügt werden. Das Skript arbeitet mit einem einzelnen Verzeichnis, kann jedoch innerhalb eines anderen Skripts zum Erstellen mehrerer begrenzter Verzeichnisse verwendet werden, es ist also flexibel genug.

verwandte Informationen