본문 바로가기

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

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

안녕하세요. 

저번 디스크 쿼터 포스팅을 이어서 작성해보려고 합니다.

 

저번시간에는 

1. 디스크 쿼터란 무엇인가?

2. quota 사전 작업 

   2-1. 쿼터설치되어있는지 확인

   2-2. 가상머신에 새로운 디스크 추가

   2-3. 디스크 마운트

   2-4. 사용자 추가

3. 쿼터 실습 

   3-1. 쿼터 종류 알아보기

   3-2. /etc/fstab 수정하기

   3-3. 재부팅/리마운트

   3-4. 쿼터 관련 파일 생성하기 

 

까지 알아봤어요.

저번 포스팅 1편을 혹시 보지 않으신 분이라면 아래 포스팅을 먼저 보길 추천드려요

https://jhnyang.tistory.com/265

 

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

[리눅스 유닉스 완전정복 목차] 안녕하세요~! 이번에 갖고온 포스팅은 디스크 관리 관련이예요. 디스크 쿼터 DISK QUOTA란? 디스크 사용에 대해서 일단 quota! 하면, 한도 할당량 이라는 뜻이 있습니다. disk quo..

jhnyang.tistory.com

쿼터 관련 파일 생성하기 

저번 시간 쿼터 관련 생성 파일까지 했었죠. 이후에 실질적으로 사용자에 따라 디스크를 할당하는 작업이 필요한데, 그 전 quotacheck 명령어에 대해서 좀 더 자세히알아보고 넘어갑시다.

저번 포스팅에 이어서~

쿼터를 비활성화 한 후 관련 파일을 제거하고 quotacheck를 수행해줬어요.

quotacheck를 그 때 단순히 여러 가지 부분을 체크한다고 했는데, 어떤 기능을 정확히 수행하는건지 자세 살펴봅시다.


명령어 quotacheck

디스크를 사용하고 있는 파일 시스템을 체크하여 quota 기록 파일(aquota.user, aquota.group 또는 quota.user, quota.group)을 가장 최근의 상태로 업데이트 시키는 명령어 입니다. 처음 설정할 때나 사용자의 변경된 용량, 변경된 쿼터 등의 정보를 인식하지 못하는 경우 사용합니다. quotocheck는 파일의 손상의 위험이 있으므로 quotaoff 상태에서 실행해 줘야 해요. 

man quotacheck

quotacheck examines each filesystem, builds a table of current disk usage, and compares this table against that recorded in the disk quota file for the filesystem. 

쿼터체크 명령어는 각 파일 시스템을 검사하고, 현재 디스크 사용량의 테이블을 만들고, 디스크 쿼터에 기록된 테이블과 비교하는 등의 작업을 수행합니다. 근데 이 단계는 만약 c옵션이 있다면 생략돼요. c 옵션은 기존의 생성된 쿼터 파일을 읽지 않는거니까요.

If any inconsistencies are detected, the quota files are updated. If an active file system is checked, the current system copy of the incorrect quotas is updated as well

만약에 일치하지 않는 부분이 조금이라도 발견되면, 쿼터 파일은 업데이트 됩니다. 그리고 active file system이 확인되면 일치하지 않는 쿼터의 현 시스템 복사본 또한 업데이트 돼요.

By default, only user quotas are checked.

기본적으로 사용자 쿼터들은 체크가 됩니다.

이 외에도 만약쿼터 파일이 손상되면 quotacheck가 가능한 많은 데이터를 저장할 수 있도록 노력한다던가, 등등 다양한 설명이 man quotacheck에 나와있으니 확인해보시면 좋습니다. 

 

--> 즉 이런 기능 때문에 쿼터를 사용하기로 설정해줬으면 quotacheck로 현 상황들을 다 업데이트 해줘야해요. 일종의 정보 체크와 동기화랄까~

 

[quotacheck 사용법]

# quotacheck [option] 디렉터리명

 

[quotacheck 옵션 Options]

리눅스 man quotacheck로 확인한 옵션들

옵션 설명
-a (--all) 사용자와 그룹에 대한 쿼터를 체크한다.
-m (--try-remount) 읽기 전용 모드 등의 이유로 마운트를 하지 못할 경우에 강제로 체크할 때 사용한다. (리마운트)
-n (--use-first-dquot)

만약 쿼터파일이 손상됐으면, 복사된 사본들로 a single user나 group id가 존재하도록 할 수 있는데

그때 복사된 사본들 중 가장 첫 번째로 검색된 것을 사용한다.

-f (--force) 쿼터 파일 초기 생성 시 인식하지 못하는 경우에 강제로 인식시킬 때 사용한다.
-u (--user) 사용자 쿼터 파일을 체크할 때 사용하는 옵션이다 (기본 옵션)
-g (--group) 그룹 쿼터 파일을 체크할 때 사용하는 옵션이다.
-c (--create-files) 기존의 생성된 쿼터 관련 파일을 읽지 않고 새롭게 초기화할 때 사용한다.

[quotacheck 사용 예]

# quotacheck /home

→ /home에 생성한 쿼터 파일을 체크합니다. 

 

# quotacheck -mf /home

quotacheck는 원칙적으로 해당 파티션을 quotaoff한 뒤에 해야 되는데, -mf 옵션을 사용하면 quotaoff 하지 않아도 무조건 체크합니다. 

 

# quotacheck -a

생성된 쿼터 파일을 찾아 체크합니다.

 

# quotacheck -cf /home

/home에 있는 쿼터 파일을 초기화합니다.


사용자별 공간, 파일 개수 할당하기

쿼터 관련 파일을 생성했으면 이제 사용자별로 공간을 할당해줘야겠죠. edquota 명령어를 사용하면 됩니다. ubuntu 사용자에 대해 쿼터를 설정해주고 싶으면 'edquota ubuntu'이렇게요!

그 전에 edquota가 어떤 명령어인지 살펴볼까요?


명령어 edquota

사용자나 그룹에 쿼터를 설정할 때 사용하는 명령으로 실행하면 vi 편집기가 실행됩니다. 기본 단위가 KB이므로 10MB를제한하려면 10000이라고 입력해야 합니다.

 

[edquota 사용법]

# edquota [option]

 

[edquota 주요 옵션]

리눅스 man edquota 옵션들

옵션 설명
-u (--user) 사용자에 대한 쿼터를 설정할 때 사용하는 옵션이다 (기본 옵션)
-g (--group) 그룹에 대한 쿼터를 사용할 때 사용하는 옵션이다.
-p (--project) 프로젝트에 대한 쿼터를 사용할 때 사용하는 옵션이다.
-t (--edit-period) Soft limit를 초과한 후부터 적용되는 시간제한(grace period)을 설정하는 옵션이다.
-p (--prototype) 특정 사용자의 쿼터를 다른 사용자에게 동일한 설정으로 적용할 때 사용하는 옵션이다.
-f (--filesystem) 주어진 파일시스템에서만 기능을 수행한다. (디폴트는 모든 파일시스템임)

[edquota 실행과 각 필드 의미]

한 번 사용해볼까요?

현재 ubuntu는 /devhome/ubuntu가 홈 디렉터리인데요, 이 ubuntu 유저에 디스크 쿼터를 설정해보려고 edquota ubuntu를 입력해줬습니다. 

그럼 이렇게 vi 편집기가 열리는데요, 각 항목들이 무엇을 의미하는지 확인해볼게요.

 

1. 파일시스템 Filesystem

파일시스템은 쿼터(quota)가 설정되어 있는 장치 파티션을 나타냅니다. 현재 /devhome은 /dev/sdb1과 마운트 되어있네요 ㅎㅎ

2. blocks 블럭

블럭은 현재 해당 유저가 사용중인 용량을 나타내요. 기본 단위가 KB라 해당 사진의 경우 92KB를 사용하고 있는거죠.

3~4. soft 소프트, hard 하드 [블럭에 관해]

소프트가 있고 하드가있는데요. 현재 값이 0인거 보니까 설정이 아직 안된 부분이라는 것을 추측할 수 있어요.

하드는 딱딱하고 변함이 없을 것 같은 그런 느낌이잖아요? 하드는 사용자가 쓸 수 있는 제한되어 있는 최대 용량을 말합니다. 내가 사용하고 있는 용량이 hard까지만 가능한거예요. 이 이상으론 절대 못넘어감 넘어가는 데이터들은 버려집니다.

 

근데 soft가 왜 있는 걸까요? 하드만 설정했을 경우 데이터가 깨지거나 날라갈 수 있는데 중요한 데이터일 수도 있잖아요. 갑자기 데이터가 날라가면 빡치겠죠 ㅎㅎ 그래서 소프트란 개념을 두고 이걸 마지노선처럼 생각하지만, 혹시 모를 사태를 대비해 하드까지 넘어가는건 잠깐 허용해주겠다라는 의미가 됩니다.

예시로, soft를 100메가로 하드를 200메가로 설정하면 이게 무슨 의미가 될까요? 100메가를 넘기는건 권장되지 않지만 잠시 유예기간 동안은 200까지 넘어가게 해주겠다. 그 동안 알아서 정리해라 이런게 소프트와 하드의 관계입니다.

유예기간 내 soft에 지정한 용량 이하로 줄이지 않으면 파일의 생성이 불가능해집니다.

소프트 범위 내로 들어오면 타이머는 리셋됩니다.

5. inodes 

inodes는 현재 사용 중인 I-node 수를 제한하는 거예요. (파일이나 디렉터리의 개수라고 생각하면 됩니다)

6~7. soft 소프트, hard 하드 [i-nodes에 관해]

뒤에 나오는 soft와 hard는 위의 3~4번과 똑같은 개념인데 파일용량이 기준이 아니라 파일 수가 기준이 되는거예요.

그래서 soft는 일반적으로 사용자에게 지정하는 inode 값으로 파일이나 디렉터리를 생성할 수 있는 개수를 의미하고,

hard는 절대 초과할 수 없는 inode 값으로 사용자가 생성할 수 있는 파일이나 디렉터리의 최대 값입니다.


inodes 수 제한하기

먼저, 유저 ubuntu의 파일 개수를 제한해볼게요. 'edquota ubuntu'명령어를 쳐서 나온 vi 편집기의 6~7항목을 변경해줍시다.

현재 ubuntu 유저의 inodes수가 17개이네요. 수월한 확인을 위해 soft를 18개 hard를 20개로 설정해볼게요.

잘 설정되었는지 확인하려면 계정을 ubuntu 유저로 스위치 한 후 quota 명령어를 쳐줍시다.


명령어 quota, repquota

사용자 단위로 쿼터 설정 정보를 출력해주는 명령어 입니다. quota는 전체를 보여주는게 아니라 나에 관련된 즉 여기서는 ubuntu에 관련된 quota 정보를 보여주잖아요. 근데 /devhome에 설정되어 있는 즉 시스템 단위의 쿼터 정보를 보고 싶을 수도 있어요. 그럴 경우 사용하는 것이 repquota입니다. 

ex) # repquota /devhome

→/devhome에 설정된 사용자 쿼터 정보를 모두 출력해줘.

# repquota -g /home

/home에 설정된 그룹 쿼터 정보들을 출력해줘

# quota ubuntu

→ ubuntu 사용자의 쿼터 설정 정보를 알려줘

$ quota

현재 사용자의 쿼터 정보를 알려줘


 quota가 18로 limit가 20으로 잘 설정되어있는 것을 확인할 수 있어요.

실제 파일을 하나씩 늘려가면서 테스트를 해봤어요.

soft를 넘어가는 시점부턴 파일 개수에 *가 붙네요. 그리고 유예기간 7일이 생깁니다.

hard개수가 되면 더 이상 파일을 생성할 수가 없습니다 'Disk quota exceeded'라는 경고 문구도 뜨는 것을 확인할 수 있어요.

디스크 용량 제한하기

똑같긴 하지만, 이번에는 디스크 용량을 제한해볼게요.

현재 96KB를 사용중이길래 soft를 100KB, hard르르 150KB로 줘봤습니당.

그 다음 ubuntu 계정으로 들어가서 파일들을 복사해봤어요. 저는 마침 이전에 작성해놨던 client파일이 있길래 그냥 그걸 반복문으로 계속 복사해줬습니다

$ for i in {000..005}; do cp client test-$i; done

똑같이, hard 기준을 넘어가는 시점에 'Disk quota exceeded'에러가 뜨는 것을 확인할 수 있어요.

유예기간 변경하기

당연히 용량 유예기간과 inodes 유예기간을 변경해줄 수 있습니다. t옵션을 사용해서요!

# edquota -t 

해당 명령어를 실행하면 위와 같이 뜨는데 여기서 날짜를 변경해주면 돼요.

 

오늘은 여기까지입니다~!!생각보다 포스팅이 많이 길어졌네요!

도움이 되셨다면 오늘도 공감 살포시 눌러주고 가시는건 어떤지요?! 

고생하셨습니다 다음 포스팅에서 또 봐용

  • root 2020.08.10 15:40

    예시까지 정말 유용하네요 감사합니다!

  • ckh0213 2021.05.12 12:51

    오류가있는것같아 문의드립니다.
    soft 100메가 hard 200메가면 200은 못넘어가지만 100은넘어도 유예기간동안 해주겠다아닌가요??

    • IT 양햄찌(jhnyang) 2021.05.12 14:57 신고

      지인에게 설명하는 말투로 작성하다보니 오해의 소지가 좀 있었네요. 관리자가 사용자가 넘어가지 않았으면 권장하는게 soft이기 때문에 유저입장에서 100메가는 넘어가지 않는게 권장되지만 일정시간동안 hard인 200까지 잠깐 넘어가는건 봐주겠다, 라는 의미로 작성하였습니다. 좀 더 명확한 전달을 위해 수정하겠습니다. 감사합니다 :)