Как я могу изменить размер/ограничить папки для пользователей как Рабочий стол/Загрузки в Ubuntu

Я хочу включить ограничения размера, что означает, что я хочу изменить размер немногих папок для пользователей как Рабочий стол, папок Downloads или Music. Если бы пользователь превысил память затем, то она не должна перезаписывать и получает предупреждающее сообщение.

Как изменить размер папок через Ansible? Это для многих хостов и непосредственно в системе с корневым разрешением. Я хочу сделать это на Настольном выпуске Ubuntu 14.04.

0
задан 3 June 2018 в 02:03

1 ответ

На основе принятого ответа в том, Как установить предел для размера каталога в Linux? Sergei Nikulov и исходным учебным руководством, я соединил сценарий, который может создать ограниченный квотой каталог по требованию.

Сценарий воздействует на предпосылку создания циклического устройства с определенным размером и файловой системой и монтированием циклического устройства в пользовательском каталоге.

Сценарий

Также доступный на GitHub. Дальнейшее развитие будет сделано там.

#!/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 "$@"

Использование

Существует 3 необходимых флага:

  • -m для точки монтирования, иначе каталог, который Вы хотите ограничить
  • -s размер, которым Вы хотите ограничить в байтах
  • -f файловая система. Если Вы не уверены, каково это должно быть, просто придерживаться ext4 или ext3

Вот пример того, как я использовал этот сценарий для создания ./quoted_dir ограниченный 1 мебибайт (который является 10242 в Двоичном Префиксе),

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

Я протестировал сценарий с while true; do cat /etc/passwd >> ./quoted_dir/passwd; sleep 1; done тип цикла, который добавил бы содержание /etc/passwd в файл в ограниченном кавычкой каталоге. cat в конечном счете с ошибками с:

cat: write error: No space left on device

и запись файла остановилась на уровне 909 кибибитов, который просто немного нуждается в 1 мебибайт и предотвратил бы превышение пределов в рамках каталога.

Дальнейшее развитие

Для постоянного эффекта циклическое устройство, созданное сценарием, должно быть добавлено к /etc/fstab. Это может быть добавлено позже GitHub. Сценарий воздействует на единственный каталог, однако этот сценарий может использоваться в рамках другого сценария для создания нескольких ограниченных каталогов, таким образом, это достаточно гибко.

1
ответ дан 29 October 2019 в 05:07

Другие вопросы по тегам:

Похожие вопросы: