###########
## quota ##
###########
- 쿼타를 사용하기 위해서는 커널이 인식하고 있어야 한다.
참고 :
https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=195&sca=1&sfl=wr_subject&stx=quota&sop=and
https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=860&sca=1&sfl=wr_subject&stx=quota&sop=and
https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=853&sca=1&sfl=wr_subject&stx=quota&sop=and
# df ; df -i
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 7103744 3055624 3681440 46% /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 1835008 103132 1731876 6% /
# su - user1
$ for i in $(seq 500)
> do
> touch ${i}.txt
> done
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 1835008 103633 1731375 6% /
--> df -i 명령어를 통해 디바이스에서의 inode 사용정보를 볼 수 있다. 바로 위에서는 일반 유저로
--> 쉘 스크립트를 이용하여 500개의 txt 파일을 만들었다. 그리고 난 후 쉘 스크립트 전 inode 값과 쉘 스크립트 후의 inode값을 비교해 보면
--> IUsed 부분에 + 500이 된걸 볼 수 있다.
o 제한 방법
사용자 제한 : 사용자 쿼타
그룹 제한 : 그룹 쿼타
관련 명령어들
/sbin/quotacheck : 쿼타를 체크한다.
/sbin/quotaoff : 쿼타를 off
/sbin/quotaon : 쿼타를 on
/usr/bin/quota : 일반유저가 자신의 용량을 확인
/usr/sbin/edquota : 사용자의 쿼타 설정
/usr/sbin/repquota : 사용자의 쿼타 출력
위에 명령어를 한번에 쓸 수도 있음
rpm -qlf `which quota` | grep bin
o 쿼타파일
- 일반적으로 만들때 속성이 걸려있다.
- 사용자쿼타 : quota.user -> aquota.user
- 그룹쿼타 : quota.group -> aquota.group
# lsattr /aquota.user
----i--A----- /aquota.user
# rpm -q quota
quota-3.13-5.el5
# rpm -ql quota
/etc/quotagrpadmins
/etc/quotatab
/etc/warnquota.conf
/sbin/quotacheck
/sbin/quotaoff
/sbin/quotaon
/usr/bin/quota
/usr/include/rpcsvc/rquota.h
/usr/include/rpcsvc/rquota.x
/usr/sbin/convertquota
/usr/sbin/edquota
/usr/sbin/quotastats
/usr/sbin/repquota
/usr/sbin/rpc.rquotad
/usr/sbin/setquota
/usr/sbin/warnquota
/usr/share/locale/fr/LC_MESSAGES/quota.mo
/usr/share/locale/pl/LC_MESSAGES/quota.mo
/usr/share/man/man1/quota.1.gz
/usr/share/man/man2/quotactl.2.gz
/usr/share/man/man3/rquota.3.gz
/usr/share/man/man8/convertquota.8.gz
/usr/share/man/man8/edquota.8.gz
/usr/share/man/man8/quotacheck.8.gz
/usr/share/man/man8/quotaoff.8.gz
/usr/share/man/man8/quotaon.8.gz
/usr/share/man/man8/quotastats.8.gz
/usr/share/man/man8/repquota.8.gz
/usr/share/man/man8/rpc.rquotad.8.gz
/usr/share/man/man8/rquotad.8.gz
/usr/share/man/man8/setquota.8.gz
/usr/share/man/man8/warnquota.8.gz
-- 순서 --
- user quota 설정
1. /etc/fstab 에 쿼타설정 (vi /etc/fstab)
2. 쿼타인식 (remount or reboot)
3. 쿼타파일 생성 ( install aquota.user )
4. 쿼타체크 (quotacheck )
5. 쿼타시작 (quotaon)
6. 사용자 설정 (edquota)
7. 사용자 확인 (repquota)
1. /etc/fstab 에 쿼타설정 (vi /etc/fstab)
- usrquota 를 추가한다.
# vi /etc/fstab
-- /etc/fstab --
LABEL=/ / ext3 defaults,usrquota 1 1
-- /etc/fstab --
보통 일반 유저 사용 제한을 위한것이기 때문에 설치할때 /home 디렉터리를 파티션을 나눠서 /home 디렉터리의 마운트 옵션 부분에 usrquota를 추가해준다. 하지만 여기선 파티션을 따로 나누지 않았기 때문에 루트디렉터리(/)의 마운트 옵션 부분에 usrquota를 추가했다.
2. 쿼타인식 (mount or reboot)
# mount -o remount /
# mount
/dev/sda1 on / type ext3 (rw,usrquota)
:
:
3. 쿼타파일 생성 ( install aquota.user )
# install -m 600 /dev/null /aquota.user
# ls -l /aquota.user
-rw------- 1 root root 0 Apr 16 13:53 /aquota.user
4. 쿼타체크 (quotacheck )
# quotacheck -avum
# ls -l /aquota.user
-rw------- 1 root root 11264 Apr 16 13:55 /aquota.user
--> 용량이 변했다.
5. 쿼타시작 (quotaon)
# quotaon -avu
/dev/sda1 [/]: user quotas turned on
--> 이때 마운트 지점에 만든 aquota.user의 속성(Attribution)이 생긴다.
확장 파일 시스템의 파일 속성 변경에 대한 참조 자료는 여기에 가보자.
http://devanix.tistory.com/233
6. 사용자 설정 (edquota)
- 사용자 용량 (soft : 100M, hard : 200M)
- 파일 개수 (soft : 100, hard : 200)
# useradd user1
# useradd user2
# useradd user3
# useradd user4
# useradd user5
이제 일반 유저들에게 사용 제한을 해보자.
# edquota user1
Disk quotas for user user1 (uid 5007):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 156 100000 200000 20 100 200
위에 메뉴 설명하고 위치를 맞추진 않아도 된다. 그냥 순서만 맞게 쓰자
- 쿼타설정 복사 (edquota -p)
# edquota -p user1 user2
# edquota -p user1 user3
# edquota -p user1 user4
# edquota -p user1 user5
7. 사용자 확인 (repquota)
# repquota -a | grep ^user
user2 -- 136 100000 200000 18 100 200
user3 -- 116 100000 200000 15 100 200
user1 -- 156 100000 200000 20 100 200
user4 -- 44 100000 200000 6 100 200
user5 -- 44 100000 200000 6 100 200
--> grep ^user 의 의미는 user로 시작하는걸 뜻한다.
8. 테스트
# su - user1
user1$ dd if=/dev/zero of=dump.dd bs=1024 count=100000
# repquota -a | grep user1
user1 +- 100264 100000 200000 6days 21 100 2
~~~~~~~ ~~~~~~ ~~~~~
- soft 를 넘어가도 파일을 생성할 수 있다.
# su - user1
$ dd if=/dev/zero of=a.dd bs=1024 count=10000
$ dd if=/dev/zero of=b.dd bs=1024 count=10000
$ ls -l
total 120156
-rw-rw-r-- 1 user1 user1 10240000 4월 17 10:40 a.dd
-rw-rw-r-- 1 user1 user1 10240000 4월 17 10:40 b.dd
-rw-rw-r-- 1 user1 user1 102400000 4월 17 10:38 dump.dd
$ exit
# date 042510002014
Fri Apr 25 10:00:00 KST 2014
# repquota -a | grep ^user1
user1 +- 120304 100000 200000 none 23 100 200
~~~~
--> 아까 soft가 넘어서 repquota -a 로 6day라고 써있는 걸 볼수 있었다. 그럼 10일 뒤로 날짜를 변경하고 repquota -a 명령어로 다시 확인해보자.
- soft 용량이 넘어가고 grace 이 지났을 경우는 파일이
생성이 안된다.
- hard 용량이 넘어가면 grace 하고 상관없이 파일이 생성이 안된다.
$ dd if=/dev/zero of=f.dd bs=1024 count=10000
dd: opening `f.dd': Disk quota exceeded <--
- 파일 개수 테스트
repquota -a | grep user2
su - user2
$ for i in $(seq 200)
> do
> touch ${i}.txt
> done
touch: cannot touch `182.txt': Disk quota exceeded
touch: cannot touch `183.txt': Disk quota exceeded
touch: cannot touch `184.txt': Disk quota exceeded
touch: cannot touch `185.txt': Disk quota exceeded
touch: cannot touch `186.txt': Disk quota exceeded
touch: cannot touch `187.txt': Disk quota exceeded
touch: cannot touch `188.txt': Disk quota exceeded
:
:
--> inode 값이 soft 100 hard 200으로 설정되어있고 현재 inode 를 9개 사용하고 있다.
--> 200개의 i.txt를 만드는 쉘 스크립트를 실행하면 1~191.txt 만들어지고 192.txt부터는
--> inode hard 제한값인 200을 넘어가서 더 이상 만들 수 없게 된다. 에러 메시지 보면 9개일 것이다.
- 일반유저가 자신의 사용량을 확인하는 명령어
$ quota
Disk quotas for user user1 (uid 5007):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda1 872 100000 200000 200* 100 200 6days
============================================================
LAB> 아래 조건에 맞게 사용자 쿼타를 설정하시오.
--> 해보길..
절약형 : 400M
일반형 : 800M
고급형 : 1.2G
user100 : 절약형
user200 : 절약형
user300 : 절약형
user400 : 일반형
user500 : 일반형
user600 : 일반형
user700 : 고급형
user800 : 고급형
user900 : 고급형
-- 순서 --
1. 서비스에 대한 사용자를 등록/쿼타 설정
2. 각 사용자를 생성
3. 그 사용자의 용량에 맞게 edquota 로 복사
1. 서비스에 대한 사용자를 등록/쿼타 설정
************************************************
-- 쿼타정보 --
user400m : block soft: 400000 hard: 410000
inode soft: 5000 hard: 5100
user800m : block soft: 800000 hard: 810000
inode soft: 5000 hard: 5100
user1200m : block soft: 1200000 hard: 1210000
inode soft: 5000 hard: 5100
************************************************
# useradd user400m
# useradd user800m
# useradd user1200m
# edquota user400m
# edquota user800m
# edquota user1200m
2. 각 사용자를 생성
# useradd user100
# useradd user200
# useradd user300
# useradd user400
# useradd user500
# useradd user600
# useradd user700
# useradd user800
# useradd user900
3. 그 사용자의 용량에 맞게 edquota 로 복사
# edquota -p user400m user100
# edquota -p user400m user200
# edquota -p user400m user300
# edquota -p user800m user400
# edquota -p user800m user500
# edquota -p user800m user600
# edquota -p user1200m user700
# edquota -p user1200m user800
# edquota -p user1200m user900
=========================================================
=========================================================
LAB> 위의 2,3의 조건에 맞게 쉘스크립트로 짜보시오.
------------------------------------------------------
--> 쉘 스크립트는 아래 있다. 해보자.
- 쿼타 자동생성 스크립트명 : useradd.sh
- 스크립트의 인자 : <사용자명> <용량>
- 쉘스크립트에 필요한 제어문 : if , case
- 쉘스크립트에 필요한 변수들
$# : 인자의 개수
$0 : 명령어
$1 : 사용자명
$2 : 용량
- 명령어 : useradd, passwd(생략), edquota, exit
- `.
------------------------------------------------------
ex)
# useradd.sh
Usage : useradd.sh <사용자명> <용량>
- user100 을 400m 쿼타 용량으로 할당
# useradd.sh user100 400m
- user500 을 800m 쿼타 용량으로 할당
# usreadd.sh user500 800m
- 프로그램 작성 -
# cd ~/bin
# install /dev/null useradd.sh
# vi useradd.sh
-- useradd.sh --
#!/bin/sh
argc=$#
username=$1
userquota=$2
if [ $argc -ne 2 ]; then
echo "Usage : `basename $0` <username> <quota>"
exit 1
fi
useradd $username
case $userquota in
"400m" ) edquota -p user400m $username ;;
"800m" ) edquota -p user800m $username ;;
"1200m" ) edquota -p user1200m $username ;;
esac
-- useradd.sh --
-- 실행 --
# ./useradd.sh
Usage : useradd.sh <username> <quota>
400m, 800m, 1200m 유저를 만들어서 Sample로 제작해 논 상태로 해야한다.
# ./useradd.sh user100 400m
# ./useradd.sh user200 400m
# ./useradd.sh user300 400m
# ./useradd.sh user400 800m
# ./useradd.sh user500 800m
# ./useradd.sh user600 800m
# ./useradd.sh user700 1200m
# ./useradd.sh user800 1200m
# ./useradd.sh user900 1200m
# repquota -a
user100 -- 44 400000 410000 6 5000 5100
user200 -- 44 400000 410000 6 5000 5100
user300 -- 44 400000 410000 6 5000 5100
user400 -- 44 800000 810000 6 5000 5100
user500 -- 44 800000 810000 6 5000 5100
user600 -- 44 800000 810000 6 5000 5100
user700 -- 44 1200000 1210000 6 5000 5100
user800 -- 44 1200000 1210000 6 5000 5100
user900 -- 44 1200000 1210000 6 5000 5100
============================================================
- 추천 사이트 -
http://www.sir.co.kr <-- 그누보드 무료
http://phpschool.com
http://www.xpressengine.com <-- 제로보드 XE 무료
- grub이 지워졌을 경우 복구모드로 들어가는 방법
1. 1번 DVD 삽입
2. boot : linux rescue
3. rescue continue
4. chroot /mnt/sysimage
5. grub-install /dev/sda