본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스 Linux] 디스크쿼터(disk quota) 사용자 또는 파일시스템에 따라 디스크 용량 제한하기, 쿼터 관련 명령어와 옵션 정리

[리눅스 유닉스 완전정복 목차]

안녕하세요~! 이번에 갖고온 포스팅은 디스크 관리 관련이예요.

디스크 쿼터 DISK QUOTA란? 디스크 사용에 대해서

일단 quota! 하면, 한도 할당량 이라는 뜻이 있습니다. disk quota하면 디스크 할당량 또는 디스크 한도 이런 의미가 되겠죠. 즉 disk quota란 특정 기준에 따라 디스크를 할당하는 것을 말해요.

사진출처: https://technicalitsupportcom.wordpress.com/2017/12/23/disk-quota-management-and-configuration-on-windows-server-2012r2-2016/

음 서버는 다수의 유저가 들어와서 작업을 진행하잖아요?!

만약에 한 유저가 고의든 실수든, /root 디렉터리에다가 1000000000GB파일을 계속 복사해서 생성해버리면, 시스템이 마비되겠죠. 이런거 방지책 당연히 있겠죠?

파일시스템간 혹은 유저간 사용할 수 있는 디스크 용량이나 파일 등 이런 것들을 제한할 수있는데 이걸 disk quota라고 합니다.

 

저 또한 테스트가 많은 날 로그 디렉토리가 너무 쉽게 FULL차는 것 같아 관리가 어려워 운영팀에 파일시스템 증설을 요청한 적이 있더라죠.ㅎㅎ 이렇게 회사에서도 보통 시스템 운영팀이 디스크 할당량을 관리하고 있답니다. 

디스크 쿼터란
리눅스 시스템은 기본적으로 사용자의 용량을 제한하지 않아서, 특정 사용자가 디스크에 남아 있는 용량을 모두 사용할 수 있다. 따라서 사용자가 많은 서버의 경우에 사용자의 디스크 사용량 제한이 필요한데, 이러한 제한을 디스크 쿼터라고 부른다. 리눅스에서는 디스크 쿼터는 사용자 및 그룹의 디스크 사용량과 생성할 수 있는 파일의 개수(I-nodes의 수)를 제한할 수 있다.

쿼터는 사실 자주 사용하는 명령어는 아니예요. 처음 세팅할 때에만 쓰고, 잘 사용할 일이 없기 때문이죠. 막상 세팅하고 보니까 너무 용량이 작아서 늘리거나 이럴때 사용할 수 있겠지만 이도 어느정도 안정화가 되면 수정할 일이 많지 않아요.

 

아무튼 quota가 뭔지 파악되었으면 이제 쿼터 실습을 진행해보도록 합시다.

quota 사전작업

quota 설치되어 있는지 확인해보기

보통 리눅스에는 대게 quota가 초기에 설치되어 있지 않아요.

quota가 설치되어 있는지 먼저 확인을 해주고 설치가 되어있지 않다면 추가 설치를 진행해줍시다.

이렇게 un이 뜨면 설치되지 않았다는 것

#dpkg -l quota
#apt install quota
#sudo apt install quota (root 계정이 아니라면)

설치 진행 후에 다시 dpkg -l quota 명령어를 실행해보면 

설치완료

installation이 완료되었다는'ii'가 뜹니다.

가상머신에 새로운 디스크 추가하기

"/" 파일시스템을 많은 사용자가 동시에 사용하게 되면, 디스크를 읽고 쓰는 작업과 일반 사용자가 디스크를 읽고 쓰는 작업이 동시에 발생하므로 전반적인 시스템 성능 저하가 일어납니다. 디스크 병목 현상이 발생하는거죠.

그래서 사용자 홈 디렉터리는 대게 루트를 직접 사용하지 않고 별도의 디스크를 사용하는게 효과적입니다. 디스크를 추가해서 사용자별 쿼터를 지정해볼게요.

 

저는 지금 실습을 가상머신 VMware로 진행하고 있는데요, 쿼터를 할 디스크를 먼저 추가해주도록 할게요.

사용하려는 서버를 클릭하고 Edit Virtual machine settings를 눌러줍시다.

 

Add를 눌러주시면 이렇게 추가할 목록이 뜨느데 Hard Disk를 누른 후 Next를 눌러줍시다.

SCSI -> Create a new virtual disk -> Next 눌러줍시다. 

그 다음 디스크 용량을 설정하는 창이 나오는데, 사용자 디스크 쿼터 설정을 위한 거니까 2GB만 추가해줄게요.

디스크 이름은 사용자를 위한 거니까 userDisk로 해줬어요. 

추가한 디스크 마운트하기 

마운트하는 방법은 이전에 포스팅으로 작성한 적이 있어요.

https://jhnyang.tistory.com/12

 

마운트(mount) 뜻, 관련 명령어 & 문제 (fdisk, df, mkfs,디스크마운트)

리눅스 완전 정복 : 리눅스 목차 아마 마운트라는게 윈도우 운영체제에서는 우리가 실감할 일이 없기 때문에 리눅스를 처음 접하시는 분들은 헷갈릴 수 있는 개념이예요. 오늘은 마운트에 대해서 끄적여보도록 하..

jhnyang.tistory.com

자세하게 나와있으니 따라서 마운트를 완료해줍시다. 개발자를 의미하는 devhome으로 홈디렉터리/home을 대체해볼게요. 새로생성한 디스크에 /devhome을 마운트해줍시다.

fdisk -l --추가된 디스크 확인 
fdisk /dev/sdb --해당 파티션 추가 
n --파티션 추가
p -- primary 선택
1 -- default 
엔터 엔터 --기본 세팅 
w - 저장
mkfs ext4 /dev/sdb1 --포맷
mkdir /devhome
mount /dev/sdb1 /devhome

대략적인 명령어 순서는 이와 같아요 ㅎㅎ 참고하라고!

사용자 추가하기

사용자 홈 디렉터리에 쿼터 설정을 하려면 사용자가 있어야겠죠?? 저는 기존에 추가해뒀던 사용자 ubuntu와 jhyang를 사용할게요. 혹시 사용자 추가 관련해서 기억이 안나시는 분은 아래 포스팅을 참고!

https://jhnyang.tistory.com/10

 

[리눅스 / 유닉스]사용자 관리(사용자 추가 useradd, passwd파일, 시스템계정 )

리눅스 완전 정복 : 리눅스 목차 오늘도 제 블로그를 클릭해주시고 방문해주신 방문자님들 반갑습니다. 오늘은 관리자 역할 중 빼놓을 수 없는 사용자관리에 대해서 알아보는 시간을 가질거예요~! 사용자 계정 추..

jhnyang.tistory.com

 

quota 실습 (버전2)

이제 본격적으로 quota 설정을 진행해볼건데요.

출처: 뇌를 자극하는 Redhat Fedora

전체적인 진행 순서는 위 그림에 잘 표시되어 있어요.

 

쿼터 종류 

지원되는 쿼터의 종류에는 총 3개가 있어요.

출처: https://developer.ibm.com/technologies/linux/tutorials/l-lpic1-104-4/

1번째 버전은 커널 2.2버전까지 지원되는 거, 버전2 는 2.4커널이나 그 이후의 커널단에서 사용되는 쿼터포맷입니다. 그 외 XFS 파일시스템에서 사용되는 xfs가 있어요.

 

처음 /etc/fstab에서 쿼터 옵션을 넣어주는데 버전 1은 usrquota, grpquota 이런 형태를 띄고

버전 2는 journaled한 특성이 추가되어 usrjquota, grpjquota 이런 포맷을 같고 있습니다.

즉 jquuta는 quota의 진화된 버전이라 생각하시면 돼요. 저널링 특성상 충돌이 나도 추가적으로 체크 명령어를 다시 해줄 필요도 없으니까 ㅎㅎ오늘 포스팅은 버전2로 진행할 예정입니다.

/etc/fstab 수정 

먼저 /etc/fstab을 수정해줘야 합니다. 기존에는 부팅하면 마운트가 사라지는 게 싫어서 컴퓨터 킬 때마다 마운트가 자동으로 되게 설정하려고 /etc/fstab에 추가해줬었잖아요. 여기에다가 quota가능한 디스크라는 명령어를 낑겨넣을 거예요.

아무것도 설정하지 않았을 때의 fstab파일

파일 /etc/fstab가 무엇인지? 또 각 필드가 무엇을 의미하는 지에 대해서는 아래 포스팅 링크를 참조해주세요.

 

quota를 적용하고 싶은 파일 시스템의 4번째 필드에, defaults의 뒤에 이어 usrquota 또는 grpquota를 추가해줍시다.

이런 식으로! (하나의 예시일뿐이예요) 우리의 경우 ext4가 되고 디렉터리 명도 달라야죠. 4번째 필드 세팅만 참고!

(버전1의 경우) usrquota는 유저에게 quota를 적용한다는 뜻이고, grpquota는 그룹 대상으로 적용한다는 뜻이예요.

 

하지만 저희는 버전2로 진행하기로 했었죠! 

'usrjquota=aquota.user,jqfmt=vfsv()'를 추가해줍시다.

각 옵션명이 의미하는 바는 위와 같습니다. usrjquota를 설정할 경우 jqfmt옵션이 필수적이라고 되어있죠?ㅎㅎ 

파일시스템에 사용자 디스크 쿼터를 활성화 하겠다라는 뜻으로 해석하셔도 돼요.

버전2 설정

요렇게 세팅해줍시다.

설정한 장치 재마운트/재부팅

파일시스템 설정을 변경해줬으니 이제 재부팅을 해줘야해요. 근데 재부팅하기 귀찮으니까 재마운트를 해줘도 됩니다.

리마운트

재부팅은 reboot를 쳐주면 돼요. 

리마운트 : mount -o remount /devhome

 

리마운트 후 아무것도 안떠서 잘 됐는지 찝찝하죠. 마운트 명령어로 결과를 확인해줍시다.

grep으로 마운트된디렉터리(/devhome)나 장치명(/dev/sdb1) 이런 키워드로 뽑아보시면 해당 결과 라인을 볼 수 있는데

저기 ~~ quota 옵션이 잘 들어갔네요.

쿼터 관련 파일 생성하기 

그 다음에는 쿼터 관련 파일을 생성해야 합니다. 이거 설정했을 때 뒤에 aquota.user이게 파일명이예요. aquota.user, aquota.group 파일들을 생성해줄거예요. 먼저 쿼터설정되어 있는 디렉터리로 이동해줍시다. (cd /devhome)

쿼터 관련 파일을 생성해줄건데 영향받으면 안되니까 잠깐 쿼터설정을 비활성화 해줄거예요. (quotaoff -avug)

 

명령어 quotaon / quotaoff 살펴보기

quotaon/ quotaoff는 쿼터 설정을 활성화/비활성화 하는 명령어 입니다.

옵션 의미
-a (--all) /etc/fstab에 정의된 모든 파일시스템에 대해 적용
-u (--user) 사용자 쿼터를 활성화/비활성화 할 때 사용하는 옵션입니다.
-g (--group) 그룹 쿼터를 활성화/비활성화 할 때 사용하는 옵션입니다.
-v (--verbose) 메세지를 자세히 출력합니다.

quotaoff -avug 하면 /etc/fstab에 정의된 모든 파일시스템에서 사용자와 그룹 쿼터를 비활성화하는데 확인을 위해 메세지를 같이 출력하라는 뜻이 되겠죠?

 

쿼터 관련 파일을 생성해줄건데, 찌끄래기들이 남아잇거나 혹 모를 파일들이 있을 수 있으니 관련파일을 깔끔히 먼저 제거해주고 시작합시다. (rm -rf aquota.*)

일련의 과정~

그 다음에 수행한 quotacheck 명령어는 하드디스크를 스캔해서 여러 가지 부분을 체크하는 기능입니다. 이 명령어를 수행하면 aquota.user가 생겨요 ㅎㅎ aquota.user, aquota.group을 생성해줬으면 사실 다 끝난겁니다.

다른 사용자가 접근해서 맘대로 바꿔버지리 않도록 권한만 설정해주고, quotacheck를 한 번 더 해준뒤 다시 활성화시키면 끝나는거예요~! 

 

포스팅이 너무 길어서 여기까지만 작성하도록 하고 quotacheck, edquota, repquota, quota, setquota에 관한 명령어는 다음 편에서 다루도록 할게요. 

▼다음 편 이어서 보기

https://jhnyang.tistory.com/266

 

[리눅스/Linux] 쿼터2탄 - quotacheck, edquota, repquota 등 디스크 쿼터 관련 명령어 살펴보기

안녕하세요. 저번 디스크 쿼터 포스팅을 이어서 작성해보려고 합니다. 저번시간에는 1. 디스크 쿼터란 무엇인가? 2. quota 사전 작업 2-1. 쿼터설치되어있는지 확인 2-2. 가상머신에 새로운 디스크 추가 2-3. 디스..

jhnyang.tistory.com

기출문제

[리눅스마스터 1급 실기 1901회]

다음은 사용자의 디스크 쿼터를 설정하는 과정이다. (괄호)안에 알맞은 내용을 적으시오.

(사실 리마에 나오는 쿼터는 다 버전1이예요. 명령어는 빨간색 말고 파란색을 참고해주세요)

가. /etc/fstab 파일에서 /home 관련된 영역의 4번째 필드에추가로 기재해야할 옵션 값을 적는다. 

   (  ①  )

나. /home 영역을 다시 마운트 한다.

  # (  ② ) /home

다. 파일 시스템을 체크하여 quota 기록 파일을 생성한다.

  # (  ③  ) /home

라. kaituser 사용자에 대한 쿼터를 설정한다. 

  #④  ) kaituser

■조건

- ①번은 관련 값만 기재한다.

- ②번은 명령어와 관련 옵션을 한 번에 기재한다.

- ③번은 해당 명령어를 기재한다.

- ④번은 해당 명령어만 기재한다. (실행되는 명령어를 기재)

답: ①: usrquota mount -o remount quotacheck 또는 quotacheck -mf edquota 또는 edquota -u

 

오늘은 여기까지입니다! 도움이 되셨다면 공감/댓글/광고보답은 어떤가요?! 

정보 공유에 큰 힘이 됩니다 다음 포스팅에서 또 뵈어요~ :)