본문 바로가기

OS/Linux

파일 시스템이 Full 되었을 경우의 조치 방법

mount filesystem 확인 후 du로 싸이즈가 가장 큰 순서대로 찾고.
du -sk ./*
 
 
IBM 기술정보 > root 디렉토리(/) 및 /var 파일 시스템 관리
root 디렉토리(/) 및 /var 파일 시스템 관리

파일 시스템 공간이 100%에 가깝게 꽉 차게 되면 성능이 저하될 뿐만 아니라, 루트(/)나 /var 파일 시스템이 꽉 차는 경우에는 시스템이 부팅이 안되거나 CDE 로그인이 안되거나, 혹은 vi 명령 및 큐잉 시스템이 작동이 되지 않는 등 여러 가지 문제가 발생할 수 있다. 따라서 평소에 df -k 명령으로 파일 시스템 사용율을 점검하고 적절한 조치를 취해야 한다. 여기에서는 / 및 /var 파일 시스템의 파일 공간 관리에 대해 소개하고자 한다.

 root (/)가 Full 인 경우    /var가 Full인 경우    기타 파일 시스템 또는 일반 탐색 기법

root (/)가 Full 인 경우

1. /etc/security/failedlogin 파일을 점검한다.

다음과 같이 who 명령을 사용하여 이 파일의 내용을 읽을 수 있다.
# who /etc/security/failedlogin

tty의 respawning too rapidly 조건이 failed login 입력항목을 만들어 내는 경우가 종종 발생한다. 해당 경우에는 다음의 명령으로 파일의 내용을 비운다.
# cp /dev/null /etc/security/failedlogin

2. /dev 디렉토리를 점검한다.

가령, "rmt0" 대신 "rmto"를 쓰는 것과 같이 디바이스명을 잘못 타이핑하면, "rmto"라는 파일이 /dev에 생성된다. 보통은 전체 루트 파일 시스템이 꽉 찰 때까지 실패하지 않고 명령이 계속 진행된다. (/dev는 / 파일 시스템의 일부분임). 디바이스가 아닌(즉, major 또는 minor 번호가 없음) 입력항목이 있는지 찾아본다.

일반 파일의 파일 크기는 보통 눈에 보이는 반면, 디바이스 파일은 다음과 같이 콤마로 분리된 두 개의 번호(즉, major 번호와 minor 번호)를 가지고 있다.
crw-rw-rw- 1 root system 12, 0 Oct 25 10:19 rmt0

앞에서 언급한 바와 같이 다음과 같이 나타나는 파일은 제거해야 한다.
crw-rw-rw- 1 root system 9375473 Oct 25 10:19 rmto

주: 시스템 감사(auditing)가 실행중이라면, /audit 디렉토리(디폴트)가 금방 꽉 차게 될 수 있으니 주의한다.

3. 크기가 아주 큰 파일들이 있는지 점검한다.

find 명령으로 크키가 큰 파일들을 찾을 수 있다. 예를 들어, / 디렉토리 내에서 1 MB를 넘는 파일들을 모두 찾으려면, 다음 명령을 수행한다.
# find / -xdev -size +2048 -ls |sort -r +6

이 명령은 1 MB를 넘는 모든 파일을 찾아 가장 큰 파일을 맨 먼저 나열하면서 역순으로 정렬한다.

주:루트 디렉토리 점검 시, "실제" 파일 여기저기에 파일 크기 대신 major 및 minor 번호를 가지는 /dev 디렉토리로부터의 입력항목이 있을 것이며 이들은 무시될 수 있습니다.
-newer 플래그와 같은 다른 유용한 find 명령 플래그가 도움이 될 수도 있습니다.

주:어떤 파일이든 제거에 앞서, 파일이 현재 활동중인 사용자 프로세스에 의해 사용 중에 있는지 확인한다. 파일이 사용자 프로세스에 의해 현재 사용중인지 확인하기 위해서는 다음 명령을 실행한다.
# fuser < filename >
여기서 < filename >은 제거하고자 하는 파일 이름이다.

파일이 제거시 "open" 상태인 경우에는, 디렉토리 리스팅으로부터만 제거됩니다. 즉 파일에 할당된 블록은 파일을 열고 있는 프로세스가 kill되고 나서야만 비워진다.



/var가 Full인 경우

1. /var/tmp에서, 오랫동안 사용되지 않은 파일들이 있는지 살펴본다.

/var/adm/wtmp 파일은 모든 "logins", "rlogins" 및 "tn" 세션을 로깅하는 데 사용된다. 파일은 수시로 점검하지 않으면, 시스템 accounting을 수행하고 있지 않는 한 끊임없이 커지게 된다. 만약 시스템 accounting을 사용한다면 정해진 시간에 이 파일의 내용이 비워진다. /var/adm/wtmp 파일을 아예 지우거나, 혹은 이 파일에서 오래되고 원하지 않는 정보를 제거하도록 편집할 수 있다.
다음의 명령으로 /var/adm/wtmp를 비울 수 있다.
# cp /dev/null /var/adm/wtmp

다음의 명령으로 파일을 편집하여 원하지 않는 입력항목을 제거할 수 있다.
# /usr/sbin/acct/fwtmp < /var/adm/wtmp >/tmp/out

/tmp/out 파일을 편집하여 원하지 않는 입력항목을 제거한 후 다음 명령으로 편집된 버전을 다시 wtmp에 넣는다.
# /usr/sbin/acct/fwtmp -ic < /tmp/out > /var/adm/wtmp

2. /var/adm/ras 디렉토리에서 오류 로그를 비운다.

이 디렉토리에는 오류 로그인 errlog가 존재한다. 이 파일은 수작업으로 비우지 않는 한 계속 쌓이게 되는데 그렇다고 위에서 처럼 이 파일에 cp /dev/null 명령을 사용할 수는 없다. 이 명령은 시스템의 오류 로깅 기능을 작동되지 못하게 한다. 만약 사용했을 경우에는 백업 테이프로부터 제로(0) 길이의 errlog 파일을 가져다 대체해야 한다. errlog 파일은 errclear 명령을 사용하여 특정 일수까지 모든 입력항목을 로그에서 없앨 수 있다.

다음의 명령으로 오류 로그를 완전히 비울 수 있다.
# errclear 0

오류 로그를 비우되, 지난 주의 오류 입력항목은 그대로 두려면 다음과 같이 한다.
# errclear 7

주:trace 수행으로 인해 이 디렉토리에 있는 trcfile 파일이 커지는 경우도 발생한다. 이 파일은 다음 명령으로 제거할 수 있다.
# rm /var/adm/ras/trcfile


3. /var/spool 디렉토리에는 큐잉 서브시스템 파일들을 비운다.

다음 명령을 실행하여 큐잉 서브시스템을 비운다.
# stopsrc -s qdaemon
# rm /var/spool/lpd/qdir/*
# rm /var/spool/lpd/stat/*
# rm /var/spool/qdaemon/*
# startsrc -s qdaemon

4. /var/adm/acct 디렉토리에는 accounting 레코드의 관리

accounting이 실행중이라면, 이 디렉토리에 여러 개의 커다란 파일이 들어 있을 수 있다.이러한 파일들은 accounting 관리 매뉴얼을 참고하여 불필요한 파일들이라면 삭제한다.

5. /var/preserve 디렉토리에 존재하는 vi 편집 파일

이 디렉토리에는 이전에 사용하던 vi 편집 파일들이 존재하며, 내용을 확인하여 복구할 필요가 없는 파일들은 삭제한다. 6. /var/adm/sulog를 수정한다.

이 파일은 su를 시도한 횟수와 그러한 시도의 성공 여부를 추적한다. 이는 플랫 파일로서 원하는 편집기를 사용해 열람 및 수정이 가능하다. 파일은 제거해도 다음 번에 su를 시도할 때 다시 생성된다.

7. /var/tmp/snmpd.log를 수정한다.

snmpd 디몬은 이 파일을 로그로 사용한다. 이 파일은 제거되어도 snmpd 디몬에 의해 재생성된다.

주:/etc/snmpd.conf 파일에서 크기에 대해 지정하는 섹션을 편집해 이 파일의 크기를 제한하여 파일이 무한히 커지는 것을 막을 수 있으며 크기는 바이트 단위로 되어 있다.

주:AIX에서는 skulker(/var/sbin 디렉토리에 위치)라고 하는 범용 시스템 cleanup 스크립트를 제공한다. 스크립트를 읽어보고 skulker가 어떤 파일을 삭제하고 파일이 삭제되기 전에 해당 파일이 얼마 동안 존재하는지 등에 대해 살펴볼 필요가 있다. skulker는 다음과 같은 crontab 입력항목을 사용하여 cron 작업으로서 실행할 수도 있다.
0 3 * * * /usr/sbin/skulker

cron에서 다음을 실행함으로써 errlog의 내용가운데 특정 내용만을 비울 수도 있다.
0 11 * * * /usr/bin/errclear -d S,O 30
0 12 * * * /usr/bin/errclear -d H 90

기타 파일 시스템 또는 일반 탐색 기법

-size 플래그와 함께 find 명령을 사용하여 큰 파일이 어디 있는지 찾아 낼 수 있다.
어떤 파일 시스템이 금방 꽉 찼다면 -newer 플래그를 사용하여 최근 수정된 파일을 찾아내 어 살펴 볼 수 있다. find에 사용할 -newer 플래그를 위한 파일을 작성하려면 다음의 touch 명령을 사용한다.
# touch mmddhhmm filename
( 여기서, mm은 월, dd는 날짜, hh는 시간(24시간 형태), mm은 분을 나타냄)
# find /filesystem_name -xdev -newer touched_file -ls

아래 내용은 솔라리스의 경우 입니다. 리눅스도 비슷한 명령어로 조치가 가능합니다. 

/ (root) 화일시스템이 full되었을 경우에 다음에 열거한 순서대로 화일시스템을 
점검한다. 

1. / 화일시스템에 사용자가 임의로 만들어 준 디렉토리가 있는면 정리한다. 


2. /dev 디렉토리 밑에 일반화일이 있는지 조사한다. 

# find /dev -type f -exec ls -l {} \; 

일반화일이 있을 경우, 모두 지우면 된다. 특히 테이프에 백업을 받을 경우에 
사용자가 디바이스명을 잘못 지정하여, 테이프에 백업되지 않고 화일에 
저장하는 경우가 있다. 


3. 시스템에 있는 core 화일을 제거한다. 

core 화일을 찾아 보려면 다음과 같은 명령어를 사용한다. 

# find / -name core -print 

core 화일을 찾아서 자동으로 지우려면 다음과 같은 명령어를 실행한다. 

# find / -name core -exec rm {} \; -print 


4. /var가 root 화일 시스템이 있을 경우, /var 디렉토리 밑을 조사한다. 

# du -sk /var/* | sort -nr 

이 명령어를 실행하면 /var 밑에 있는 디렉토리 별로 그 서브 디렉토리까지 
포함하여 KB 단위의 크기를 출력한다. 거기에서 사이즈가 큰 디렉토리에 대하여 
조사한다. 
정상적인 시스템에 주로 문제가 될 만한 디렉토리는 다음과 같다. 

/var/adm 
/var/mail 
/var/log 
/var/preserve 
/var/spool 


4.1 /var/adm 

/var/adm 디렉토리에는 시스템이 운용중이 발생하는 메세지나 기타 정보들이 
누적 보관된다. 이 디렉토리에 큰 화일이 있으면 정리한다. 

messmages.0, messages.1, ... 

이러한 화일이 있으면 그냥 지워도 상관없다. 
messages 화일의 크기가 너무 크면 " # cp /dev/null messages " 명령어를 
사용하여 화일 크기를 0으로 만들 수 있다. 이 화일은 시스템에서 발생되는 
메세지를 보관하는 화일이다. 

wtmp 또는 wtmpx 화일의 크기가 너무 크면 다음과 같은 명령어를 실행하여 
그 크기를 0으로 만들 수 있다. 이 화일에는 시스템에 접속한 사용자에 
대한 정보를 가지고 있는 화일이다. 

# cp /dev/null wtmp 
# cp /dev/null wtmpx 

만일 pacct이 있으면 그 화일의 크기를 다음과 같은 명령어를 사용하여 
크기를 0으로 만들 수 있다. 이 화일은 accounting 정보를 가지고 있는 
화일이다. 

# cp /dev/null pacct 

pacct1, pacct2, ... 등등의 화일이 있으면 그냥 지우면 된다. 

그외에도 사이즈가 큰 화일을 알아서 정리한다. 


4.2 /var/mail 

/var/mail 디렉토리에는 메일 데이타가 보관되는 곳이다. 이 디렉토리에 
사이즈가 큰 화일이 있으면, 해당 사용자에게 그 메일을 정리하도록 한다. 


4.3 기타 디렉토리에 대해서도 조사하여 불필요하게 사이즈가 큰 화일 있을 
경우 알아서 정리한다. 단 화일을 지울 때, 그 화일이 어떤 화일인지 
숙지한 후에 지울 것인가 아닌가를 결정한다. 


5. / 화일 시스템에 있는 1 MB 이상되는 화일을 조사하여, 화일 크기순으로 
sort하여 그 내용을 조사한다. 

# find / -mount -size +1024k -ls > /tmp/find.list 
# sort -nr +6 /tmp/find.list > /tmp/find.list.s 

find.list.s 화일에서 비정상적인 큰 화일이 있는지 조사한다. 


- 출처:www.linux.co.kr -