크기 제한을 활성화하고 싶습니다. 즉, 데스크톱, 다운로드 또는 음악 폴더와 같은 사용자를 위해 몇 개의 폴더 크기를 조정하고 싶습니다. 사용자가 메모리를 초과한 경우 덮어쓰면 안 되며 경고 메시지가 표시됩니다.
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에 추가될 수 있습니다. 스크립트는 단일 디렉터리에서 작동하지만 이 스크립트는 여러 개의 제한된 디렉터리를 생성하기 위해 다른 스크립트 내에서 사용될 수 있으므로 충분히 유연합니다.