如何调整/限制 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英寸)的示例二进制前缀

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 上。该脚本对单个目录进行操作,但是此脚本可以在另一个脚本中使用,以创建多个有限的目录,因此它足够灵活。

相关内容