2
0

amazon linux2023 でhomeディレクトリ配下をユーザーディレクトリ毎に容量制限をかける方法

Last updated at Posted at 2024-07-14

概要

amazon linux2023上に作成されたユーザー毎の利用できる容量に制限を設けたい
そこで、今後迷わないよう手順を整理して記事にまとめます

環境

  • AWS
    • EC2インスタンス
      • AmazonLinux2023
      • ストレージ
        • EBS(1台): gp3
          • 手順の中でもう一台増設します

方針

  1. homeディレクトリ用のEBSを追加する
  2. homeディレクトリ用のパーティションを切る
  3. homeディレクトリを利用するユーザーに対して quotaをかける

手順

homeディレクトリ用のEBSを追加する

EBSを作成

  • EBSボリュームをAWSコンソール上から作成
  • 作成が完了したEBSを選択し、アクション -> ボリュームのアタッチを選択
    • デバイス名の選択
    • 対象インスタンスを選択
  • ボリュームをアタッチ

homeディレクトリ用のパーティションを切る

新しく追加したEBSを認識させる

sudo su -
  • 追加されたディスク名を確認する
lsblk

下記の例ではxvdfが追加されたディスク

NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
xvda      202:0    0  100G  0 disk 
├─xvda1   202:1    0  100G  0 part /
├─xvda127 259:0    0    1M  0 part 
└─xvda128 259:1    0   10M  0 part /boot/efi
xvdf      202:80   0  100G  0 disk 
  • ファイルシステムが何も利用されていないことを確認する
    • data だけが表示されている場合は、デバイスにはファイルシステムが存在していない
    • xvdfの箇所はlinux上で認識されているディスク名に合わせて置き換え
file -s /dev/xvdf

出力例

/dev/xvdf: data
  • ボリューム上にファイルシステムを作成
    • xvdfの箇所はlinux上で認識されているディスク名に合わせて置き換え
mkfs -t xfs /dev/xvdf
  • ファイルシステムが作成されたことを確認
    • xvdfの箇所はlinux上で認識されているディスク名に合わせて置き換え
file -s /dev/xvdf

出力例

/dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)

/homeのデータを退避する

  • 新しいディスクへ/homeを割り当てるため、一時的に/homeの中身を退避するディレクトリを作成
mkdir /mnt/newhome
  • /homeディレクトリの内容を新しい退避ディレクトリへコピー元ファイルと同一条件でコピー
rsync -aX /home/ /mnt/newhome/
rsyncのオプションについての補足
  • -a(コピー元のファイルと同一条件でコピーする)
    • 以下オプションすべて指定した時と同じ動き
      • -r:再帰的にディレクトリをコピーする
      • -l:シンボリックリンクをシンボリックリンクとしてコピーする
      • -p:パーミッションを保持する
      • -t:タイムスタンプを保持する
      • -g:グループを保持する
      • -o:所有者を保持する
      • -D:デバイスファイルと特殊ファイルを保持する
  • -X
    • 拡張属性を保持する

新しく追加したEBSへ(/home)を割り当てる

  • 新しいディスクを/homeにマウント
    • xvdfの箇所はlinux上で認識されているディスク名に合わせて置き換え
mount /dev/xvdf /home
  • 元の/homeディレクトリの内容を新たにmountされた/homeへコピー
rsync -aX /mnt/newhome/ /home/
  • ファイルサイズや権限についてdiffチェックを行い、コピー元とコピー先に差分が生じていないことを確認する
diff <(ll /home/seil) <(ll /mnt/newhome/seil)
diff <(ll /home) <(ll /mnt/newhome)
  • 一時的に作成した/homeディレクトリのコピーを削除
rm -rf /mnt/newhome

追加したEBSボリュームのmountを永続化する

cp /etc/fstab /etc/fstab.orig
  • 追加されたディスクのUUIDを確認する
blkid
  • /etc/fstabの末尾に以下の行を追加し、mount設定を永続化する
    • UUIDは適宜置き換えてください
UUID=xxxxxxx-0000-11aa-bbcc-0123456789  /home  xfs  defaults,nofail,usrquota  0  2

homeディレクトリを利用するユーザーに対して quotaをかける

quotaを有効にする

  • stabe記載のquota設定を反映させるため、/home を再マウントする
umount /home
mount /home

もし設定に誤りがある場合は、以下のようにエラーが表示される

mount: /home: wrong fs type, bad option, bad superblock on /dev/xvdf, missing codepage or helper program, or other error.
  • quota設定が有効になっていることを確認する
    • 以下コマンド実行で、 User quota on /home が表示されること
xfs_quota -x -c 'report -h' /home

ユーザーに対して、/homeディレクトリの使用量を制限する

  • ここでは仮に以下のようにする

    • ユーザー名: hoge
    • 容量上限: 5GB
  • setquotaを利用して5GBに使用量を制限する

    • 5GB * 1024(MB/GB) * 1024(KB/MB) = 5242880KB
setquota -u hoge 5242880 5242880 0 0 /home
setquotaの補足
setquota -u {ユーザー名} {容量ソフトリミット} {容量ハードリミット} {inode数ソフトリミット} {inode数ハードリミット} {quota対象ディレクトリ}
  • 容量ソフトリミット
    • リミットを超えるとlinux上で警告が出る
    • KB単位で指定
    • 0で制限なし
  • 容量ハードリミット
    • リミットを超えたファイルを格納することができない
    • KB単位で指定
    • 0で制限なし
  • inode数ソフトリミット
    • リミットを超えるとlinux上で警告が出る
    • 0で制限なし
  • inode数ハードリミット
    • リミットを超えたファイルを格納することができない
    • 0で制限なし
  • quota設定が反映されていることを確認する
repquota /home
*** Report for user quotas on device /dev/xvdb
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --       0       0       0              8     0     0       
ec2-user  --      48       0       0             13     0     0       
hoge      --       0 5242880 5242880              1     0     0
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0