티스토리 뷰

개발 노트/Linux

inode 개념

오리지날초이 2014. 4. 24. 13:37

원본출처 : http://rocksea.tistory.com/20


오늘은 inode에 대하여  알아보도록 하겠습니다.

일단 inode table에 대해서 알기전에 file system에 대한 structure를 먼저 알아야 합니다.

ext3 file system structure는 [그림1]과 같습니다.

 

[그림1] ext3 file system schema


   - 부트 블럭(boot block) :  디스크의 첫번째 논리적인 블럭으로, 유닉스가 첫번째로 활성화되는데 사용되는 약간의 실행코드를 포함, 운영 체제의 로더 기타의 컴퓨터를 작동시키도록 하는 기본 정보를 포함하고 있는 부분.

   - 슈퍼 블록(superb1ock) : 유닉스 시스템에서 파일 시스템의 상태를 설명하는 블록.

   - inode  : 디스크상의 화일에 대응하는 모든 inode 리스트로 된 고정된 크기의 블록.

   - 나머지 블록 : 실제 화일블럭을 저장하도록 사용되는데 디렉토리와 사용자 화일들을 포함.

 

오늘은 linux file system에서 핵심이라고 할 수 있는 inode 블록에 대해서 알아보도록 하겠습니다.

 

inode 란?

아이노드(inode)는 UFS와 같은 전통적인 유닉스 계통 파일 시스템에서 사용하는 자료구조입니다. 아이노드는 정규 파일디렉터리 등 파일 시스템에 관한 정보를 가지고 있습니다.

파일들은 각자 1개의 아이노드를 가지고 있으며, 아이노드는 소유자 그룹, 접근 모드(읽기, 쓰기, 실행 권한), 파일 형태, 아이노드 숫자(inode number, i-number, 아이넘버) 등 해당 파일에 관한 정보를 가지고 있습니다. 파일시스템 내의 파일들은 고유한 아이노드 숫자를 통해 식별 가능합니다.

일반적으로 파일 시스템을 생성할 때 전체 공간의 약 1%를 아이노드를 위해 할당합니다. 아이노드를 위한 공간이 한정되어 있는 만큼 파일시스템이 가질 수 있는 파일의 최대 개수도 한정되어 있습니다. 그러나 대부분의 경우, 사용자가 느끼기에 거의 무한 개에 가까운 파일을 생성하고 관리할 수 있습니다.

 

  • inode 번호
  • 파일 모드 : 파일과 관계된 접근과 실행 권한을 저장하는 16비트 플래그

비트내용
12-14파일 형식(일반, 디렉터리, 문자 또는 블록 특별, 선입선출 파이프)
9-11실행 플래그
8소유자 읽기 허가
7소유자 쓰기 허가
6소유자 실행 허가
5그룹 읽기 허가
4그룹 쓰기 허가
3그룹 실행 허가
2다른 사용자 읽기 허가
1다른 사용자 쓰기 허가
0다른 사용자 실행 허가

  • 링크 수 : 이 아이노드에 대한 디렉터리 참조 수
  • 소유자 아이디 : 파일의 개별 소유자
  • 그룹 아이디 : 이 파일과 관계된 그룹 소유자
  • 파일 크기 : 파일의 바이트 수
  • 파일 주소 : 주소 정보(39바이트)
  • 마지막 접근 : 마지막으로 파일에 접근한 시각
  • 마지막 수정 : 마지막으로 파일을 수정한 시각
  • 아이노드 수정 : 마지작으로 아이노드를 수정한 시각

기본적으로 inode는 파일의 실제 이름과 파일의 실제 내용을 제외한 파일에 대한 모든 정보를 담고 있습니다.

실제 명령으로 확인해 보도록 하겠습니다.

# df -i

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/mapper/VolGroup00-LogVol00
                        43515904 6269882 37246022   15% /
/dev/xvda1        26104      37   26067    1% /boot
tmpfs                1572864       1 1572863    1% /dev/shm
/dev/xvdb1        39321600   39321600       6  100% /data3

/dev/xvdb1 파티션 정보를 보시면 inode 현재 사용 현황을 확인 할 수 있습니다.

위의 설정에서 보면 현재 inode 100%를 전부 사용하고 있다는 뜻이며 용량이 남아있어도 더이상 파일을 생성 할 수 없게 됩니다.

hdd 용량이 남아있어도 더이상 파일을 생성 할 수 없게 됩니다. 물론 새로운 파일 생성만 안될 뿐 기존의 파일에 대한 수정이나 삭제는 가능합니다.

# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      161G   81G   73G  53% /
/dev/xvda1             99M   14M   80M  15% /boot
tmpfs                 6.0G     0  6.0G   0% /dev/shm
/dev/xvdb1            296G  181G  101G  65% /data3

# touch test.log
touch: cannot touch `test.log': No space left on device

 

파일갯수가 엄청 많을경우 ( 거의 그런경우는 없겠지만 ) file system format할 경우 inode size를 직접 조절해 주면 문제없이 해결 할 수 있습니다.

# mkfs.ext3 --help
mkfs.ext3: invalid option -- -
Usage: mkfs.ext3 [-c|-t|-l filename] [-b block-size] [-f fragment-size]
        [-i bytes-per-inode] [-j] [-J journal-options] [-N number-of-inodes]
        [-m reserved-blocks-percentage] [-o creator-os] [-g blocks-per-group]
        [-L volume-label] [-M last-mounted-directory] [-O feature[,...]]
        [-r fs-revision] [-R options] [-qvSV] device [blocks-count]

# mkfs.ext3 -i 256 /dev/xvdb1 (  byte per inode )

                      OR

# mkfs.ext3 -N 10000000 /dev/xvdb1 ( inode Number )

 

그동안  OS 설치시 partition 과 file system format에만 신경쓰다보니 이러한 문제가 발생할 경우에 대한 예외상황을 미처 대처하지 못하여 이번 포스팅을 작성하였습니다. 저와 같이 고생하시는 분들 없길 바랍니다.

by rocksea.

728x90
반응형

'개발 노트 > Linux' 카테고리의 다른 글

바이너리 파일 옮겨서 사용하기  (0) 2014.09.23
so 파일 import 로 바이너리 실행환경 만들기  (0) 2014.09.23
원격파일 복사  (0) 2014.04.22
리눅스 bash 고급  (0) 2014.02.24
linux bash 응용  (0) 2013.12.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함