概要
amazon linux2023上に作成されたユーザー毎の利用できる容量に制限を設けたい
そこで、今後迷わないよう手順を整理して記事にまとめます
環境
- AWS
- EC2インスタンス
- AmazonLinux2023
- ストレージ
- EBS(1台): gp3
- 手順の中でもう一台増設します
- EBS(1台): gp3
- EC2インスタンス
方針
- homeディレクトリ用のEBSを追加する
- homeディレクトリ用のパーティションを切る
- homeディレクトリを利用するユーザーに対して quotaをかける
手順
homeディレクトリ用のEBSを追加する
EBSを作成
- EBSボリュームをAWSコンソール上から作成
- 作成が完了したEBSを選択し、アクション -> ボリュームのアタッチを選択
- デバイス名の選択
- データボリュームとして利用するため、推奨とされるデバイス名 /dev/sdf ~ /dev/sdp の間で選択する
- ここでのデバイス名とlinux上で認識されるデバイス名は異なる可能性があります
- 参考
- 対象インスタンスを選択
- デバイス名の選択
- ボリュームをアタッチ
homeディレクトリ用のパーティションを切る
新しく追加したEBSを認識させる
-
参考にした記事
- AWS公式記事: Amazon EBS ボリュームを使用できるようにする
-
手順を実施するSFTPサーバーへsshする
-
ルートユーザーになる
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) <(ll /mnt/newhome)
- 一時的に作成した/homeディレクトリのコピーを削除
rm -rf /mnt/newhome
追加したEBSボリュームのmountを永続化する
-
参考にした記事
-
Amazon EBS ボリュームを使用できるようにする 内の
再起動後に接続ボリュームを自動的にマウントする
-
Amazon EBS ボリュームを使用できるようにする 内の
-
mount設定を書き換える前に、mount設定を記載するfstabのコピーを取得する
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