티스토리 뷰
원본출처 : 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: 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.
'개발 노트 > 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
- 리터럴
- 웹보안
- 압축파일
- gz
- SSL
- 32bit
- 리눅스
- Natas
- bz2
- Strings
- Linux
- natas7
- over the wire
- 웹보안공부
- BASE64
- tar
- OpenSSL
- nc
- Bandit
- HTTPS
- OverTheWire
- tr
- 풀이
- find
- java
- Encode
- X32
- solution
- ssh
- grep
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |