컴퓨터 지식/Linux&Unix

[Linux]리눅스의 모든 것은 파일로 이루어져있다 - 리눅스 파일 시스템

나맘임 2025. 5. 2. 14:44

들어가며

OS는 파일 시스템이 없다면 작동하지 않는다고 말할 수 있을 정도로 운영체제 그 자체입니다.

그림 1. 바탕화면에 자주 보던 파일들

 

저희가 컴퓨터를 켜면 반겨주는 많은 바탕화면의 아이콘들도 사실은 다 파일들이죠.

이 글에선 우리가 흔히 보던 파일들이 어떤 시스템으로 구성되어 있는지 알아보고자 합니다.

 

매일 쓰던 파일  어떻게 구성되어있을까요??

리눅스에선 파일 시스템은 3개의 계층으로 된 다면적 계층 구조로 되어있습니다. 논리 파일 시스템, 가상 파일 시스템, 물리 파일 시스템으로 구성되어 있습니다.

1. 논리 파일 시스템

기반이 되는 계층으로 논리 파일 시스템이 있습니다. 이 논리 파일 시스템은 사용자 어플리케이션들과 파일 시스템 사이의 인터페이스 역할을 하는데 우리가 알고 있는 파일 열기, 읽기, 닫기 등의 관리 작업들을 수행하는 로직을 제공합니다.

2. 가상 파일 시스템

물리 파일 시스템을 관리하는데 필요한 연산들을 담당하는 부분입니다. 논리 파일 시스템과 물리 파일 시스템 사이에 있으면서 물리 파일 시스템을 추상화해 놓은 인터페이스입니다. 주된 역할은 여러 물리 파일 시스템을 논리 파일 시스템과 연결할 수 있도록 하며 정상적으로 작동하도록 동기화를 한다던가, 다른 물리 파일 시스템이라도 사용자의 입력을 똑같이 작동할 수 있도록 도와줍니다.

3. 물리 파일 시스템

물리 파일 시스템은 말 그대로 물리적인 구성 요소 단계입니다. 디스크에 있는 물리 메모리 블럭 관리하는 역할을 가지고 있습니다. 따라서 저수준의 데이터 읽고 쓰기를 하기 위해 여러 하드웨어랑 통신을 담당합니다.

 

파일 시스템의 여러 주요 특징들

메모리 공간 관리

파일 시스템은 어떻게 하면 메모리 공간을 최대한의 효율로 저장할 수 있도록 설계되었습니다.

파일 이름

파일 시스템은 보통 파일 이름에 제한을 둡니다. 길이, 특정 문자 사용 불가능 등을 두죠.

디렉토리(폴더)

디렉토리 또한 파일의 일종입니다. 다만, 다른 파일이나 디렉토리들을 계층적으로 구성할 수 있는 일종의 컨테이너처럼 작동합니다. 제일 위 계층을 Root 이라고 부르며 /  라고 표시합니다. 나머지 디렉토리는 이 Root 기반으로 트리처럼 계층적 구조를 가지게 됩니다.

메타데이터(Metadata)

모든 각 파일마다 파일 시스템은 그 파일의 정보에 대해 추가로 저장해 둡니다. 이를 메타데이터라고 합니다. 여기엔  파일 길이, 접근 권한, 디바이스 타입, 마지막 변경 날짜 등을 저장합니다.

유틸리티

파일 시스템은 파일 생성,  삭제, 이름 변경, 이동, 복사 등등 다양한 파일 관련 기능들을 제공합니다.

저널링(Journaling)

디스크에 저장하거나 쓰기를 할 땐 언제나 성공한다는 보장이 없습니다. 그래서 문제가 생겼을 때, 롤백할 수 있도록 기록을 남기는데요. 저널링이 바로 그겁니다. 완전히 디스크에 연산이 끝나기 전까지의 기록을 저널이라고 하고 이를 가지고 있다가 만약 에러가 발생하면 다시 롤백을 합니다.

카피-온-라이트(Copy-on-wirte)

저널은 디스크에 기록이 완전히 커밋되기 전까지의 기록을 놔두는 방식이라면, Copy-on-Write는 새로운 위치에 Copy를 만든 뒤에 그걸 수정(Write)하고 link를 변경하는 방식입니다. Write가 끝나기 전까지 변경 사항은 커밋되지 않습니다. 복사본에 만들어서 수정하기 때문에 기존 파일을 건드리지 않습니다.

버저닝(Versioning)

일종의 백업입니다. 이전 파일 버전들의 카피를 따로 저장해 둡니다.

Inode(Index node 줄임말)

파일 시스템에서 파일이나 디렉토리의 메타데이터를 저장하는 데 사용되는 것으로 여기엔 파일 시스템 내에서 파일이나 디렉토리의 실제 데이터 블록에 대한 참조도 저장됩니다. inode는 파일 이름과는 별도로 관리되며 파일이나 디렉토리의 이름은 해당 inode에 대한 포인터로 연결됩니다. 이를 통해 파일 시스템은 inode만 보면 메타데이터를 파악할 수 있게 됩니다.

그림 2. inode를 조회한 모습

 

파일 시스템의 종류들

리눅스는 여러 파일 시스템 종류들을 지원합니다. 각자 다양한 기능들을 가지고 있습니다.

EXT

EXT는 리눅스의 가장 대표적인 파일 시스템입니다. 현재 EXT4 라는 업데이트된 버전을 많이 사용합니다. 리눅스의 기본 파일 시스템으로 안정성이 좋고 저널링을 지원하여 신뢰성과 속도의 밸런스를 잘 잡았다고 평가받는 시스템입니다.

XFS

미디어 서버나 데이터베이스들을 위해 고성능, 고용량 파일을 처리할 수 있도록 설계한 64비트 파일 시스템입니다. 또한 B+Tree를 이용하여 병렬 IO 처리, 확장성을 제공하고 있습니다. 오늘날 대부분의 리눅스 기반 OS에 탑재된 시스템이기도 합니다. CentOS 나 Oracle Linux에선 이를 기본 파일 시스템으로 채택한 경우도 있습니다.

Btrfs

저널링을 사용하지 않고 Copy-on-Write 기법을 사용하는 파일 시스템입니다. 복사본을 통해 수정하는 방식 때문에 기존 파일이 남습니다. 그래서 Snapshot, SubVolumes, Built-In RAID와 같은 특정 상황에서 효과가 좋은 파일 시스템입니다.

ZFS

Btrfs처럼 Copy-on-Write 기법을 사용하는 128비트 파일 시스템입니다. 64비트 파일 시스템보다 엄청나게 많은 양을 처리할 수 있죠. 특히 ZFS는 데이터 무결성에 기능이 강조됐는데 이는 CheckSum 기법을 사용해서 구현하고 있습니다. 그래서 무결성이 중요한 도메인에 매우 특화된 파일 시스템입니다.

 

리눅스 파일 시스템의 EXT4

어째서 왜 리눅스 기본 파일 시스템은 EXT4로 채택된 걸까요?

이걸 알기 위해선 EXT4에 대해 더 알아봐야 합니다.

EXT4가 제공하는 기능들

  • 파일 크기를 16TB까지 지원 + 큰 파일도 메모리 단편화와 성능을 유지할 수 있도록 유틸리티 지원
  • 디스크 메모리 공간을 예약하는 방식으로 연속된 메모리 공간을 미리 확보할 수 있음 => 메모리 단편화 감소, 메모리 Persistence 유지(디스크가 꺼져도 메모리 공간 할당 유지)
  • 지연 할당을 통해 성능 향상과 메모리 단편화 감소
  • HTree 를 사용해서 무한한 서브 디렉토리 생성 가능
  • 저널링을 통한 복구 가능
  • 파일의 타임 스탬프 기록
  • inode 테이블 지연 초기화 => 파일 시스템은 파일을 관리하기 위해 inode 테이블을 구성하는데 이를 처음 시작하자마자 모든 파일의 inode를 처리하는 것이 아니라 프로세스가 요구하는 것만 올려둡니다. 이로써 성능 향상을 노립니다.
  • Writing Barriers 를 이용해서 파일 시스템 메타데이터가 정확히 저장될 수 있도록 합니다.
지연 할당을 하면 왜 성능 향상과 메모리 단편화가 감소되나요?
지연 할당은 어플리케이션이 파일 쓰기를 하고자 할 때, 바로 디스크에 저장하는 것이 아니라 일단 캐시에 이를 저장합니다. 이후에 진짜 쓰기가 끝났을 때, 디스크에 저장하는 방식입니다. 디스크에 최대한 할당을 미루기에 지연 할당이라고 합니다. 디스크에 쓰는 연산은 성능 코스트가 높으므로 여러 번 일어나지 않는 것만으로도 성능 향상이 이루어지는 겁니다.

EXT4의 한계

데이터 무결성 보장은 불가능합니다. EXT4에선 한번 디스크가 오염이 되면 그 데이터가 오염됐는지 아닌지를 파악하거나 고칠 방법이 전혀 없습니다. 또한 파일 삭제에도 사각지대가 있는데, 덮어쓰기를 통해 데이터를 완전히 지우는 기능을 보장하지 못합니다. 저널에 그대로 남아있습니다.

 

 

참고

https://www.geeksforgeeks.org/linux-file-system/

 

Linux File System - GeeksforGeeks

Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.

www.geeksforgeeks.org

https://light-tree.tistory.com/300

 

linux inode란, inode가 부족한 경우

inode는 리눅스와 유닉스 계열 운영 체제에서 파일 시스템에서 사용되는 중요한 개념입니다. index node의 줄임말로, 파일 시스템에서 파일이나 디렉토리의 메타데이터를 저장하는 데 사용됩니다.

light-tree.tistory.com

https://medium.com/naver-cloud-platform/posix-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-1-linux-%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98-%EC%A2%85%EB%A5%98%EC%99%80-%ED%8A%B9%EC%A7%95-96a2e93e33b3

 

POSIX 알아보기 #1 : Linux(리눅스) 파일 시스템의 종류와 특징

애플리케이션 인터페이스 규격 POSIX(파직스)의 등장 배경과 의의부터, 다양한 Linux(리눅스) 파일 시스템의 종류와 특징을 알아보겠습니다.

medium.com