KOROMOON

착한 사마리아인이 되고 싶습니다.

5/13/2018

리눅스 시스템의 아이노드(inode), 심볼릭 링크(Symbolic Link), 하드 링크(Hard Link)


( 1 ) 아이노드(inode)

< 출처 - commons.wikimedia.org >

심볼릭 링크와 하드 링크를 이해하기 위해서는 inode 를 먼저 이해해야 함.
UFS 와 같은 전통적인 유닉스 계통 파일 시스템에서 사용하는 자료 구조임.
파일 시스템 내에서 파일이나 디렉토리는 고유한 inode 를 가지고 있으며 inode 번호를 통해 구분이 가능함.

사용자가 파일 또는 파일과 관련된 정보에 액세스하려고 하면 파일 이름을 사용하지만 내부적으로 파일 이름은 먼저 디렉토리 테이블에 저장된 inode 번호로 매핑됨.
그런 다음 해당 inode 번호를 통해 해당 inode 에 액세스 됨.

inode 에 포함된 정보는 아래와 같음.
- 파일 모드(퍼미션)
- 링크 수
- 소유자명
- 그룹명
- 파일 크기
- 파일 주소
- 마지막 접근 정보
- 마지막 수정 정보
- 아이노드 수정 정보

inode 포인터 구조를 통해 파일의 실제 데이터가 저장된 블록의 정보를 포함하여 파일의 메타 데이터 정보만 저장시킴.
대부분의 파일 시스템에서는 15개의 포인터로 된 데이터 구조가 저장되어 있으며 자세한 구조는 생략함.



( 2 ) 심볼릭 링크(Symbolic Link)
윈도우 시스템에서 제공하는 바로 가기 기능과 매우 유사함.
원본 파일에 대한 정보가 포함되어 있지 않으며 원본 파일 위치에 대한 포인터만 포함되므로 새로운 inode 를 가진 링크 파일이 생성됨.

심볼릭 링크 만드는 명령어는 아래와 같음.
ln –s [원본 파일] [링크 파일]



( 3 ) 하드 링크(Hard Link)
하드 링크는 디렉토리 구조에 대한 항목만 파일 생성되지만 원본 파일의 inode 위치를 가리킴.
즉, 하드 링크에는 새로운 inode 생성이 없음.
하드 링크는 일반적인 본사본과는 엄연히 다름. 파일 시스템에 있는 데이터를 복사한 것이 아니라 inode 번호만 복사했기 때문임. 따라서 진짜 복사했을 때와 달리 파일 시스템 내의 데이터 자체가 여전히 1개만 존재함.

하드 링크 만드는 명령어는 아래와 같음.
ln [원본 파일] [링크 파일]



( 4 ) 심볼릭 링크와 하드 링크 차이

심볼릭 링크와 하드 링크의 큰 차이는 새로운 inode 생성 여부임.
그 차이에 따라 원본 파일이 삭제할 경우 접근 가능 여부도 달라짐.
자세한 차이는 아래 표를 참고 바람.

구분
심볼릭 링크
하드 링크
생성 명령어
ln –s [원본 파일명] [링크 파일명]
ln [원본 파일명] [링크 파일명]
생성 종류
파일과 디렉토리 모두 생성
파일만 생성
링크 기능
파일 또는 디렉토리 이름에 대한 링크를 가리킴
원본 파일에 대한 참조 또는 포인터
원본 파일 삭제할 경우
액세스 불가능
액세스 가능
inode 번호
다른 inode 번호
동일한 inode 번호
다른 파티션 링크 여부
다른 파티션에 링크 가능
다른 파티션에 링크 불가능



( 5 ) 사용 시기

심볼릭 링크
1. 파일 시스템에 링크할 경우 사용함.
2. 디렉토리를 링크할 경우 사용함.

하드 링크
1. 저장 공간 : 하드 링크 파일은 마치 용량을 점유하고 있는 것처럼 보이지만 진짜로 데이터를 복사한 것이 아니라 이미 존재하는 데이터의 위치만 가리키고 있으며 별도의 데이터를 저장하지 않기 때문에 용량을 차지하지 않음. 반면 심볼릭 링크는 자신이 가리키고 있는 파일의 위치를 데이터로서 저장하기 때문에 약간의 용량(보통 4KB)을 차지함.
2. 성능 : 다른 파일을 거치지 않고 직접 디스크 포인터에 액세스하므로 하드 링크로 액세스하면 성능이 약간 좋아짐.
3. 파일 위치 이동 : 원본 파일을 같은 파일 시스템의 다른 위치로 옮기면 하드 링크는 계속 작동하지만 소프트 링크는 실패함.
4. 안전성 : 심볼릭 링크보다 하드 링크가 데이터 안전성이 우수함.



( 6 ) 관련 명령어

시스템 내에서 모든 심볼릭 링크를 찾는 명령어
find /etc -type l -exec ls -li {} \;

시스템 내에서 모든 심볼릭 링크를 찾는 명령어
find / -links +2 -type f -exec ls -li {} \;

하드 링크의 개수를 알아보는 명령어
stat [파일명]

inode 번호 확인하는 명령어
ls -i [파일명]






============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 2개: