리눅스 - inode, 하드링크, 심볼릭링크

OS/Linux 2016. 2. 11. 10:30

Inode?

 


사용자는 커널을 통하여 디스크의 파일을 접근하는데, 이를 위해 커널 내에는 현재 사용중인 파일에 대한 자료 구조를 갖고있다.


커널 내에서 파일 시스템과 관련하여 중요한 자료구조 중 하나가 바로 Inode이다.

Inode는 해당 파일에 대한 부분의 정보를 갖고 있다.

Inode에는 파일의 소유권 및 권한 여부에 대한 정보, 파일 내용이 들어있는 디스크 내의 물리적 주소, 파일의 링크 수형태, 크기, 만들어진 시간 등을 저장하고 있다.

파일을 생성할 때  inodei-list안에 만들어지며, inodeinumber와 파일이름이 디렉토리에 등록된다.

파일을 삭제할 때는 그 파일에 대한 inodw의 파일 링크수가 하나 감소되고 디렉토리 entry상에는 해당 파일의 inumber0으로 변한다.

inode의 파일 링크수가 0이 되면 파일의 디스크 블록은 free가 되며 inodedellocate상태가 된다.

 

쉽게 말해, 하드디스크에는 수많은 파일이 저장되어 있다. 그런데 사용자가 컴퓨터에게 "! a라는 파일 좀 열어봐"라고 명령을 했을때, a라는 파일을 찾는 일은 파일 시스템이 맡아서 한다. 윈도우에서는 FAT, NTFS등을 사용하고 리눅스에서는 ext2, ext3, reiser... 을 사용한다파일시스템은 시스템에 존재하는 모든 inode를 가진다. 그리고 inode는 파일 하나하나에 대한 정보를 가지고 있다. 그래서 이 inode 를 따라가면 파일이 있게 된다.



 


하드링크란?

디렉토리에 그 파일에 대한 새로운 이름이 등록되고 inumber는 본래 있던 파일의 inumber가 복사(동일한 inode를 사용) 된다.

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

 

심볼릭 링크란?

디렉토리에 그 파일에 대한 새로운 이름이 등록되고 새로운 inode를 생성하며 inode원본 파일을 연결한다. 심볼릭 링크의 경우 원본 파일의 주소가 저장되어 있으므로 원본 파일의 위치가 변경되면 심볼릭 링크는 사용할 수 없게 된다.(오류 발생)



<실습>

basefile이라는 파일을 만들고 하드링크와 심볼릭 링크 파일을 만들겠다.

inode가 다른 것을 확인한 후, 파일을 옮겼을때 어떻게 동작하는지 알아보겠다.



 

위 그림을 보면 하드링크의 inode 심볼릭 링크의 inode 원본 파일과 차이가 나는 것을 알 수 있다.


 

test파일을 상위 디렉토리로 옮긴 후, softlink의 내용을 보려고 했지만 오류가 난다.



posted by 경원구