如何為 Ubuntu 中的桌面/下載等使用者調整資料夾大小/限制資料夾大小

如何為 Ubuntu 中的桌面/下載等使用者調整資料夾大小/限制資料夾大小

我想啟用大小限制,這意味著我想為用戶調整幾個資料夾的大小,例如桌面、下載或音樂資料夾。如果使用者超出內存,則不應覆蓋並收到警告訊息。

如何透過 Ansible 調整資料夾大小?它適用於許多主機,並且直接在具有 root 權限的系統上。我想在 Ubuntu 14.04 桌面版上執行此操作。

答案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限制為 1 MiB(即 1024 2 in二進位前綴

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 處停止,僅略低於 1 MiB,並且可以防止超出目錄內的限制。

進一步的發展

為了永久效果,腳本創建的循環設備應添加到/etc/fstab。稍後可能會將其添加到 GitHub 上。該腳本對單一目錄進行操作,但是該腳本可以在另一個腳本中使用來建立多個有限目錄,因此它足夠靈活。

相關內容