본문 바로가기

Engineer/virtual machine

[리눅스]우분투 ubuntu 사용자별 공간 할당하기-쿼터

쿼터 개요

리눅스는 여러 사용자가 동시에 접속해야 되기 때문에 사용자별로 용량을 제한하지 않으면 문제가 됩니다.

따라서 사용자별로 할당해 줘야 합니다. 여기서 나온 개념이 쿼터입니다. 쿼터란 것은 파일 시스템마다 사용자 혹은 그룹이 생성할 수 있는 파일의 용량의 개수를 제한하는 것을 말합니다.  

 

루트(/)로 사용하면 시스템과 관련된 문제를 발생시킬 소지가 있습니다. 많은 사용자가 동시에 /를 사용한다면 성능이 저하될 수 있습니다. 따라서 루트보다는 별도의 파일 시스템을 지정하는 것이 여러 측면에서 좋은 생각입니다. 

 

STEP 1 파티션 생성 후 마운트 

fdisk로 파티션 생성 후 디렉터리를 만들고 마운트 시킵니다.

root@server:~# fdisk /dev/sdb

Command (m for help): n

Select (default p): p

ENTER 3번 

Command (m for help): p

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 20971519 20969472  10G 83 Linux

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

root@server:~# adduser --home /userSpace/rabbit rabbit


'rabbit' 사용자를 추가 중...
새 그룹 'rabbit' (1001) 추가 ...
새 사용자 'rabbit' (1001) 을(를) 그룹 'rabbit' (으)로 추가 ...
'/userSpace/rabbit' 홈 디렉터리를 생성하는 중...
'/etc/skel'에서 파일들을 복사하는 중...
새  암호: 
새  암호 재입력: 
passwd: 암호를 성공적으로 업데이트했습니다
rabbit의 사용자의 정보를 바꿉니다
새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요
	이름 []: 
	방 번호 []: 
	직장 전화번호 []: 
	집 전화번호 []: 
	기타 []: 
정보가 올바릅니까? [Y/n] y

root@server:~# adduser --home /userSpace/panda panda
경고: 지정한 /userSpace/panda 홈 디렉터리는 이미 존재합니다.
'panda' 사용자를 추가 중...
새 그룹 'panda' (1002) 추가 ...
새 사용자 'panda' (1002) 을(를) 그룹 'panda' (으)로 추가 ...
'/userSpace/panda' 홈 디렉터리는 이미 존재합니다.  '/etc/skel'에서 아무것도 복사하지 않음.
새  암호: 
새  암호 재입력: 
passwd: 암호를 성공적으로 업데이트했습니다
panda의 사용자의 정보를 바꿉니다
새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요
	이름 []: 
	방 번호 []: 
	직장 전화번호 []: 
	집 전화번호 []: 
	기타 []: 
정보가 올바릅니까? [Y/n] y

 

userSpace라는 디렉터리에 userSpace는 아까 마운트 하기 전 만들었던 디렉터리 입니다.

panda와  rabbit이라는 사용자를 만들어주었습니다. 

STEP 2 재부팅 후에도 마운트유지하기

nano /etc/fstab창에 들어가서 아래와 같이 설정을 변경해줍니다. 설정 후 

ctrl + x+ y를 입력하고 나갑니다.

재부팅 효과를 줄 수 있는 명령어를 입력하고 mount를 하면 

쿼터용으로 마운트 된 것을 확인 할 수 있습니다. 

STEP 3 쿼터 DB 생성하기 

외울 필요없이 순서대로 따라 하면 됩니다.

apt -y install quota 
#쿼터 패키지를 설치

root@server:~# cd /userSpace
쿼터용 파일 시스템이 마운트 된 곳으로 이동

root@server:/userSpace# quotaoff -avug
#결과
/dev/sdb1 [/userSpace]: user quotas turned off
#쿼터를 끔

root@server:/userSpace# quotacheck -augmn
#파일시스템의 쿼터 관련  체크 

root@server:/userSpace# rm -f quota.*
생성된 쿼터 파일을 일단 삭제

root@server:/userSpace# quotacheck -augmn
다시 파일 시스템의 쿼터관련 체크 

root@server:/userSpace# touch aquta.user aquota.group
쿼터 관련 파일을 생성 

root@server:/userSpace# chmod 600 aquota.*
#보안을 위해 root이외는 접근권한 x

root@server:/userSpace# quotacheck -augmn
#마지막으로 파일 시스템 관련 쿼터 체크 

root@server:/userSpace# quotaon -avug
#설정된 쿼터를 실행 
#결과 /dev/sdb1 [/userSpace]: user quotas turned on

edquota -u rabbit을 하면 다음 창이 나옵니다.

각각의 의미는 다음과 같습니다.

  • Filesystem: 디스크 파일 시스템 이름입니다. 여기서는 /dev/sdb1입니다.
  • blocks: 디스크 블록 할당량입니다. 디스크 블록은 일반적으로 1024바이트 크기입니다. 여기서는 16블록입니다.
  • soft: 소프트 할당량입니다. 디스크 공간이 부족할 때 사용자에게 경고를 보내는 할당량입니다. 여기서는 0블록입니다.
  • hard: 하드 할당량입니다. 디스크 공간이 부족하더라도 사용자에게 할당량을 초과하지 못하게 하는 할당량입니다. 여기서는 0블록입니다.

0블록이라는 것은 한도를 제한하지 않겠다는 의미입니다.

 

  • inodes: 파일 인덱스 노드 할당량입니다. 파일 인덱스 노드는 파일의 정보를 저장하는 데이터베이스입니다. 여기서는 4개입니다.
  • soft: 소프트 할당량입니다. 파일 인덱스 노드가 부족할 때 사용자에게 경고를 보내는 할당량입니다. 여기서는 0개입니다.
  • hard: 하드 할당량입니다. 파일 인덱스 노드가 부족하더라도 사용자에게 할당량을 초과하지 못하게 하는 할당량입니다. 여기서는 0개입니다.

soft에 30720 hard에 40960을 적고 저장하였습니다. 의미는 30720KB가 일 때 디스크공간이 부족할 경우 경고를 한다는 것이고 40960KB가 넘어갈 때 디스크공간이 부족한 경우 경고를 합니다.

root@server:/userSpace# su - rabbit
rabbit@server:~$ pwd
/userSpace/rabbit
rabbit@server:~$ cp /boot/vmlinuz-* test1
rabbit@server:~$ cp /boot/vmlinuz-* test2
rabbit@server:~$ 
rabbit@server:~$ cp /boot/vmlinuz-* test3
rabbit@server:~$ ls -l
합계 34164
-rw-r--r-- 1 rabbit rabbit 11657976  7월 29 16:51 test1
-rw-r--r-- 1 rabbit rabbit 11657976  7월 29 16:51 test2
-rw-r--r-- 1 rabbit rabbit 11657976  7월 29 16:51 test3
rabbit@server:~$ cp /boot/vmlinuz-* test4
cp: 'test4'에 쓰는 도중 오류 발생: 디스크 할당량이 초과됨

 

 아래 명령어를 볼 때 합계가 34164KB이므로 아직 40690에 도달하지 못함을 알 수 있습니다. 따라서 경고가 안 나오다가

test4를 만들  때 초과하므로 명령어가 나옵니다. 

해석하면 지금 40960을 초과하였습니다. grace부분은 유예기간인데 6일이라는 의미이고 edquota -t 하면 변경할 수 있습니다. 40960-30720 해서 10240은 6일 동안만 사용할 수 있다는 의미입니다.

그럼 panda에게도 똑같이 적용하고 오겠습니다.

panda는 cp 명령어 치지 않고 soft와  hard만 설정해 줬습니다. grace가 없는 것을 알 수 있죠?

root로 돌아가서 repquota /userSpace를 입력하면 해당내용을 확인할 수 있습니다. 

좀 더 쉽게 동일하게 적용하려면 위의 명령어를 쿼터를 사용하지 않으려면 아래 명령어를 입력합니다.