inode full 확인
df -i
어떤 디렉토리에서 많이 쓰는지 명령
find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
오래된 파일 옮기기
find . -mtime +30 -type f -exec mv "{}" /tmp/ \;
유닉스 파일 시스템 파일 관리 방법을 알아보자
df와 같은 유닉스 명령어에서 Iused와 %Iused가 무엇을 의미하는지, 아니면 사람들이 inode에 대해 이야기할 때 궁금증을 느낀 경우가 없습니까? 유닉스(UNIX®)와 리눅스(Linux®) 시스템은 모두 inode를 사용하며, IBM® AIX®라고 해서 다르지 않습니다. inode가 무엇이며, inode가 유닉스에 중요한 이유, inode의 구조, inode와 관련이 있는 명령어를 알아봅시다.
inode는 유닉스 운영체제에서 사용하는 자료 구조로, 파일 시스템 내부에 파일을 유지하는 중요한 정보를 담고 있다. 유닉스에서 파일 시스템을 생성할 때, 수 많은 inode 집합을 생성한다. 일반적으로 전체 파일 시스템 디스크 용량의 대략 1% 정도가 inode 테이블에 할당된다.
종종 사람들은 inode와 inumber를 섞어서 사용한다. 두 용어는 비슷하며, 서로 관련이 있지만 똑같은 개념을 나타내지는 않는다. inode는 자료 구조다. inumber는 실제 inode 인식 번호이므로 inode number나 inumber라고 부른다. inumber는 파일 정보를 담은 중요한 항목일 뿐이다. inode에서 몇 가지 다른 속성은 다음 절에서 설명한다.
inode 테이블은 개별 파일 시스템을 위한 모든 inode 숫자 목록을 포함한다. 사용자가 파일에 접근하려면, 유닉스 시스템은 올바른 inode 번호로 inode 테이블을 탐색한다. inode 번호를 발견하면, 사용자가 내린 명령이 inode에 접근해서 가능하다면 적절한 변경 작업을 진행한다.
예를 들어, vi로 파일을 변경하는 작업을 생각해보자. vi <filename>이라고 입력할 때, inode 숫자를 inode 테이블에서 찾아 inode를 연다. vi 편집 세션 중에서 몇 가지 속성이 변경되며, :wq로 작업을 종료할 때, inode가 닫히며 해제된다. 이런 식으로 사용자 두 명이 같은 파일을 동시에 편집하면, inode가 편집 세션을 연 사용자 ID에 할당되며, 다른 사용자는 inode가 해제되기를 기다려야만 한다.
inode 구조체
inode 구조체는 경험이 풍부한 유닉스 개발자나 관리자에게 상대적으로 쉽게 다가오지만, inode 내부에 대해 잘 모를 경우 깜짝 놀랄 만한 정보를 담고 있을지도 모르겠다. 다음 정의는 유닉스 사용자가 활용하는 inode에 담긴 중요한 정보 몇 가지를 설명한다.
inode 번호
stat C 함수에서 사용되는 파일 유형을 이해하기 위한 모드 정보
파일 링크 숫자
소유주 UID
소유주 GID
파일 크기
파일이 사용하는 실제 블록 개수
마지막으로 수정된 시각
마지막으로 접근한 시각
마지막으로 변경된 시각
기본적으로 inode는 파일의 실제 이름과 파일의 실제 내용을 제외한 파일에 대한 모든 정보를 담고 있다.
위에서 정리한 정보는 유닉스에서 많이 사용하며 파일에 중요하다. 이런 정보 없이는 파일이 손상당하거나 사용 불가능한 상황에 놓인다.
디렉터리와 파일은 다른 운영체제와 비교해서 유닉스 시스템에서 조금 다르게 보일지도 모르겠지만 그렇지 않다. 유닉스에서 디렉터리는 실제로 inode에 몇 가지 추가 설정이 가해진 파일이다. 디렉터리는 기본적으로 다른 파일을 담고 있는 파일이다. 또한 모드 정보는 파일이 실제로 디렉터리라는 사실을 시스템에 알리는 플래그 집합을 포함한다.
inode로 작업하기
유닉스에서 inode로 작업하는 방법을 익히려면 시간도 많이 필요하며 짜증도 난다. 다음에 소개하는 명령어를 활용해 inode에 대해 모를 때 겪었던 두통거리 몇 가지를 완화해보자.
df 명령어
앞서 언급했듯이, 유닉스에서 파일 시스템을 생성할 때, 전체 디스크 공간의 대략 1%가 inode 테이블에 할당된다. 파일 시스템에서 파일을 만들 때마다, inode가 해당 파일에 할당된다. 일반적으로 파일 시스템에 할당된 inode 숫자는 충분하지만 inode가 다 떨어질 가능성도 항상 고려해야 한다. 이를 감시하기 위해 df 결과를 살펴본다.
df 명령어를 사용하면 특정 파일 시스템이나 모든 마운트된 파일 시스템을 살펴볼 수 있다. 명령 결과에서 각 파일 시스템에서 사용된 inode 숫자는 물론이고 전체 파일 시스템에서 사용된 비율도 볼 수 있다. Listing 1을 살펴보자.
어떤 이유에서인지 파일 시스템 inode 사용도가 100%에 다다르면 추가적인 파일, 디바이스, 디렉터리 등을 파일 시스템에 생성하지 못한다. 한 가지 해법으로 그림 1처럼 smitty chfs 명령으로 파일 시스템에 좀 더 많은 공간을 추가하면 된다.다른 해법으로 좀 더 작은 inode 확장을 만들면 된다. IBM AIX 5L은 이제 향상된 저널링 파일 시스템에서 16KB라는 기본 크기보다 좀 더 작은 inode 확장을 허용한다. 하지만 AIX 5L에서 이 옵션을 켜면, AIX 직전 버전에서 이 파일 시스템에 접근하지 못한다는 사실을 염두에 두자.
istat과 stat
AIX에서 inode를 검사하는 빠른 방법으로 istat 명령어 활용이 있다. 이 명령어는 특정 파일의 inumber와 (파일 유형, UID, GID, 링크 개수(심볼릭 링크 제외), 파일 크기, 마지막 갱신, 변경, 접근에 따른 타임 스탬프 등) 접근 허가 같은 다른 inode 항목을 찾아낼 수 있다.
Listing 2는 AIX에서 /usr/bin/ksh 파일에 대한 inode 정보를 보여준다.
Listing 2. /usr/bin/ksh에 대한 inode 정보
istat에서 얻은 표준 정보 이외에 /usr/bin/ksh에 대한 inumber도 확인했다. 파일이 존재하는 논리 볼륨을 찾아낼 수 있다면, 좀 더 많은 정보를 얻을 수 있을 것이다. 이런 정보를 찾아내기 위해 df 명령으로 파일이 존재하는 마운트된 파일 시스템을 살펴본다.
파일 /usr/bin/ksh는 디렉터리 /usr/bin에 들어있다. df 명령 결과를 살펴보면, /usr/bin 디렉터리는 /usr/ 파일 시스템에 포함되어 있고, /usr 파일 시스템은 논리 볼륨인 /dev/hd2 내부에 들어있다. inumber와 논리 볼륨 이름을 둘 다 안다면, istat에 인수로 두 가지 정보 항목을 넘겨 파일을 구성하는 16진 디스크 블록 주소를 파악할 수 있다. Listing 3을 참조하자.
Listing 3. 파일 블록의 16진 주소를 파악하기
리눅스에는 독자적인 istat 버전인 stat이 있다. 리눅스 stat 명령은 비슷한 정보를 보여주며, AIX istat 명령어에 없는 몇 가지 스위치를 또한 포함한다.
ls 명령어
살다보면 파일 이름이 아예 없거나 파일 이름에 특수 문자가 들어가거나 대시(-) 문자가 들어있는 파일을 제거하거나 관리하느라 혼쭐이 난 경험이 있을 것이다. 대부분 누군가 파일 이름을 잘못 붙였기 때문에 이런 곤란에 처한다.
유닉스에서 대다수 명령에는 스위치, 옵션을 허용하므로 (스위치/옵선인) -이나 --으로 시작하는 파일을 rm, mv, cp와 같은 자주 사용하는 명령에서 처리하기가 까다롭다. 다행스럽게도, 처리 대상 파일과 관련된 inode의 inumber를 보여주는 명령어 옵션이 있다. ls 명령은 다음과 같다.
Listing 4처럼 ls -i 명령을 활용해 파일 이름 다음에 inumber를 출력할 수 있다. inumber를 알면 파일을 쉽게 다룰 수 있다.
Listing 4. 파일의 inumber 보기
find 명령어
유닉스 find 명령어를 활용하면 ls 명령어로 시작한 작업을 마무리할 수 있다. 처리해야 하는 각 파일별 inumber를 안다면, 문제는 해결된 셈이다.
이름이 없는 듯이 보이는 파일을 제거하려면 find에 -inum 스위치를 붙여서 inumber와 파일을 찾아본다. 그러고 나서 파일을 찾았다면 find에 -exec 스위치를 붙여 파일을 제거한다.
파일 이름을 바꾸려면 rm 대신 mv 명령어를 사용한다.
기대했던 결과가 나오는지 비교하려면, ls -i 명령을 다시 한번 내려본다.
fsck 명령어
불행히도 하드웨어는 영구적인 물건이 아니며, 시스템은 여러 해 동안 연속으로 사용하면 실패할 가능성이 있다. 이런 일이 벌어지거나 전원 문제 등으로 운영체제가 비정상적으로 종료하는 시점에서 충돌이 생기는 바람에 관리자의 도움이 필요한 경우가 생기기 마련이다. 이런 과정에서 inode를 복구할 필요가 있다거나 오류가 발생했다는 메시지가 뜰지도 모른다. 이런 메시지가 뜰 때, fsck 명령어가 바로 구명 튜브다! 시스템 복구나 심지어 운영체제 재설치 과정 없이도 fsck를 사용해 파일 시스템을 복구하거나 손상당한 inode를 수정할 수 있다.
다음 명령어는 논리 볼륨 /dev/hd1을 복구한다.
fsck 명령을 사용해 손상당한 inode 탐색 범위도 좁힐 수 있다. 특정 inode를 탐색한다면, -ii-NodeNumber 스위치를 fsck에 붙인다.
결론
파일과 디렉터리는 inode의 도움 없이는 유닉스 세상에서 거의 쓸모가 없다. 다행스럽게도 이 기사를 읽고 나면 inode의 개념, AIX에서 차지하는 중요성, 관리 기법을 좀 더 제대로 이해할 것이다. df를 다시 한번 되돌아볼지도 모르겠다.
출처 : https://m.blog.naver.com/bestdriver94/220603379919