파일 시스템이란?
- `파일`: 데이터, 프로그램 등을 담는 그릇
- `파일 시스템`: 그 그릇들을 관리하는 시스템
- 파일에 이름을 붙이고, 저장/탐색을 위해 파일을 어디에 위치시킬 것인지 나타내는 체계
- 파일들이 디스크 상에서 구성되는 방식
- 파일 시스템은 파일들을 관리할 정보가 필요하다. ➡️ `메타데이터`
- 파일의 이름, 확장자, 권한 정보 등
리눅스의 파일 시스템
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
'CS' 카테고리의 다른 글
[OS] 서버 가상화 (0) | 2024.06.27 |
---|---|
[OS] 접근 통제 정책 (0) | 2024.06.18 |
[OS] Swapping과 Paging (0) | 2024.06.04 |
[OS] 뮤텍스와 세마포어 (0) | 2024.05.12 |
[OS] 스레드 풀(Thread Pool) (0) | 2024.04.26 |