본문으로 바로가기

시스템관리-Disk Quota와 스케줄링

category Linux 2019. 1. 30. 23:16

시스템관리-Disk Quota와 스케줄링

1. Disk Quota
(1) 설명: 사용자들의 계정 용량을 제한할 경우에 사용한다. 그룹단위로도 용량을 제한할 수 있으며
          웹호스팅 서비스를 하는 경우에 유용하다. 보통 블록단위의 용량제한과 inode의 갯수를 제
          한한다.
(2) 관련명령어
   1) quotacheck
     ㄱ. 설명: 디스크를 사용하고 있는 파일 시스템을 체크하여 quota기록파일(quota.user 또는 
              quota.group)을  가장 최근의 상태로 업데이트 시키는 명령이다.
     ㄴ. 사용법
        quotacheck [option] 디렉토리명
     ㄷ. option
        -a : 모든 그룹과 사용자에 대한 quota를 체크한다.
        -m : 읽기 전용 모드 등의 이유로 마운트를 하지 못할 경우 강제로 체크할 때 사용한다.
        -f : 쿼터파일 초기생성시 잘 인식하지 못하는 경우 강제로 인식시킬 때 사용한다.
     ㄹ. 사용예
       a. [root@www /root]# quotacheck /home
           => 주의할점은 이 명령을 수행할 경우에는 파일의 손상의 위험이 있으므로 quotaoff상태
             에서 해야한다.
       b [root@www /root]# quotacheck -m /home
           => 강제로 /home을 체크한다.
   2) edquota
     ㄱ. 설명: 사용자에게 쿼타를 할당할때 사용한다.
     ㄴ. 사용법
        edquota [option]
     ㄷ. option
        -t : soft limit를 초과한 후부터 적용되는 시간제한을 설정하는 옵션이다.
        -p : quota를 다른 사용자에게도 동일한 설정으로 적용한다.
        -g : 그룹의 quota를 설정한다. 
     ㄹ. 사용예
        a. [root@www /root]# edquota posein
            => posein이라는 사용자의 쿼터를 할당한다. 그러면 기본편집기(vi)가 실행되면서 
              다음과 같이 나온다.
            Disk quotas for user posein (uid 500):
              Filesystem            blocks       soft       hard     inodes     soft     hard
              /dev/hda8             259556          0          0        248        0        0
             => (설명) 
               Filesystem : Quota가 설정되어 있는 파티션을 나타낸다.
               Blocks : 현재 사용중인 용량을 나타낸다. 
               soft : 보통의 경우에는 사용할 수 있는 최대 용량을 나타낸다. 유예기간(grace 
                     period)이 설정되어 있는 경우에는 사용용량 초과에 대한 경고를 받는 경계선
                     으로 사용된다.
               hard : 유예기간이 설정되어 있는 경우에 작동하는 것으로 사용자가 사용할 수 있는
                     최대 용량을 의미한다.
               inodes : 현재 사용중인 inode를 나타낸다.
        b. [root@www /home]# edquota -t
             => 실행시키면 vi편집기가 실행되면서 다음과 같이 나타난다. 여기서 날짜를 변경하면
              된다.
              Grace period before enforcing soft limits for users:
              Time units may be: days, hours, minutes, or seconds
                Filesystem             Block grace period     Inode grace period
                /dev/hda8                     7days                  7days
                 => (설명)
                   Filesystme : Quota가 설정된 파일시스템을 나타낸다.
                   Block grace period : Block의 soft제한을 초과했을 경우의 유예기간이다.
                   Inode grace period : Inode의 soft제한을 초과했을 경우의 유예기간이다.
        c. [root@www /home]# edquota -p posein prehee
             => prehee이라는 사용자의 설정을 posein의 설정과 동일하게 만든다.
   3) quotaon
     ㄱ. 설명: quota를 시작하기 위해 실행하는 명령이다.
     ㄴ. 사용법
        quotaon 디렉토리명
     ㄷ. 사용예
        [root@www /root]# quotaon /home
   4) quotooff
     ㄱ. 설명: quota를 종료시킨다.
     ㄴ. 사용법 
        quota 디렉토리명
     ㄷ. 사용예
        [root@www /root]# quotaoff /home
   5) repquota
     ㄱ. 설명: quota의 설정 상황을 보여준다.
     ㄴ. 사용법
        repquota [option] 디렉토리명
     ㄷ. option
        -a : quota설정이 되어 있는 모든 파티션의 quota상태를 보여준다. 이 옵션을 사용하면 디렉
            토리명을 지정할 필요는 없다.
        -g : 그룹에 대한 quota상태를 보여준다.
        -u : 사용자에 대한 quota상태를 보여준다.(기본값으로 설정되어 있음)
        -v : 모든 quota상태를 보여준다.
     ㄹ. 사용예
        a. [root@www /home]# repquota /home
           *** Report for user quotas on device /dev/hda6 (/home)
           Block grace time: 7 days; Inode grace time: 7 days
                                   Block limits                File limits
           User            used    soft    hard  grace    used  soft  hard  grace
           ----------------------------------------------------------------------
           root      --   19372       0       0            231     0     0
           nobody    --      28       0       0              6     0     0
           posein    --   11608   50000   55000            398     0     0
        b. [root@www /home]# repquota -g /home
            => 그룹단위로 쿼타상태를 보여준다.
   6) quota
     ㄱ. 설명: 자신의 쿼타 용량 상태를 보여준다.
     ㄴ. 사용법
        quota
     ㄷ. 사용예
        [posein@www posein]$ quota
        Disk quotas for user posein(500):
             Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
              /dev/hda6   11608   50000  55000             398       0      0
   7) convertquota 
     ㄱ.설명: 쿼타설정과 관련된 quota.user, quota.group을 새로운 형태의 aquota.user, aquota.g
             roup파일 포맷으로 변경해준다. 레드햇 리눅스 2.4이상의 파일시스템에서 적용된다. 새
             로운 파일 포맷은 32bit uids/gids를 지원하며, root권한으로 quota를 설정해야 하며, 
             bytes단위로 사용공간을 체크한다.
     ㄴ. 사용법
         convertquota [option] 디렉토리명
     ㄷ. options
       a. -u : 사용자 쿼타파일(quota.user)을 바꾼다. 기본값이다.
       b. -g : 그룹의 쿼타파일(quota.group)을 바꾼다.
     ㄹ. 사용예
       a. [root@www /]# convertquota /home
            => 사용자 쿼타파일인 qutoa.user를 aquota.user 파일로 전환한다.
       b. [root@www /]# convertquota -g /home
            => 그룹 쿼타파일인 qutoa.group를 aquota.group파일로 전환한다.
(3) 설정하기
   1) /etc/fstab 설정
     ㄱ. 설명: 만약 설정하려는 파티션이 /home이라면 보통 다음과 같이 설정되어 있다.
              /dev/hda6               /home                 ext2    defaults        1 2
              여기서 네번째필드에 usrquota라고 설정한다.
     ㄴ. 예
        /dev/hda6               /home                 ext2    defaults,usrquota   1 2
     ㄷ. 참고: /etc/fstab파일을 변경했을 경우에는 시스템을 재부팅하거나 다시 마운트해야 한다.
              mount -o remount /home
   2) quota.user 파일 생성
     ㄱ. 설명: 사용자의 쿼타정보를 가지고 있는 파일이 quota.user인데 이 파일을 생성해야 한다.
              보통 설치하고자 하는 파티션의 최상위에 만든다.
     ㄴ. 예
        [root@www /root]# touch /home/quota.user
        [root@www /root]# chmod 600 /home/quota.user
          => /home에 쿼터를 설정하려면 /home디렉토리에 만들며, root권한자만이 읽고 쓰기가 
            가능하도록 설정한다.
   3) quotacheck 디렉토리 
     ㄱ. 설명: 설정된 값을 읽어들여서 반영한다.
     ㄴ. 예
        [root@www /root]# quotacheck -mf /home
   4) convertquota 명령으로 aquota.user로 변환하기
     ㄱ. 설명: 예전에 사용하던 quota.user파일을 최신의 aquota.user파일로 convert해야 한다.
              convertquota명령은 커널 2.4이상의 시스템에서 적용된다.
     ㄴ. 예
        [root@www home]# convertquota -u /home
   5) 사용자에 대한 쿼터설정
     ㄱ. 설명: 제한하려는 용량을 설정한다. 옆에 나온 단위를 참조하여 값만 입력한다.
     ㄴ. 예
        [root@www /root]# edquota posein
   6) quota를 시작한다.
     [root@www /root]# quotaon /home
(4) 테스트
   1) 쿼터확인
     [root@www home]# repquota /home
     *** Report for user quotas on device /dev/hda8
     Block grace time: 7days; Inode grace time: 7days
                             Block limits                File limits
     User            used    soft    hard  grace    used  soft  hard  grace
     ----------------------------------------------------------------------
     root      --      96       0       0              8     0     0
     nobody    --      32       0       0             10     0     0
     prehee    --      64    2000    3000             15     0     0
       => soft제한이 2M정도임을 알 수 있다. 
   2) 용량을 초과한뒤의 쿼타확인
     [root@www home]# repquota  -a
     *** Report for user quotas on device /dev/hda8
     Block grace time: 7days; Inode grace time: 7days
                             Block limits                File limits
     User            used    soft    hard  grace    used  soft  hard  grace
     ----------------------------------------------------------------------
     root      --     112       0       0              9     0     0
     nobody    --      32       0       0             10     0     0
     prehee    +-    2916    2000    3000  6days      16     0     0
      => 앞쪽에 -- => +- 기호로 바뀌었다. 즉 Block limits의 soft한도가 넘었다는 뜻이다. grace
        에 6days라는 값이 표기되었다는 것은 6일동안은 soft한도를 넘어 사용을 해도 사용가능하다
        는 뜻이다. 하지만 6일 이후에는 soft한도내로 용량을 줄여야지만 새로운 데이터를 올릴 수 
        있게 된다. 그러나 절대로 hard 한도는 넘을 수 없다. 이 한도를 넘게 되면 데이터를 저장할
        수 없다는 메시지가 출력된다. 
(5) 그룹쿼타 설정하기
   1) /etc/fstab 설정
     ㄱ. 설명: 만약 설정하려는 파티션이 /home이라면 보통 다음과 같이 설정되어 있다.
              /dev/hda6               /home                 ext3    defaults        1 2
              여기서 네번째필드에 grpquota라고 설정한다.
     ㄴ. 예
        /dev/hda6               /home                 ext3    defaults,grpquota   1 2
     ㄷ. 참고: /etc/fstab파일을 변경했을 경우에는 시스템을 재부팅하거나 다시 마운트해야 한다.
              mount -o remount /home
   2) quota.group 파일 생성
     ㄱ. 설명: 그룹의 쿼타정보를 가지고 있는 파일이 quota.group인데 이 파일을 생성해야 한다.
              보통 설치하고자 하는 파티션의 최상위에 만든다.
     ㄴ. 예
        [root@www /root]# touch /home/quota.group
        [root@www /root]# chmod 600 /home/quota.group
          => /home에 쿼터를 설정하려면 /home디렉토리에 만들며, root권한자만이 읽고 쓰기가 
            가능하도록 설정한다.
   3) quotacheck 디렉토리 
     ㄱ. 설명: 설정된 값을 읽어들여서 반영한다.
     ㄴ. 예
        [root@www /root]# quotacheck -g -m /home
   4) convertquota 명령으로 aquota.group로 변환하기
     ㄱ. 설명: 예전에 사용하던 quota.group파일을 최신의 aquota.group파일로 convert해야 한다.
              convertquota명령은 커널 2.4이상의 시스템에서 적용된다.
     ㄴ. 예
        [root@www home]# convertquota -g /home
   5) 사용자에 대한 쿼터설정
     ㄱ. 설명: 제한하려는 용량을 설정한다. 옆에 나온 단위를 참조하여 값만 입력한다.
     ㄴ. 예
        [root@www /root]# edquota -g terran
   6) quota를 시작한다.
     [root@www /root]# quotaon /home
   7) quota의 확인
     [root@www /]# repquota -g /home


2. 스케줄링
(1) 개요: 스케줄링이란 특정한 시간에 특정한 작업을 행하게 하는 것이다. 보통 리눅스에는 cron
          과 at를 이용한다. 
(2) at 
   1) 설명: 지정한 시간에 원하는 명령을 실행될 수 있도록 해준다. atd데몬에 의하여 실행되고,
           지정한 작업은 큐(queue)에 저장되며 저장된 작업들은 /var/spool/at 디렉토리 아래 
           파일로 저정된다. 보통 한번 실행되는 경우에 사용된다. 명령은 기본적으로 표준 입력 
           장치를 통해받으며, 입력의 종료는 ctrl+d를 누른다.
   2) 사용법
     at [opion] 시간
   3) option
     -q queue : 작업의 대기 큐를 지정한다. 사용할 수 있는 큐는 a-z, A-Z까지이다. 지정하지 
               않으면 기본큐로 a를 사용한다.
     -c job : 작업 리스트를 출력한다.
     -d : 작업을 삭제한다. (atrm과 같음)
     -l : 큐에 있는 작업들을 보여준다. root인 경우에는 모든 작업들의 목록을 보여준다.
         (atq와 같음)
     -m : 실행한 결과를 메일로 통보해 준다.
     시간 : 실행할 시간을 기록한다. 시간지정은 HHMM,HH:MM형태로 가능하고 am,pm으로 구분가능
           하다. 날짜의 경우는 MMDDYY, MM/DD/YY, MM.DD.YY형태로 나타낸다. 또한 now, tomorrow,
           noon같은 문자열도 사용가능하다.
     -f 파일명 : 표준입력이 아닌 지시된 파일에서 작업을 읽어온다.
   4) 사용예
     ㄱ. [posein@www posein]$ at 1:40am tomorrow
         warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
         at> ls -al > list.txt
         at>                                       // 중단하려면 여기에서 ctrl+d키를 누른다.
         job 3 at 2002-06-13 01:40
     ㄴ. [posein@www posein]$ at -l
         4       2002-06-12 01:48 a posein
           => 현재 예약된 작업의 리스트를 보여준다.
     ㄷ. [posein@www posein]$ at 7:00pm March 20
           => 3월20일 오후 7시에 작업을 예약한다
     ㄹ. [posein@www posein]$ at now+3hours
          => 3시간 후에 작업을 예약한다.
     ㅁ. [posein@www posein]$ at now + 5 minutes
          => 5분 뒤에 작업을 예약한다.
     ㅂ. [posein@www posein]$ at midnight + 10 minutes
          => 자정에서 10분뒤 즉, 00:10의 작업을 예약한다.
   5) 관련명령어
     ㄱ. atq 
        a. 설명: 큐에 저장된 작업들을 보여주는 명령으로 at -l 실행결과와 같다. 작업번호와 
                작업이 실행된 예정 시간, 작업이 저장되어 있는 큐를 보여준다.
        b. 사용법
          atq
        c. 사용예
          [posein@www posein]$ atq
          3       2002-06-12 01:40 a posein
     ㄴ. atrm
        a. 설명: 예약된 작업을 취소할 때 사용하는 명령으로 큐에서 해당 작업을 삭제한다. at -d
                를 사용하는 것과 같다.
        b. 사용법
          atrm 작업번호
        c. 사용예
          [posein@www posein]$ atrm 4
   6) at 사용자제한
     ㄱ. 설명: at데몬을 사용할 수 있는 사용자를 제한할 수 있다. /etc/at.allow파일과 
              /etc/at.deny파일을 이용한다. /etc/at.allow파일에 등록하면 등록된 사용자만이
              사용가능하다. /etc/at.allow파일이 있다면 이 파일에 명단이 있는 사용자만이 
              at명령을 사용할 수 있다. 이 파일이 없으면 /etc/at.deny파일을 찾는다. /etc/at.
              deny파일에 목록이 있는 사용자는 at를 사용할 수 없다. 두 파일 모두 찾지 못하면
              오로지 슈퍼 유저만이 사용가능하다. 또한 /etc/at.deny파일이 비어있으면 모든 
              사용자가 at명령을 사용할 수 있다.
     ㄴ. 설정: 한 줄에 한 계정만 적는다.
        [root@www /root]# cat /etc/at.allow
        posein
        prehee
(3) cron
   1) 설명: 같은 작업을 주기적으로 반복할 수 있도록 해준다. 보통 /etc/rc.d/init.d/crond에 
           의해 실행된다. 설정은 /usr/bin/crontab명령어를 사용한다.
   2) 관련명령어 및 파일
     ㄱ. crontab
        a. 설명: cron작업을 설정하는 명령어이다. 실행시키면 기본편집기인 vi가 실행된다.
        b. 사용법
          crontab [option] [파일명]
        c. option
          -l : 현재 crontab에 의해 설정된 내용을 출력한다.
          -e : crontab의 내용을 작성하거나 수정한다.
          -r : crontab의 내용을 삭제한다.
          -u : root권한자가 해당사용자의 crontab파일을 다룰때 사용한다.
        d. 사용예
          1. [root@www /root]# crontab -l
              no crontab for root
               => 작업의 목록을 보여준다.
          2. [posein@www posein]$ crontab -r
               => 등록된 작업을 삭제한다.
          3. [root@www /root]# crontab -e -u posein
              => posein이라는 사용자의 crontab을 작성하거나 수정한다.
          4. [posein@www posein]$ crontab aaa
              => aaa라는 파일을 crontab으로 사용한다. 이 경우에는 미리 aaa파일을 crontab의 
                형식에 맞게 입력해놔야 한다.
        e. crontab의 작업형식 : 5개의 날짜 필드와 1개의 명령필드로 구성되어 있다. 
          MM HH DD mm d command
          (설명)
            MM : 분(Minute)을 의미한다.(0~59까지 사용)
            HH : 시(Hour)를 의미한다.(0~23까지 사용)
            DD : 날짜(Day of Month)를 의미한다.(1~31까지 사용)
            mm : 달(Month)을 의미한다.(1~12까지 사용)
            d  : 요일(Day of Week)을 의미한다.(0~7까지 사용, 0과 7은 일요일을 나타냄)
            command : 실행할 작업을 명기한다.
          (참고)
            위 형식에서 시간을 나타내는 각 필드에서 와일드 카드 '*'를 사용할 수 있고 각각의 
           요일을 구분할 때','를 사용하고, 연일을 나타낼 때는 '-'를 사용한다. 즉 월요일과 
           수요일은 '1,3'으로 월요일부터 금요일까지는 '1-5'로 표시할 수 있다.
     ㄴ. /etc/crontab 
        a. 설명: 시스템이 정기적인 작업이 수행될 수 있도록 기본적으로 설정되어 있는 파일이다.
        b. 설정예
          [root@www /etc]# cat /etc/crontab
          SHELL=/bin/bash
          PATH=/sbin:/bin:/usr/sbin:/usr/bin
          MAILTO=root
          HOME=/

          # run-parts
          01 * * * * root run-parts /etc/cron.hourly
          02 4 * * * root run-parts /etc/cron.daily
          22 4 * * 0 root run-parts /etc/cron.weekly
          42 4 1 * * root run-parts /etc/cron.monthly

          0-59/5 * * * * root /usr/bin/mrtg.sh /usr/lib/mrtg/mrtg.cfg
           => run-parts는 디렉토리 이하의 스크립트를 순차적으로 실행하는 명령어이다.
     ㄷ. /etc/cron.allow : at과 마찬가지로 사용자를 제한할 때 사용한다.
     ㄹ. /var/spool/cron 디렉토리 : 각각의 사용자가 등록한 crontab은 이 디렉토리아래에 각 
                                   사용자의 계정이름으로 저장된다.
   3) 설정하기
     ㄱ. crontab -e 명령을 내린다.
     ㄴ. 해당형식에 맞게 입력한다.
        예) 0 12 * * 1-5 /home/posein/aaa
           => 월요일부터 금요일까지 /home/posein/aaa라는 스크립트를 실행시킨다.
     ㄷ. 설정예
        1) 0 12 1 1-12/2 * /home/posein/bbb
            => 1월부터 12월까지 2개월마다 /home/posein/bbb라는 스크립트를 실행시킨다.
        2) 0 10 * * 1 cat /root/notice | mail -s "Notice" 
posein@mybestone.com
            => 월요일 오전 10시에 notice라는 문서의 내용을 메일로 발송한다.