메뉴 건너뛰기

Dev tips

Linux Server inode 개념

taknim 2008.07.08 23:00 조회 수 : 15366 추천:2754

http://cafe.naver.com/doprogrammer/587

inode란?

 

파일 어드레싱 

파일이나 디렉토리는 그에 해당하는 하나의 inode를 가지고 있으며,

이 inode는 그 파일에 대한 모든 정보를 가지고 있으며, 한 inode는 64byte로 이루어진다.

또한 이 inode를 가지고 있는 표를 시스템 inodeTable라고 한다.

어떤 한 파일이나 디렉토리가 생성되면 하나의 inode가 만들어지고

그 inode가 inodeTable에 등록되며, 등록되는 entry-number를 그 inode에 대한 inumber라 한다. 
       
     inode      :  한 파일이나 디렉토리의 모든 정보를 갖고 있는 64byte로 구성된 표 

                       
     i-list        :  한 파일 시스템에서 파일이나 디렉토리들의 inode를 갖고 있는 표


     inumber  :  inode가 inodeTable에 등록되는 entry-number

inode의 내용 

inode는 파일이나 디렉토리의 모든 정보를 가지고 있는 자료구조를 말하며,

64byte로 구성되는 표로서 유닉스 시스템은 각 파일에 대한 하나의 inode를 할당한다

    파일소유권과 이용할 수 있는 여부에 대한 정보

    파일내용이 들어있는 디스크 내의 물리적 주소 
    파일의 링크수 
    파일의 형태 
    파일의 크기 
    파일의 만들어진 시간, 최근 사용시간, 최근 수정시간 
     inode의 최근 수정시간 

유닉스의 inode에 대해 좀더 자세히 알아보자. 
유닉스에서 디스크는 일정한 크기의 블록으로 나누어져 있으며,

각 파일이 디스크의 공간에 할당될때도 정해진 크기의 블록으로 할당되어 사용된다.

inode는 파일의 구성블럭에 대한 물리적 위치가 포함되어 있다.

블록들의 물리적위치를 기록하기 위하여 직접어드레싱방법 및 간접어드레싱 방법이 사용되고 있다.

inode에 있는 블록위치에 대한 정보는 13개의 필드로 되어 있는데,

필드 0부터 필드 9까지는 직접적으로 블록을 어드레싱하는 부분인데,

다시 말해서 각 필드 내에 있는 내용은 디스크의 주소를 포함하고 있다.

처음 10개의 블록은 이러한 방식으로 어드레싱 되며, 유닉스 내에 있는 파일의 대부분이 작기 깨문에

10개의 블록으로도 충분하지만, 방대한 파일인 경우에는 필드 10, 11 또는 12가 사용된다.

각각은 1, 2, 3차 간접 어드레싱방법을 사용하게 된다.

필드 10은 실제의 어드레스가 있는 블록의 어드레스 즉, 주소의 주소를 가지고 있으며

어드레스수를 통산 256개의 주소를 기록할 수 있다. 
 그러므로 필드 10은 실제주소가 있는 곳을 가리키고, 필드 11은 이중간접어드레스 필드를,

12는 삼중 어드레스를 각각 저장하고 있다. 이러한 방법에 의해 어떠한 크기의 파일이라도

유닉스에서 모두 다루어 질 수 있다.

파일의 생성

  : 새로운 파일이 만들어지면 그에 해당하는 inode가 i-list안에 만들어지며,

    그 inode의 inumber와 파일이름이 디렉토리에 등록된다.

 

# df -i 하여 사용할수 있는 inode의 값이 0이면 아무것도 생성할수 없다.

파일의 링크

  : 이미 존재하고 있는 파일을 링크시킬 경우는 디렉토리에 그 파일에 대한 새로운 이름이 등록되고, 

   inumber는 본래 있던 파일의 inumber가 복사된다.

   이때 복사되는 파일의 inode에서 파일의 링크수는 하나 증가하게 된다.

파일의 삭제

  : 파일을 삭제하면 그 파일에 대한 inode의 파일 링크수가 하나 감소되고

    디렉토리 entry에서는 해당 파일의 inumber가 zero로 변한다.

    inode의 파일링크수가 zero가 되면 파일의 디스크 블록은 free가 되며 inode는 dellocate 된다.

 

한 inode의 크기는 64byte이다.

파일은 블럭들로 구성되어 있다.

한 블록의 크기가 1K이고 블록의 주소가 4바이트로 표현 가능하다면 한 블록은 256개의 블록 주소 포함
16 gigabyte 크기의 파일까지 표현 가능
1K 블록을 표현할 수 있는 10개의 direct 블록(10K)
256개의 direct 블록을 가리키는 1개의 indirect 블록(256K)
256개의 indirect 블록을 가리키는 1개의 double indirect 블록(64M)
256개의 double indirect 블록을 가리키는 1개의 triple indirect 블록(16G)

-> 1K * 256 * 256 * 256 = 16G 

inode의 파일 크기 필드가 32비트인 경우 실제 파일 크기는 4 gigabytes로 제한(2^32)

또 까먹었지?? -_-;; 133page...


번호 제목 글쓴이 날짜 조회 수
474 유용한 함수 pack, unpack, ip2long, long2ip taknim 2009.01.13 33386
473 해커들을 위한 CMD 툴 모음 file taknim 2008.05.22 32577
472 [js & php] 비밀번호 유효성 체크 - 연속 문자, 같은 문자 taknim 2011.11.09 28590
471 [Oracle] ORA-00600, ORA-06544, ORA-06553 오류 발생시 taknim 2009.06.09 23847
470 리눅스 콘솔 단축키 taknim 2009.07.06 21956
469 리눅스 split | 파일 사이즈, 라인 단위 자르기 taknim 2008.06.19 20595
468 mcrypt 암호화/복호화 AES/CBC/PKCS5/PKCS7/PADDING [1] taknim 2010.03.19 19475
467 최고의 웹디자인용 작은 아이콘 다운로드 사이트 모음 : Best Small Icon Sites taknim 2007.07.11 18946
466 [mysql] 동적 쿼리 생성시 변수를 대입하거나 값을 받아오기 taknim 2009.08.17 17210
465 [MSSQL] MS-SQL 동적쿼리 이용하기 taknim 2009.12.28 16989
464 [google map api] 구글 맵스 API 로 지도 가져오기 taknim 2012.02.09 16950
463 [C/C++] prnitf 역슬래쉬 문자 taknim 2008.11.28 16251
462 EUC-KR <-> UTF-8 상호변환 하기 (문자셋charset 변환) taknim 2008.05.27 16114
461 [oracle] isqlplus 에서 특수문자(&) 입력하는 방법 taknim 2012.08.10 16073
460 [mysql] mysqlbinlog 실행시 캐릭터셋(utf8) 오류 taknim 2009.08.25 15773
459 [Oracle] DBNEWID Utility - DBNAME,DBID변경하기 taknim 2009.07.06 15576
» inode 개념 taknim 2008.07.08 15366
457 UTF-8 을 이용해서 다국어버젼 웹사이트 개발시 고려사항 taknim 2008.10.17 15339
456 누구나 다 아는 네트워크(소켓) 통신시의 함수 pack과 unpack taknim 2008.05.17 14611
455 Postfix SMTP 서버를 이용한 IPv6 메일(SMTP) 서버 구성 taknim 2008.02.15 14443