알쓸코지
article thumbnail
Published 2024. 6. 11. 22:21
[OS] 리눅스 파일 시스템 CS

파일 시스템이란?

  • `파일`: 데이터, 프로그램 등을 담는 그릇
  • `파일 시스템`: 그 그릇들을 관리하는 시스템
  • 파일에 이름을 붙이고, 저장/탐색을 위해 파일을 어디에 위치시킬 것인지 나타내는 체계
  • 파일들이 디스크 상에서 구성되는 방식
  • 파일 시스템은 파일들을 관리할 정보가 필요하다. ➡️ `메타데이터`
    • 파일의 이름, 확장자, 권한 정보 등

 

리눅스의 파일 시스템

EXT(EXtended File System)

  • 리누스는 minix 플랫폼의 불편함을 해결하기 위해 새로운 운영체제인 `리눅스`를 만들었다.
  • Minux 플랫폼 위에서 개발했기 때문에 Minux 파일 시스템을 사용했는데, Minux 파일 시스템을 확장하여 `extfs(Extended File System)`이라는 파일 시스템을 만들었다.
  • 성능 향상, 확장성, 기능을 추가하여 `ext2fs`
  • 저널링 기능을 추가하여 `ext3`
  • 익스텐트(extents) 같은 현대 파일 시스템 기능을 추가하여 `ext4` ➡️ 현재 `ext4`를 널리 사용하고 있다.

 

EXT의 대표적인 기능

  • 파일의 할당: 새로 생성할 파일을 디스크에 할당하는 방법
  • 파일의 접근: 사용자가 원하는 파일을 디스크에서 접근하는 방법
  • 파일의 보호: 파일의 접근 권한을 관리하는 방법
  • 파일의 일관성: 파일의 내용이 손상되지 않도록 하는 방법

 

파일의 할당

파일을 하나 생성했을 때, 파일의 메타데이터와 파일의 실제 내용인 데이터를 디스크에 저장한다.
  • ext에서는 파일의 메타데이터를 `inode(index-node)`라는 자료구조로 저장한다.
    • 하나의 파일은 하나의 inode를 갖는다.
    • `파일이름:inode번호`의 구조를 갖고 있어, 파일 이름은 inode 번호와 매칭된다.

  • `cat files.txt` ➡️ 데이터 블록 조회
    • 해당 파일의 inode 번호를 확인하여 해당 inode 블록을 찾는다.
    • inode 블록에서 데이터 블록 영역에서 데이터를 반환받는다.
  • `ls -al files.txt` ➡️ 메타데이터가 담긴 블록 조회
    • 해당 파일의 inode 번호를 확인하여 해당 inode 블록을 찾는다.
    • inode 블록에서 메타데이터 블록 영역의 데이터를 반환받는다.

 

파일의 접근

서로 다른 디렉터리에서 하나의 파일을 공유하고 싶을 때 링크를 사용한다. 
  • `Hard Link`: 원본 파일과 내용이 동일하지만 이름(경로)만 다른 파일
    • 원본 파일과 동일한 inode를 직접적으로 가리킨다. ➡️ 원본 파일이 사라지더라도 데이터만 살아 있다면 원본 파일에 접근 가능
    • 동일한 파일 시스템에서만 하드 링크를 생성할 수 있으며, 디렉터리는 링크할 수 없다.
ln [원본 파일] [대상 파일]
  • `Symbolic Link(Soft Link)`: 포인터(파일의 경로)만 링크
    • 또 다른 inode를 생성해서 이를 바라본다.
    • 파일 시스템과 대상 파일이 존재하는 파일 시스템이 달라도 생성할 수 있으며, 디렉터리도 참조할 수 있다. 
ln -s [원본 파일] [대상 파일(디렉토리)]

 

파일의 보호

리눅스에서는 2가지 방식으로 파일의 접근 권한을 관리한다.
  • `Access Control List(ACL)`: 누가, 어떤 연산을 할 수 있는지 리스트 형식으로 관리한다.

 

  • `접근 권한 비트`: 파일의 소유자, 공유하는 그룹, 기타 사용자들의 접근 권한을 `고정적인 9비트`로 나타냄

 

 

파일의 일관성

  • `fsck(File System Checker)`: 파일에 불일치되는 정보가 있는지 확인해 주는 검사기
    • 문제점
      • 모든 디렉터리 구조를 스캔해야 하기 때문에 상당히 느리다.
      • 파일의 일관성이 깨져있는 것을 탐지해도 복구가 불가능한 경우가 많다.
  • `저널링(Journaling)`: inode나 비트맵의 수정이 있으면 그 내용을 로그로 남긴다.
    • `로그`: 파일 시스템 내 별도의 영역 또는 별도의 저장장치에 기록한다.

  • 로그를 작성하는 중에 크래시가 발생하는 경우: 실제 파일에 반영된 것이 아니기 때문에 일관성이 깨지지 않는다.
  • 실제 파일에 반영하는 도중 크래시가 발생하는 경우: 저널에 기록된 로그를 기반으로 다시 반영하면 된다. 

 

Ref

https://www.youtube.com/watch?v=FiK0Hu5Pr3Q&themeRefresh=1

https://www.youtube.com/watch?v=oeuVjeeoLSQ&themeRefresh=1

https://www.incodom.kr/Linux/%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%8A%A4%ED%85%9C

https://junroot.github.io/programming/%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C/#%ED%8C%8C%EC%9D%BC%EC%9D%98-%ED%95%A0%EB%8B%B9

https://velog.io/@redgem92/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C-inode-%EB%B0%A9%EC%8B%9D%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

'CS' 카테고리의 다른 글

[OS] 접근 통제 정책  (0) 2024.06.18
[OS] Swapping과 Paging  (0) 2024.06.04
[OS] 뮤텍스와 세마포어  (0) 2024.05.12
[OS] 스레드 풀(Thread Pool)  (0) 2024.04.26
[OS] Interrupt와 Context Switching  (0) 2024.04.19
profile

알쓸코지

@chocoji

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!