강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
▒ Doly의 CentOS7 강좌27 10. 디스크관리 6 XFS 쿼타
조회 : 22,612  


▒ Doly의 CentOS7 강좌27 10. 디스크관리 6 XFS 쿼타


#################################################
    작성자 : 정우영
    작성일 : 2015.4.14
    대상 OS : CentOS7 x86_64

 본 강좌를 기반으로 서적을 집필합니다. 연재강좌가 마무리되고 몇달 후면 서적이 나오겠죠? CentOS7은 서적도 없지만 강좌도 많이 부족하네요. 리눅스 서버를 10년 넘게 구축하고 관리하고 컨설팅하면서 꼭 필요한 부분과 알아야 할 부분들을 꼼꼼히 체크하면서 강좌를 써보려합니다. 강좌중 오탈자가 있거나 설명이 부족하고 잘못된 경우 doly골뱅이superuser.co.kr으로 메일한통 부탁드립니다. 강좌가 수정되면 더 많은 분들께 도움이 될것이라 생각하고 강좌를 기반으로 집필될 서적또한 완성도가 높아지지 않을까 생각합니다.
#################################################

10. 디스크관리
 10.5 LVM
   10.5.3. LVM 명령어
   10.5.3.1. LVM 명령어 통합관리 : lvm
   10.5.3.2. 볼륨 확인 : pvs, vgs, lvs
   10.5.3.3. 추가할 디스크 파티션 테이블 삭제 : dd
   10.5.3.4. PV 생성 : pvcreate
   10.5.3.5. VG 생성 : vgcreate
   10.5.3.6. VG에 PV 추가하여 확장 : vgextend
   10.5.3.7. LV 생성 : lvcreate
   10.5.3.8. LV 포맷, 마운트 : mkfs, mount
   10.5.3.9. LV 확장 : lvextend
   10.5.3.10. xfs 파일시스템 Resize  : xfs_growfs
   10.5.3.11. LV 축소 : lvreduce
   10.5.3.12. PV볼륨 온라인 이동 및 제거 : pvmove
   10.5.3.13. LV 삭제 : lvremove
   10.5.3.14. VG에 PV 제거하여 축소 : vgreduce
   10.5.3.15. VG 삭제 : vgremove
   10.5.3.16. PV 삭제 : pvremove

위 내용은 인터넷 강좌나, 리눅스 기초 서적에 다루는 내용이기 때문에,
본 연재 강좌에서는 다루지 않고, 서적에 체계적으로 정리할 예정입니다.


 10.6. 쿼타(Quota)설정
쿼타는 디스크의 용량 및 아이노드 수(파일 및 디렉토리 수)를 사용자, 그룹별로 제한하기 위해 사용된다. CentOS 7에서 기본파일시스템으로 제공되는 xfs의 경우 사용자, 그룹뿐만 아니라 프로젝트, 디렉토리별로 제안할 수 있어 유용하게 사용된다. 
홈페이지를 만들어 웹호스팅 서비스에 가입하면 디스크용량을 제한적으로 제공한다. 이 때 쿼타가 사용되는 것이다. 또, 여러 사용자가 파일 저장용도로 서버를 사용할 때 한 사용자가 모든 공간을 사용하지 못하도록 나누기위해 사용된다.

먼저 CentOS 7의 기본 파일시스템인 xfs에서 쿼타 설정에 대해 알아보고, 예전방식의 쿼타에 대해 알아보도록 하자.

10.6.1. XFS 쿼타(Quota)
CentOS7부터는 기본파일시스템으로 xfs가 사용된다. xfs에서 제공하는 쿼타는 사용자, 그룹뿐만 아니라 프로젝트, 디렉토리별로 제안할 수 있다. 하지만, 일반적인 쿼타 설정법과는 다르다.
예전방식에서 제공되는 쿼타는 사용자, 그룹을 기준으로 용량 및 파일수를 제안할 수 있었다. 그래서 웹서비스를 제공하기에 불편한점이 있었다. Apache 웹서버의 경우 nobody 또는 daemon 사용자권한으로 작동한다. 웹을 사용하여 파일을 업로드 하는 경우 nobody 또는 daemon 사용자 소유가 되어 쿼타에서 사용되는 용량으로 측정되지 않았다. 이러한 부분을 해결하기 위해 각 사용자의 권한으로 Apache 웹서버를 실행되도록 하였지만, 이는 보안에 취약하였다. xfs 쿼타의 디렉토리별 제한은 이러한 문제를 해결해 준다.

10.6.1.1. 마운트 옵션 설정 : /etc/fstab
쿼터를 사용하기 위해서는 파일시스템 마운트 과정에서 옵션을 넣어야 한다. 마운트 옵션은 다음과 같다. 


xfs 쿼타관련 마운트옵션은 제한는 하는 경우와 제한은 하지 않고 모니터링을 위해 사용하는 각 2가지 옵션을 제공한다. 웹호스팅의 경우 제한을 하게되면 웹사이트 장애까지 유발할 수 있어 제한은 하지 않고 모니터링만 하기도 한다. 그룹쿼타와 프로젝트 쿼타는 동시에 사용할 수 없다.

서버 부팅될 때 파일시스템 마운트옵션을 넣기 위해 /etc/fstab에 다음 내용을 추가한다.

/dev/mapper/centos-data /data          xfs     uquota,pquota,defaults      0 0

위 내용은 이미 생성된 /dev/mapper/centos-data 볼륨을 /data 디렉토리에 마운트한다. /dev/mapper/centos-data 볼륨은 xfs 파일시스템으로 포맷되어 있어야 한다. 마운트 옵션으로 사용자쿼타(uquota), 프로젝트쿼타(pquota)옵션을 추가하였다.
/data 디렉토리르 생성하고 /etc/fstab 설정 내역에 따라 마운트 해보자.

~] # mkdir /data
~] # mount /data

만약 이미 마운트가 되어 있다면 다음과 같이 다시 마운트를 한다.

~] # mount -o remount /data

마운된 내용을 확인한다.

~] # mount |grep data
/dev/mapper/centos-data on /data type xfs (rw,relatime,attr2,inode64,usrquota,prjquota)

앞에서 설정한 uquota(usrquota), pquota(prjquota)옵션이 설정된 것을 확인하였다.

10.6.1.2. 사용자 쿼타 설정
앞에서 쿼타를 사용할 파티션이 준비되었다면 사용자 쿼타를 설정해 보자. xfs 파일시스템의 쿼타는 xfs_quota 명령어를 이용하여 설정하거나 확인한다. xfs_quota는 기본적으로 대화형 환경을 제공한다. 다음은 xfs_quota 명령어 실행 후 help를 입력하여 사용법을 확인한 것이다.

~] # xfs_quota
xfs_quota> help
df [-bir] [-hn] [-f file] -- show free and used counts for blocks and inodes
help [command] -- help for one or all commands
print -- list known mount points and projects
quit -- exit the program
quota [-bir] [-gpu] [-hnNv] [-f file] [id|name]... -- show usage and limits

Use 'help commandname' for extended help.

사용법을 확인해 보아도 별 내용이 없어 보인다. xfs_quota 명령은 일반 사용자도 사용할 수 있다. 기본적으로 쿼타 설정된 내용을 각 사용자가 확인하기 위해 사용하며, 설정을 하기 위해서는 -x 옵션을 사용하여 전문가 모드로 접근하여 설정한다. 일반 사용자도 -x 옵션을 사용할 수 있지만 대부분의 명령이 실행되지 않는다.

~] # xfs_quota -x
xfs_quota> help
df [-bir] [-hn] [-f file] -- show free and used counts for blocks and inodes
disable [-gpu] [-v] -- disable quota enforcement
dump [-gpu] [-f file] -- dump quota information for backup utilities
enable [-gpu] [-v] -- enable quota enforcement
help [command] -- help for one or all commands
limit [-gpu] bsoft|bhard|isoft|ihard|rtbsoft|rtbhard=N -d|id|name -- modify quota limits
off [-gpu] [-v] -- permanently switch quota off for a path
path [N] -- set current path, or show the list of paths
print -- list known mount points and projects
project [-c|-s|-C|-d <depth>|-p <path>] project ... -- check, setup or clear project quota trees
quit -- exit the program
quot [-bir] [-gpu] [-acv] [-f file] -- summarize filesystem ownership
quota [-bir] [-gpu] [-hnNv] [-f file] [id|name]... -- show usage and limits
remove [-gpu] [-v] -- remove quota extents from a filesystem
report [-bir] [-gpu] [-ahnt] [-f file] -- report filesystem quota information
restore [-gpu] [-f file] -- restore quota limits from a backup file
state [-gpu] [-a] [-v] [-f file] -- get overall quota state information
timer [-bir] [-gpu] value -d|id|name -- get/set quota enforcement timeouts
warn [-bir] [-gpu] value -d|id|name -- get/set enforcement warning counter

Use 'help commandname' for extended help.

전문가 모드에서는 설정할 수 있는 부분이 보인다. 

또는 다음과 같이 -c 옵션을 사용하여 비대화형 모드로 명령을 내릴 수 있다.

[root@localhost ~]# xfs_quota -x -c 'df' /data
Filesystem           1K-blocks       Used  Available  Use% Pathname
/dev/mapper/centos-data
                      31441920      32940   31408980    0% /data


다음과 같이 설정해 보자.



1. 사용자 쿼타 설정
먼저 설정할 파일시스템을 선택한다. path를 입력하여 파일시스템 리스트를 확인하고, path 아이디를 입력하여 파일시스템을 선택한다. 우리는 /data 파일 시스템을 선택하기 위해 path 001을 입력한다.

~] # xfs_quota -x
xfs_quota> path
      Filesystem          Pathname
[000] /                   /dev/mapper/centos-root
 001  /data               /dev/mapper/centos-data (uquota, pquota)
 002  /boot               /dev/vda1
xfs_quota> path 001
      Filesystem          Pathname
 000  /                   /dev/mapper/centos-root
[001] /data               /dev/mapper/centos-data (uquota, pquota)
 002  /boot               /dev/vda1
xfs_quota> limit -u bsoft=1g bhard=1126m isoft=1000 ihard=1100 doly

다음으로 limit 를 입력하여 각 항목에 대해 설정한다.
  -u : 사용자 쿼타 설정
  bsoft : 블록 soft 제한 용량 (단위는 k, m, g, t 사용가능, 정수만 가능)
  bhard : 블록 hard 제한 용량
  isoft : 아이노드 soft 제한
  ihard : 아이노드 hard 제한
  doly : 제한 할 사용자 

쿼타 설정을 하기위해서는 limit를 사용한다. 다음과 같이 help limit로 사용법을 확인할 수 있다.

~] # xfs_quota -x
xfs_quota> help limit
limit [-gpu] bsoft|bhard|isoft|ihard|rtbsoft|rtbhard=N -d|id|name -- modify quota limits

 modify quota limits for the specified user

 Example:
 'limit bsoft=100m bhard=110m tanya

 Changes the soft and/or hard block limits, inode limits and/or realtime
 block limits that are currently being used for the specified user, group,
 or project.  The filesystem identified by the current path is modified.
 -d -- set the default values, used the first time a file is created
 -g -- modify group quota limits
 -p -- modify project quota limits
 -u -- modify user quota limits
 The block limit values can be specified with a units suffix - accepted
 units are: k (kilobytes), m (megabytes), g (gigabytes), and t (terabytes).
 The user/group/project can be specified either by name or by number.

제한을 할 수 있는 항목은 블록, 아이노드, 실시간 블록 제한이 있다. 실시간 블록 제한(rtbsoft, rtbhard)는 CentOS 7에는 구현되지 않아 사용될 수 없다.

2. 설정내역을 확인

[root@localhost ~]# xfs_quota -x -c 'report -b' /data
User quota on /data (/dev/mapper/centos-data)
                               Blocks
User ID          Used       Soft       Hard    Warn/Grace
---------- --------------------------------------------------
root                0          0          0     00 [--------]
doly                0    1048576    1153024     00 [--------]

[root@localhost ~]# xfs_quota -x -c 'report -i' /data
User quota on /data (/dev/mapper/centos-data)
                               Inodes
User ID          Used       Soft       Hard    Warn/ Grace
---------- --------------------------------------------------
root                3          0          0     00 [--------]
doly                0       1000       1100     00 [--------]


report를 사용하여 블록 및 아이노드 사용량 제한설정을 확인할 수 있다.

10.6.1.3. 프로젝트 쿼타 설정
원하는 디렉토리를 묶어 특정 디렉토리 단위로 쿼타설정을 할 수 있는 프로젝트 쿼타를 설정해 보도록 하자. 


위와 같이 2개의 디렉토리를 proj1이라는 이름으로 프로젝트 쿼타 설정을 해보도록 하자.

1. /etc/projects 파일 생성
  /etc/projects 파일은 존재하지 않으며, 생성하여야 한다. 다음과 같이 프로젝트에 사용될 디렉토리를 작성작성한다.

1:/data/proj1
1:/data/proj2

숫자:디렉토리 형식으로 작성한다. 위 설정은 1이라는 프로젝트 ID에 2개의 디렉토리를 할당하는 것이다.

2. /etc/projid 파일 생성
  /etc/projid 파일은 존재하지 않으며, 생성하여야 한다. 다음과 같이 프로젝트에 ID와 이름을 매핑한다.

proj1:1

프로젝트이름:숫자 형식으로 작성한다. 위 설정은 프로젝트 ID 1의 이름을 proj1으로 할당하는 것이다.


3. 프로젝트 쿼타 설정

[root@localhost ~]# xfs_quota -x -c 'project -s proj1' /data
Setting up project proj1 (path /data/proj1)...
Setting up project proj1 (path /data/proj2)...
Processed 2 (/etc/projects and cmdline) paths for project proj1 with recursion depth infinite (-1).

앞에서 설정한 프로젝트 이름(proj1)으로 프로젝트를 생성하였다. 생성 과정에서 앞에서 등록한 디렉토리가 설정되는 것을 확인할 수 있다.

4. 프로젝트 제한 설정

[root@localhost ~]#  xfs_quota -x -c 'limit -p bsoft=1g bhard=1126m isoft=1000 ihard=1100 proj1' /data

사용자 쿼타와 비슷하게 쿼타 설정을 한다. 단, 프로젝트 쿼타는 -u 대신 -p 옵션을 사용하였고, 사용자 이름 대신 프로젝트 이름이 사용되었다.

5. 쿼타 설정 확인

[root@localhost ~]# xfs_quota -x -c 'report -p' /data
Project quota on /data (/dev/mapper/centos-data)
                               Blocks
Project ID       Used       Soft       Hard    Warn/Grace
---------- --------------------------------------------------
proj1               0    1048576    1153024     00 [--------]

[root@localhost ~]# xfs_quota -x -c 'report -p -i' /data
Project quota on /data (/dev/mapper/centos-data)
                               Inodes
Project ID       Used       Soft       Hard    Warn/ Grace
---------- --------------------------------------------------
proj1               2       1000       1100     00 [--------]

report를 사용하여 쿼타 설정 내역 및 사용 내역을 확인할 수 있다.

6. 프로젝트 쿼타 디렉토리 확인

[root@localhost ~]# xfs_quota -x -c 'path'
      Filesystem          Pathname
[000] /                   /dev/mapper/centos-root
 001  /data               /dev/mapper/centos-data (uquota, pquota)
 002  /boot               /dev/vda1
 003  /data/proj1         /dev/mapper/centos-data (project 1, proj1)
 004  /data/proj2         /dev/mapper/centos-data (project 1, proj1)

등록된 프로젝트의 디렉토리는 위와 같이 path 명령어로 쉽게 확인할 수 있다.

다음과 같은 방법으로 각 디렉토리 사용량을 확인할 수 있다.

[root@localhost proj1]# xfs_quota -x -c 'df' /data
Filesystem           1K-blocks       Used  Available  Use% Pathname
/dev/mapper/centos-data
                      31441920     557180   30884740    2% /data
/dev/mapper/centos-data
                       1048576     524224     524352   50% /data/proj1
/dev/mapper/centos-data
                       1048576     524224     524352   50% /data/proj2


 이상으로 27번째 강좌를 마무리 합니다. CentOS7에서 기반파일 시스템은 xfs이며, xfs의 경우 쿼타 설정방법이 약간 다르다. project 쿼타를 지원하여 보다 유연하게 디스크 공간을 관리할 수 있다.  리눅스 기초명령어들은 본 강좌에서 다루지 않겠습니다. CentOS 7의 다양한 기능에 대해서 중점적으로 다루겠습니다. 2015년 4월 14일(화) 열심히 뛰는 도리(Doly)였습니다.^^ 
 
#################################################
* 본 강좌는 언제든 갱신될 수 있으며, 원글은 www.linux.co.kr 강좌>리눅스>Doly의 연재강좌 에서 수정됩니다. 
* 본 강좌의 일부 또는 전체를 인용하실 경우, 반드시 출처를 밝혀 주시기 바랍니다.

* 수정이력 :
 2015.4.14(화): 최초작성


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1857


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
도리
도리(Doly)
(주)수퍼유저 기술이사 (CTO)
리눅스마스터 1급,2급 추천교재(2014년) 집필
리눅스마스터 1급,2급 전문위원(출제)(한국정보통신진흥협회, 2005년~)
SULinux 1.0, 1.5, 2.0, 2014 개발 총괄(sulinux.net, 1998년~)
SSU,LSCP,LSMP,CCMT외 다수 오픈소스 프로젝트 개발 및 운용 (lscp.sf.net외,2009년~)
리눅스 대량 시스템 구축 및 관리(5,000대리눅스 서버 구축 및 관리 경험, 2000년~)

E-Mail : doly골뺑이superuser.co.kr
소개 : 하루 하루 최선을 다합시다!!