Ubuntu でデスクトップ/ダウンロードなどのユーザー用フォルダーのサイズを変更したり制限したりするにはどうすればいいですか?

Ubuntu でデスクトップ/ダウンロードなどのユーザー用フォルダーのサイズを変更したり制限したりするにはどうすればいいですか?

サイズ制限を有効にしたいのですが、これはデスクトップ、ダウンロード、ミュージック フォルダーなど、ユーザー用のいくつかのフォルダーのサイズを変更したいということです。ユーザーがメモリを超過した場合は上書きされず、警告メッセージが表示されます。

Ansible でフォルダーのサイズを変更するにはどうすればいいですか? これは、多くのホストで、ルート権限を持つシステム上で直接実行できます。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_dir1MiB(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/passwdcat

cat: write error: No space left on device

ファイルの書き込みは 909KiB で停止しました。これは 1 MiB をわずかに下回るため、ディレクトリ内の制限を超えることはありません。

さらなる発展

永続的な効果を得るには、スクリプトによって作成されたループデバイス追加されるべき/etc/fstabこれは GitHub で後で追加される可能性があります。スクリプトは単一のディレクトリで動作しますが、このスクリプトを別のスクリプト内で使用して複数の制限付きディレクトリを作成できるため、十分に柔軟性があります。

関連情報