[Linux] quota쿼터(사용자 용량 할당) 설정 (Rocky 8)
quota 쿼터 설정(사용자 용량 할당)
사용자별 용량(soft/hard), inode 개수 제한 가능
*사용자의 홈 디렉터리의 상위 디렉터리에 파티션 마운트와 쿼터 설정이 이루어져야 한다. 예를 들면 /home/rocky 가 홈 디렉터리인 사용자 rocky에게 사용량 할당을 하기 위해서는 디스크 파티션이 /home 디렉터리에 마운트되어야 하고, 마운트 옵션에서 쿼터 설정이 들어가야 한다.
*디스크 파티션이 마운트되면 디렉터리에 원래 있던 유저 홈이 덮여버리기 때문에, 반드시 마운트 이후에 유저와 홈 디렉터리가 생성되어야 한다.
ext4 파일시스템 quota 설정
50GB 디스크를 새로 추가해서
user1, user2 에게 각각 block soft 20GB, inode hard 10개 사용량을 할당해 줄 것이다.
0. 디스크 추가와 파티션 생성
lsblk
fdisk /dev/sdb
lsblk
1. 용량 제한할 사용자들이 위치할 디렉터리 생성
mkdir /userhome
2. 파티션 포맷 후 옵션 주면서 마운트하기
ext4로 포맷
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /userhome
mount | grep sdb1
vi /etc/fstab
defaults 대신 usrjquota=aquota.user,jqfmt=vfsv0 써주기
저장 후 재마운트
mount --options remount /userhome
--options 대신 -o 써줘도 된다
위와 같이 뜨는데, 마운트 옵션이 변경이 안 되었으면, 아래 명령어를 사용하라고 한다.
systemctl daemon-reload
mount | grep sdb1
쿼터용으로 잘 변경된 것을 확인했다.
3. 사용자 생성
-d 옵션으로 홈디렉터리 지정해주면서 사용자를 생성한다.
useradd -d /userhome/user1 user1
useradd -d /userhome/user2 user2
tail -2 /etc/passwd
user1, user2 홈디렉터리 잘 만들어지며 생성된 것 확인.
4. 쿼터 설정 전처리
cd /userhome
ls
/userhome 디렉터리로 이동한 후 두 사용자의 홈디렉터리가 잘 생성된 것까지 확인
quotaoff -avug
quotacheck -augmn
쿼터 끄고, 체크해서 쿼터파일이 없으면 생성해준다
ls
전에는 없었던 aquota.user 파일이 생겨난 것을 확인
quotaon -avug
다시 켜주면 전처리 완료
5. 쿼터 설정
edquota -u 사용자명
edquota -u user1
이렇게 설정할 수 있는 파일로 곧장(vi 편집기 사용해서) 들여보내준다. 사용자명과 uid, 사용하고 있는 디스크파티션을 볼 수 있고 block과 inode의 사용량과 각각의 soft, hard 쿼터 설정 내용도 볼 수 있다. 지금은 아직 설정해 준 것이 없기 때문에 0.
block은 용량, inode는 말그대로 inode 개수인데 쉽게 생각하면 파일의 개수라고 할 수 있다.
block의 단위는 KB인데 아래처럼 용량 적어주면 알아서 적용된다.
위처럼 G로 입력해주고 저장하고 나갔다가 다시 들어가면 아래처럼 바뀌어있다.
*B는 써주면 안되는듯 하다. 처음에 20GB라고 썼더니 아래처럼 에러 뜨며 적용이 안되었다.
edquota: Bad block soft limit: 20GB: Unknown space binary unit. Valid units are K, M, G, T.
edquota -g 그룹명 ->이 옵션을 사용하려면 쿼터 옵션을 줄 때 그룹쿼터도 같이 설정해줘야 한다. 현재는 유저쿼터만 설정해 준 상태여서 -g 옵션을 사용하려고 하니 에러가 떴다.
edquota -g user2
No filesystems with quota detected.
@@그리하여 갑자기 그룹 쿼터도 사용할 수 있게 만들어보았다.@@
vi /etc/fstab
위처럼 grpjquota=aquota.group 를 추가하고 저장해준다. 앞뒤로 쉼표 찍어주는 것도 잊지 말기.
재마운트해준다. 이 과정에서 기존 설정해놨던 쿼터 내용과 디렉터리 아래 내용 날아갈 것 같으니 백업 필수.
mount -o remount /userhome
mount | grep sdb1
그룹 쿼터 옵션도 잘 들어간 것을 확인.
모든 것을 재설정해줘야 한다.
quotaoff -auvg
quotacheck -augmn
뭐라뭐라 계속 뜨지만 살짝 무시해준다.
확인해보니 기존에 만들어놨던 쿼터 파일들이 있어서 전부 지워주고,
quotacheck -augmn
해주니 다시 깨끗한 쿼터 파일들이 생겨났다. 마지막으로
quotaon -auvg
그룹 쿼터, 유저 쿼터 둘 다 켜진 것을 확인.
edquota -g user1
그룹 쿼터 설정 파일이 잘 열린다.
user1은 사용자 쿼터로 block / soft / 20GB, user2는 그룹 쿼터로 inode / hard / 10 설정해주었다.
edquota -u user1
edquota -g user2
*grace time 변경
: soft 쿼터 설정시 설정 용량 or inode 개수가 초과되어도 정정할 수 있는 시간을 준다. 딱 자르지 않고 우아하게 경고.. 그래서 grace? 기본은 전부 7일이다.
edquota -t (디폴트가 유저쿼터)
user1에게 사용자쿼터 soft 줬기 때문에 3일로 바꿔보았다.
edquota -tg
user2에게 설정해준 그룹쿼터는 hard이기 때문에 변경 없이 확인만 하고 나왔다.
6. 설정 확인하기 (repquota 명령어는 root만 사용 가능)
repquota 경로명
repquota /userhome (옵션 없으면 유저쿼터만 보여준다)
repquota /userhome -g (그룹쿼터 볼 때)
당연히 둘 다 보고싶으면 repquota /userhome -ug 하면 된다.
7. 작동 확인하기
[user quota 작동 확인 : user1 block-20GB soft]
5GB 살짝 넘는 운동 영상을 user1의 홈디렉터리로 보내보겠다.
먼저, scp를 사용하기 위해 user1의 비밀번호를 설정해준다.
그리고 파일이 있는 폴더에서 Shift+마우스 우클릭 한 후 '여기에 PowerShell 창 열기'를 선택한다.
파워셸 창에서 scp 전송할파일명 user1@192.168.111.100:/userhome/user1 로 전송
(폴더명은 가렸음)
cd /userhome/user1
ls
잘 받아온 것을 확인할 수 있다.
유저 쿼터 작동을 확인하기 위해 user1 권한으로 바꿔준다.
su - user1
cp 파일명 2
cp 2 3
cp 3 4
du -sh
복사해서 20GB를 넘기기를 시도했더니 이런 경고가 뜬다. 그래도 끝까지 복사해준다.
soft 쿼터 설정은 이렇게 제한 용량이 넘어도 허용해준다.
[group quota 작동 확인 : user2 inode-10 hard]
user2로 접속하기 위해 비밀번호 생성하고 진입
passwd user2
su - user2
아무 파일이나 user2 홈 디렉터리로 보내줌
scp 파일명 user2@192.168.111.100:/userhome/user2
ls
cp 파일명 2
edquota -g user2
잘 들어있나 확인 후 복사 시도했으나 바로 할당량 초과라고 복사 불가 경고가 떴다.
ls -a 로 숨은 파일을 보니 뭐가 이미 많긴 많다.
이미 10개가 되었고 hard는 초과치를 허용하지 않는다.
xfs 파일시스템 quota 설정
0. 이전의 quota 설정과 생성되어 있는 사용자를 모두 지운다. (필수X 그냥 현재 디스크를 재사용하고 싶어서..)
userdel user1
8152라는 프로세스가 user1을 사용중이어서 삭제가 안된다고 한다. 그럼 죽여주자.
kill 8152
그러고 나니 삭제가 된다. 두 사용자 모두 지워준다.
userdel user1
userdel user2
rm -rf /userhome/*
/userhome 안에 있는 모든 내용물을 지워주려 했으나 쿼터 파일이 저항하길래 마운트 먼저 해제해줌
umount /userhome
그러고 나니 삭제가 잘 된다.
마지막으로 자동 마운트 설정한 것도 지워준다.
vi /etc/fstab 마지막 줄 지우고 저장
1.xfs로 포맷 후 마운트
/dev/sdb1 파일시스템을 xfs로 바꿔주기 위해 포맷 시도.
mkfs -t xfs /dev/sdb1
이미 파일시스템이 있다고 안된다고 강제로 바꾸려면 -f 옵션 써주라고 한다.
mkfs -tf xfs /dev/sdb1
아니랜다. 그래? 그러면 이렇게..
mkfs -f -t xfs /dev/sdb1
부적절한 옵션...
근데 계속 보니 경고 앞에 mkfs.xfs 어쩌구 나오는거 보니... 저렇게 써달라는 것 같아서
mkfs.xfs -f /dev/sdb1
성공.
mount -o uquota,gquota /dev/sdb1 /userhome
mount | grep sdb1
옵션 넣어주고 마운트 한 후 확인하니 파일시스템과 쿼터 설정 잘 되어서 마운트 되었다.
2. 쿼터 설정할 사용자 생성
이번에는 두 사용자를 한 그룹에 소속시켜 한 번에 설정해줘보겠다.
groupadd uniss
useradd -g uniss -d /userhome/user1 user1
useradd -g uniss -d /userhome/user2 user2
tail -2 /etc/passwd
tail -1 /etc/group
uniss 그룹을 먼저 만들고, 그룹과 홈디렉터리 지정하며 user1, user2 생성 완료.
메일함 파일이 있는 건 위에서 같은 이름의 사용자를 만들 때 만들어졌는데 지워지지 않은 것 같다.
3.quota 설정 진입
xfs_quota -x /userhome
quota 설정 프롬프트 등장
4. 제한량 설정
block은 b
inode는 i
limit bsoft=1G bhard=10G 사용자명
limit isoft=50 ihard=100 사용자명
그룹 설정은 -g 옵션 사용
limit -g 제한량 그룹명
limit -g bsoft=2G bhard=7G uniss
5. 확인
report -옵션
<옵션>
-h 단위 표시
-u/g 유저별, 그룹별 (미사용시 둘 다 출력)
-b/i 블록만, 아이노드만 (미사용시 기본값은 블록)
*쉘에서 한줄로 수행하기
xfs_quota -x -c 'limit -u isoft=10 bhard=10g user1' /userhome
xfs_quota -x -c 'report -huib user1' /userhome
끗
실습은 RHEL(Red Hat Enterprise Linux)의 클론 버전인 Rocky Linux 8버전을 사용했으며 Rocky Linux 9버전에서도 거의 문제없이 실행된다. 9버전에 와서 달라진 점은 따로 기입했지만 빠진 것이 있을 수 있다.