[PintOS] PROJECT4: - FILE SYSTEM WIL

bongf·2022년 6월 27일
0

정글

목록 보기
20/20

Hard Link & Soft Link

하드링크

  • 파일 시스템의 파일의 이름과 연결되는 디렉터리 엔트리이다. 그래서 각각의 파일은 최소 하나의 하드링크를 갖고 있다.
  • 추가로 하드 링크를 만들면, 그림 처럼 다른 디렉토리를 통해서 혹은 다른 이름을 통해서 접근할 수 있는 경로를 추가적으로 획득하게 된다.
  • 이는 같은 inode를 가리키고 있는 다른 파일을 만드는 것과 같다.
  • 그렇기 때문에 원본 파일이 삭제되어도 영향이 없고 처리속도도 더 빠르다 (inode를 직접 가리키고 있기 때문에)

하드 링크시 파일 삭제

  • 파일 삭제를 어떻게 하냐 하면 참조 카운트라는 것을 둔다.
  • 만약 이 파일에 접근할 수 있는 경로가 여러 개라면 그만큼의 카운트를 두고 파일 삭제 요청이 올 때마다 참조 카운트를 하나씩 내린다.
  • 그래서 참조 비트 값이 0이 되었을 때 비로소 해당 파일을 삭제한다.
  • 한계 : 하나의 inode는 하나의 파일 시스템에서 유일하기 때문에 다른 파일 시스템과 하드링크를 할 수 없다.

소프트링크

  • 윈도우의 바로가기로 이해할 수 있다. 하드링크에서 해당 inode 가리키는 것과는 달리 원래 원본 파일의 이름을 가리키는 별개의 '파일'이다.
  • 하드링크와 달리 다른 파일시스템의 파일을 가리킬 수도 있고 디렉토리를 가리킬 수도 있다.
  • 그렇기 때문에 원래 파일의 이름이 변경되거나 파일이 삭제되면 해당 링크에도 영향을 준다.
  • 심볼릭 링크의 장점은 다른 파일이어도 원본파일과 이름이 같으면 계속 사용가능하다는 점이다. 또한 경로가 복잡한 디렉토리를 심볼릭 링크를 통해 편하게 사용할 수 있다.
  • 심볼릭 링크는 타켓파일의 inode를 거쳐 실제 데이터에 접근해야하므로 시간이 더 오래 걸린다.

리눅스에서 hard link파일 & soft link파일 생성해보기

리눅스에서 ln 명령어를 통해 링크파일을 만들 수 있다.
옵션을 안붙이면 hard link 파일이 생성된다.

stat 명령어로 파일의 상태를 출력해보면 기존 파일 file1과 hard link된 파일 file1_hardlink의 Inode값이 동일한것을 확인할 수 있다.
링크되지 않은 file2의 상태와 비교해봤을 때, file2는 link의 수가 1개이고, file1과 file1_hardlink 는 link수가 2개인것을 확인할 수 있다.

또한 같은 파일을 가리키고 있는 것이므로 한파일을 수정하면 다른 파일에도 수정사항이 반영된다.

ln 명령어에 -s옵션을 통해 symbolic link 파일을 생성했다.

file1과 file_symlink의 상태를 비교해보면 두 파일의 Inode가 다른것을 확인할 수 있다. 또한 링크 수도 변화하지 않는다.

원본 파일을 삭제하면 hard link 파일은 영향을 받지 않지만 symbolic link 파일은 No such file or directory 라는 에러 메세지가 출력된다.

file1이라는 원본 파일을 삭제한 후 file1에 대한 hard linkd인 file1_hardlink로 파일을 여는데는 문제가 없지만 symbolic link인 file1_symlnk 로 파일을 열 수 없음을 보여준다.
다시 동일한 이름의 file1을 만들면 이름만 같으면 symbolic link는 연결되어 다시 symbolic link로 해당 파일을 열 수 있음이 보여진다.

profile
spring, java학습

0개의 댓글