[Linux] Inode와 하드링크/소프트링크

vinca·2023년 11월 3일
0
post-thumbnail

🎆 Inode

리눅스의 모든 파일은 Inode를 가지고 있다.

Inode란?

Inode는 쉽게 말해, 실제 물리적 데이터에 대한 정보(메타데이터)를 저장하고, 해당 물리 데이터의 위치정보를 저장하는 데이터구조이다.
(C언어의 포인터를 생각하면 쉽다!)

  • Inode의 메타 데이터에 저장되는 정보
    실제 데이터에 대한 파일 모드, 링크개수, UID, GID, 파일 크기, 파일 관련 시간 등의 정보가 저장됨

  • 데이터의 위치 정보
    실제 파일내용(DATA)이 있는 위치 정보가 저장됨

이제 Inode에 대해서 알았으니 1. 하드링크2. 소프트링크에 대해서 알아보자.


1. 하드링크

하드링크란?

원본파일(origin)이 접근하는 Inode에 대해서 접근할 수 있는 방법을 하나 더 만드는 것.

쉽게말해 origin이 하나 더 생기는 것이다.

원본 파일에서 하드링크를 생성한다고 하여도, 물리적으로 데이터가 중복 저장되지는 않는다.

당연하게도 하드링크는 데이터로 접근하는 포인터(방법)를 하나 더 만들었을 뿐, 실제로 파일을 하나 더 만든 것은 아니기 때문이다.

또한, 둘 중 하나를 수정하면 다른 쪽의 내용또한 수정된다. 이 또한 실제로 데이터는 하나이기 때문이다.

하드링크 실습

aaa.txt에 대한 bbb.txt를 하드링크로 만들어보자.

➡️ 하드링크 생성
ln aaa.txt bbb.txt

잘 생성되었다. 이제 파일 상태를 확인해보자.

➡️ 파일 상태 확인
stat aaa.txt
stat bbb.txt

aaa.txtbbb.txt의 파일의 상세 정보를 확인해보자.

두 파일의 상태를 살펴보면 원본 파일 aaa.txt과 하드링크로 생성한 파일 bbb.txt완전히 동일한 Inode번호를 가지고 있는 것을 확인할 수 있다.

즉, 동일한 데이터를 가르킨다는 의미이다.

또한, Links의 수가 2로 늘어나 있는 것을 확인할 수 있다.
Links는 해당 Inode연결된 링크의 수(즉, 접근할 수 있는 방법)의 수를 의미한다.

현재 원본 aaa.txt 와 하드링크로 생성된 bbb.txt 두 가지 파일은 같은 파일을 가리키므로 Links가 2이다.

하드링크는 원본 aaa.txt를 삭제하더라도, 하드링크 bbb.txt가 남아 있으므로 여전히 파일에 접근할 수 있다.


2. 소프트링크

심볼릭링크라고도 불리며, 윈도우의 바로가기와 완전히 똑같다.

하나의 새로운 bbb.txt 파일로 생성되는 것은 하드링크와 같으나, 원본파일과 다른 Inode새롭게 생성하고, 이 Inode가 원본 파일을 가리키도록 한다.

소프트링크 실습

아래와 같이 소프트링크 bbb.txt 파일을 생성해보자.

이후 stat 명령어를 입력해서 파일의 상세 정보를 열어 보았을 때, Links의 수가 늘어나지 않는것을 확인할 수 있다.
(새로운 Inode를 생성했기 때문)

만약 원본 파일 aaa.txt를 삭제하면 어떻게 될까?

하드링크는 원본 aaa.txt를 삭제하더라도, 하드링크 bbb.txt가 남아 있으므로 여전히 파일에 접근할 수 있었다.

소프트 링크는 어떨까?

빨간색으로 나오는 것이 보이는가?
다음과 같이 더이상 원본 파일로 가는 링크가 없어졌으므로 접근할 수 없다.

그럼 다시 해당 파일명으로 파일을 생성한다면?

같은 파일이름을 가지고 있는 파일을 그대로 다시 가르키게 된다.
즉, 가르키는 Inode 번호는 다르게 되더라도 파일이름이 일치한다면, 해당 노드로의 링크(bbb.txt의 링크)가 다시 살아나게 된다.

🧐 추가적인 특징

  • 소프트링크의 정책은 리눅스에서 전체가 기본으로 다 허용되어있다.
    (29481 lrwxrwxrwx 1 vinca vinca 7 Nov)

  • 리눅스에서 파일을 지우는 것은 실제로 데이터가 지워지는 것이 아닌 inode와 데이터 블록이 해체되고, inode번호로 가는 링크가 지워지는 것이다.
    즉, 실제 데이터는 삭제되지 않으므로, 실제 데이터가 있는 위치가 다른 데이터로 덮어 씌워지지 않는 이상 포렌식 등으로 다시 복구가 가능하다.

    이를 C언어로 개발된 wiper를 사용할 시, 리눅스 시스템 상에서 파일이 완전히 제거된다.

Reference

https://reakwon.tistory.com/142

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글