리눅스의 Ext2 파일시스템에서 하드링크와 소프트링크의 차이점에 대해 알아보겠습니다.

Ext2 파일시스템은 파일과 디렉토리의 정보를 inode라는 구조체의 형태로 저장합니다.

Ext2 파일시스템에서 파일이 저장되는 과정은 다음과 같습니다.

그림 처럼 디렉토리 엔트리(ext2_dir_entry)에 파일명과 파일의 inode 위치를 저장하고 있어 해당 파일의 inode를 찾아갈 수 있습니다. inode의 i_block에 파일의 실제 내용이 담긴 블록 주소를 저장하고 있습니다.

하드링크의 구조는 다음과 같습니다.

하드링크는 inode를 만들지 않고 단지 디렉토리 엔트리에 하드링크의 파일명과 링크한 파일의 inode 번호를 저장하게 됩니다. 하드링크를 한번 했으므로 링크한 파일 inode의 i_links_count에 1이 더해집니다. 하드링크를 할 때마다 이 값은 1씩 늘어나고 하드링크를 지우면 1씩 줄어듭니다.

파일을 삭제 할 때에는 이 i_links_count 값이 0이 아니면 삭제되지 않습니다. 하드링크를 모두 지워야 파일이 삭제 됩니다.

하드 링크는 쉽게 말해서 하나의 파일이 여러개의 이름을 가지고 있는 모양입니다. 그래서 하드 링크와 원래 파일은 동등한 위치에 있고, 둘은 똑같은 것이라 할 수 있습니다.

소프트 링크의 구조는 다음과 같습니다.

소프트 링크는 하드 링크와는 달리 따로 inode를 만들고 이 inode의 i_block에 파일내용의 위치를 저장하는 것이 아니라 링크할 파일의 경로와 파일명을 저장하게 됩니다.

하지만 i_block의 크기가 4바이트 x 15이므로 60바이트(ULONG i_block[15])입니다. 따라서 링크할 파일명과 경로가 60자(영문)가 넘어가면 i_block에 저장되지 않고 파일 내용이 저장되는 데이터 블록에 저장되고 i_block에는 데이터 블록의 위치를 저장하게 됩니다.

소프트링크는 단지 원본 파일의 경로만 가지고 있는 별개의 파일입니다. 그래서 i_links_count 값은 변하지 않으므로 원본 파일의 삭제에도 영향을 주지 않습니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

21 May 2007