Ubuntu에서 데스크탑/다운로드와 같은 사용자를 위해 폴더 크기를 조정/제한하는 방법은 무엇입니까?

Ubuntu에서 데스크탑/다운로드와 같은 사용자를 위해 폴더 크기를 조정/제한하는 방법은 무엇입니까?

크기 제한을 활성화하고 싶습니다. 즉, 데스크톱, 다운로드 또는 음악 폴더와 같은 사용자를 위해 몇 개의 폴더 크기를 조정하고 싶습니다. 사용자가 메모리를 초과한 경우 덮어쓰면 안 되며 경고 메시지가 표시됩니다.

Ansible을 통해 폴더 크기를 조정하는 방법은 무엇입니까? 이는 많은 호스트를 위한 것이며 루트 권한이 있는 시스템에 직접 있습니다. Ubuntu 14.04 Desktop 버전에서 이 작업을 수행하고 싶습니다.

답변1

다음에서 허용된 답변을 기반으로 합니다.Linux에서 디렉토리 크기 제한을 설정하는 방법은 무엇입니까?~에 의해세르게이 니쿨로프그리고원본 튜토리얼, 필요에 따라 할당량이 제한된 디렉터리를 생성할 수 있는 스크립트를 작성했습니다.

스크립트는 특정 크기와 파일 시스템을 가진 루프 장치를 생성하고 사용자 정의 디렉터리에 루프 장치를 마운트하는 것을 전제로 작동합니다.

스크립트

다음에서도 사용 가능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다음은 이 스크립트를 사용하여 1MiB(즉, 1024 2in ) 로 제한된 생성 방법에 대한 예입니다.바이너리 접두사)

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

파일 쓰기가 909KiB에서 중지되었습니다. 이는 1MiB에 약간 못 미치므로 디렉터리 내 제한을 초과하는 것을 방지합니다.

추가 개발

영구적인 효과를 위해 스크립트에 의해 생성된 루프 장치에 추가해야합니다/etc/fstab. 이는 나중에 GitHub에 추가될 수 있습니다. 스크립트는 단일 디렉터리에서 작동하지만 이 스크립트는 여러 개의 제한된 디렉터리를 생성하기 위해 다른 스크립트 내에서 사용될 수 있으므로 충분히 유연합니다.

관련 정보