리눅스 마스터 1급 ext 파일시스템 및 기타 파일 시스템
1.파일 시스템
- EXT 파일 시스템
우선 요약으로 대충 내용을 익히고 자세히 알아보겠읍니다.
파일 시스템 | 출시 연도 | 최대 파일 크기 | 최대 파일 시스템 크기 | 저널링 지원 | 주요 특징 |
Ext | 1992 | 2GB | 2GB | 아니요 |
리눅스 최초의 파일 시스템, 기본 기능 제공
|
Ext2 | 1993 | 2TB | 32TB | 아니요 |
저널링 미지원, 빠른 성능과 낮은 오버헤드, 주로 임베디드 시스템에서 사용
|
Ext3 | 2001 | 2TB | 32TB | 예 |
저널링 지원으로 데이터 복구 기능 강화, Ext2와의 호환성 유지
|
Ext4 | 2008 | 16TB | 1EB | 예 |
성능 향상, 대용량 파일 및 디렉토리 지원, 고급 기능 도입 (지연 할당, 멀티블록 할당 등)
|
* 저널링이란?
- 파일 시스템의 데이터 무결성과 안정성을 향상시키기 위한 기술.
- 저널링을 사용하는 파일 시스템은 데이터를 디스크에 기록하기 전에 로그(저널)에 변경 사항을 기록.
- 저널링시스템은 충돌이나 전원 손실과 같은 갑작스러운 중단이 발생할 경우 파일 시스템을 빠르고 안전하게 복구.
EXT(Extended File System)은 리눅스 커널에 사용되는 파일 시스템의 종류 중 하나로,
리눅스에서 가장 널리 사용되는 파일 시스템 계열입니다.
하나씩 자세히 알아보겠읍니다.
EXT (Extended File System 1)
출시 연도: 1992년
개발자: Rémy Card
특징:
- 리눅스의 첫 번째 파일 시스템으로, 리눅스 커널 0.96c에서 처음으로 도입되었습니다.
- 이 파일 시스템은 당시 다른 파일 시스템보다 우수한 기능을 제공했으며, 유닉스 파일 시스템과 호환성을 유지했습니다.
- 최대 파일 시스템 크기는 2GB, 파일 크기는 2GB로 제한되어 있습니다.
- 고정된 인덱스 노드(inode) 테이블을 사용하였고, 부팅 중에 전체 파일 시스템을 검사해야 했기 때문에 대용량 파일 시스템에서는 성능 저하가 발생할 수 있었습니다.
- 단점: EXT1은 제한된 기능과 용량으로 인해 현대적인 시스템에서는 거의 사용되지 않습니다.
EXT2 (Second Extended File System)
출시 연도: 1993년
개발자: Rémy Card
특징:
- EXT1의 후속 버전으로, EXT2는 리눅스의 주요 파일 시스템으로 자리 잡았습니다.
- 저널링 기능이 없으며, 파일 시스템의 손상 복구 시 시간이 많이 걸릴 수 있습니다.
- 최대 파일 크기는 16GB, 파일 시스템 크기는 2TB로 EXT1보다 큰 파일과 파일 시스템을 지원합니다.
- 동적 inode 할당 방식을 사용하여 디스크 공간을 효율적으로 관리할 수 있습니다.
- 시스템 충돌 후 fsck (파일 시스템 검사)를 통해 복구하는 데 시간이 많이 소요될 수 있지만, 저널링이 없기 때문에 더 빠른 쓰기 성능을 제공했습니다.
- 여전히 일부 임베디드 시스템이나 플래시 메모리 장치에서 사용될 수 있습니다.
EXT3 (Third Extended File System)
출시 연도: 2001년
개발자: Stephen Tweedie
특징:
- EXT2의 개선판으로, 저널링 기능이 추가되어 데이터 손실 위험을 크게 줄였습니다.
- 저널링을 통해 파일 시스템 충돌 후 복구 시간을 크게 단축할 수 있습니다.
- EXT2와의 하위 호환성을 제공하며, EXT2 파일 시스템을 손쉽게 EXT3로 업그레이드할 수 있습니다.
- 최대 파일 크기는 2TB, 파일 시스템 크기는 32TB로 확장되었습니다.
- 3가지 저널링 모드를 지원: Writeback, Ordered, Journal.
- Writeback: 메타데이터만 저널링하고 데이터는 저널링하지 않아 빠른 성능을 제공하지만, 데이터 손실의 위험이 있습니다.
- Ordered: 데이터와 메타데이터의 순서를 유지하며, 데이터가 디스크에 기록된 후 메타데이터를 저널링합니다. 성능과 안정성 간의 균형을 제공합니다.
- Journal: 데이터와 메타데이터를 모두 저널링하여 최고의 데이터 보호를 제공합니다.
- 단점: 기본 구조는 EXT2와 유사하므로 대용량 파일 시스템에서의 성능 최적화는 제한적입니다.
EXT4 (Fourth Extended File System)
출시 연도: 2008년
개발자: Theodore Ts'o
특징:
- EXT3의 후속 버전으로, 성능과 안정성이 크게 개선되었습니다.
- 주요 기능으로는 Extents(연속적인 블록을 하나의 블록으로 묶어 관리), 지연 할당(디스크에 기록하기 전에 메모리에 데이터를 더 오래 보관하여 디스크 I/O를 최적화), 다중 블록 할당(multi-block allocation), 빠른 파일 시스템 검사, 그리고 저널링 체크섬이 포함됩니다.
- 최대 파일 크기는 16TB, 파일 시스템 크기는 1EB(엑사바이트)로 EXT3보다 훨씬 큰 파일과 파일 시스템을 지원합니다.
- 빠른 fsck, 저널링 데이터 무결성 보호(저널링 체크섬), 향상된 시간 스탬프(나노초 단위 지원) 등 다양한 개선 사항이 포함되었습니다.
- 기존 EXT3에서 EXT4로의 마이그레이션이 가능하며, EXT4는 기본적으로 대부분의 리눅스 배포판에서 기본 파일 시스템으로 채택되었습니다.
- Extents: 파일의 블록들을 연속적인 블록으로 관리하여 파일의 조각화 문제를 줄이고 성능을 향상시킵니다.
- Scalable Block Group (FlexBG): 블록 그룹 간의 유연성을 높여 디스크 공간 사용 효율을 극대화합니다.
EXT4와 EXT3의 차이점
- 성능: EXT4는 EXT3보다 더 높은 성능을 제공합니다. 특히 대용량 파일 처리와 관련하여 뛰어난 성능을 보입니다.
- 저널링: EXT4는 저널링 체크섬을 통해 저널링의 무결성을 추가로 보호합니다.
- 파일 크기 및 파일 시스템 크기: EXT4는 더 큰 파일과 파일 시스템을 지원합니다.
저널링의 작동 방식
- 저널에 기록: 파일 시스템에서 변경이 필요할 때, 먼저 그 변경 사항을 저널이라는 특별한 영역에 기록합니다. 이 저널은 파일 시스템의 변경 내역을 순차적으로 저장하는 로그 파일과 유사합니다.
- 변경 적용: 저널에 기록된 후에 실제로 파일 시스템에 변경이 적용됩니다. 만약 변경 도중에 시스템이 중단되면, 저널에 기록된 내용을 바탕으로 파일 시스템을 복구할 수 있습니다.
- 저널 삭제: 변경이 성공적으로 적용되면, 저널에서 해당 로그를 삭제하거나 무효화합니다.
저널링의 장점
- 데이터 무결성 향상: 갑작스러운 전원 꺼짐이나 시스템 충돌 같은 예기치 않은 문제로 인해 파일 시스템이 손상될 위험을 줄입니다. 파일 시스템이 다시 시작될 때 저널을 검사하여 중단된 작업을 복구하거나 무효화합니다.
- 빠른 복구 시간: 저널링 파일 시스템은 비저널링 파일 시스템보다 훨씬 빠르게 복구할 수 있습니다. 시스템 충돌 후 재부팅할 때 전체 파일 시스템을 검사할 필요 없이 저널만 검사하면 되기 때문입니다.
- 안전한 데이터 쓰기: 저널에 데이터를 먼저 기록하고 나서 변경을 적용하는 방식이기 때문에 데이터 손실이 발생할 확률이 적습니다.
저널링의 유형
저널링에는 몇 가지 유형이 있으며, 파일 시스템에 따라 다르게 구현될 수 있습니다:
- Write-ahead logging (쓰기 전 기록): 변경을 파일 시스템에 적용하기 전에 모든 변경 사항을 저널에 기록합니다.
- Ordered journaling (순차적 저널링): 데이터 블록이 디스크에 기록되기 전에 저널에 메타데이터(파일 시스템 구조에 대한 정보)만 기록합니다.
- Data journaling (데이터 저널링): 메타데이터뿐만 아니라 실제 데이터 블록도 저널에 기록합니다. 가장 안전하지만 성능 오버헤드가 큽니다.
저널링이 사용되는 파일 시스템
리눅스에서는 Ext3, Ext4, XFS, JFS, Btrfs 등 많은 파일 시스템이 저널링을 지원합니다. 이러한 파일 시스템은 주로 서버나 중요한 데이터를 저장하는 시스템에서 데이터 무결성을 보장하기 위해 사용됩니다.
기타 파일 시스템
- Btrfs (B-Tree 파일 시스템)
출시 연도: 2007년
개발자: Oracle, Red Hat, Facebook, SUSE, Fujitsu 등
특징:
- Copy-on-Write (CoW): Btrfs는 데이터 수정 시 원본 데이터를 보존하고 변경 사항을 새로운 위치에 기록하는 CoW 방식을 사용하여 데이터 무결성을 유지합니다.
- 스냅샷: 스냅샷 기능을 통해 파일 시스템의 특정 시점 상태를 저장할 수 있습니다. 이는 백업과 복구 작업에 유용하며, 스냅샷 간의 차이만 저장하여 저장 공간을 절약합니다.
- 서브볼륨: Btrfs는 서브볼륨(Subvolume)을 지원하여 하나의 파일 시스템 안에서 여러 개의 파일 시스템을 운영하는 것처럼 사용할 수 있습니다.
- 압축: 데이터 압축 기능을 제공하여 디스크 공간을 절약할 수 있습니다.
- RAID 지원: RAID 0, 1, 5, 6, 10과 같은 다양한 RAID 레벨을 지원합니다. 이는 파일 시스템 자체에서 소프트웨어 RAID를 관리할 수 있도록 합니다.
- 디스크 관리: 온디스크 포맷이 고정되어 있지 않으며, 파일 시스템이 온라인 상태에서 디스크를 추가하거나 제거할 수 있습니다.
- ZFS (Zettabyte File System)
출시 연도: 2005년
개발자: Sun Microsystems (현재 Oracle 소유)
특징:
- 고용량 지원: ZFS는 매우 큰 데이터 세트를 처리할 수 있도록 설계되었으며, 이름에서 알 수 있듯이 제타바이트(Zettabyte) 단위의 데이터를 관리할 수 있습니다.
- Copy-on-Write (CoW): Btrfs와 마찬가지로 CoW 방식을 사용하여 데이터 무결성을 보장합니다.
- 스냅샷 및 복제: ZFS는 효율적인 스냅샷과 복제 기능을 제공하여 데이터 복구 및 백업에 유리합니다.
- 풀링 (Pooling): ZFS는 기존의 디스크 파티셔닝 개념을 제거하고, 모든 디스크를 하나의 스토리지 풀로 관리합니다. 이 풀에서 자유롭게 저장 공간을 할당할 수 있습니다.
- 데이터 무결성: 데이터가 디스크에 쓰여질 때마다 체크섬을 생성하여 데이터 손상을 탐지하고, 필요 시 자동으로 복구합니다.
- RAID-Z: ZFS는 RAID-Z라는 고유의 RAID 방식을 사용하여 RAID 5에서 발생할 수 있는 쓰기 구멍 문제를 해결합니다.
- 데이터 압축 및 중복 제거: ZFS는 실시간 데이터 압축과 중복 제거 기능을 제공하여 스토리지 효율성을 극대화합니다.
- ReiserFS
출시 연도: 2001년
개발자: Hans Reiser 및 Namesys
특징:
- 저널링: ReiserFS는 저널링 파일 시스템으로, 파일 시스템 충돌 후 빠른 복구를 지원합니다.
- 작은 파일에 최적화: ReiserFS는 특히 작은 파일의 성능이 우수하며, 작은 파일을 효율적으로 저장할 수 있는 구조를 가지고 있습니다.
- B+ 트리 구조: 파일 및 디렉터리를 B+ 트리 구조로 관리하여 빠른 탐색 및 접근을 지원합니다.
- 동적 inode 할당: 디스크 공간을 보다 효율적으로 사용할 수 있게 합니다.
- Reiser4: ReiserFS의 후속 버전으로, 더 나은 성능과 기능을 제공하지만, 리눅스 커널에 공식적으로 포함되지 않아 제한적으로 사용됩니다.
- XFS
출시 연도: 1994년
개발자: Silicon Graphics (SGI)
특징:
- 고성능: XFS는 대용량 파일과 고성능이 요구되는 환경에 적합하도록 설계되었습니다. 특히 병렬 I/O 작업에서 뛰어난 성능을 보입니다.
- 저널링: XFS는 저널링을 사용하여 데이터 무결성을 유지하며, 특히 메타데이터의 저널링에 중점을 둡니다.
- 확장성: XFS는 매우 큰 파일 시스템과 파일을 지원하며, 파일 시스템 크기는 8EB(엑사바이트), 파일 크기는 8EB까지 지원합니다.
- 동적 디스크 확장: XFS는 파일 시스템을 온라인 상태에서 동적으로 확장할 수 있습니다.
- 데이터 스트라이핑: XFS는 소프트웨어 RAID와 함께 사용될 때 I/O 성능을 극대화할 수 있는 데이터 스트라이핑 기능을 제공합니다.
- 디스크 조각화 방지: XFS는 파일 조각화를 줄이기 위한 다양한 최적화 기능을 제공합니다.
- JFS (Journaled File System)
출시 연도: 1990년대
개발자: IBM
특징:
- 저널링: JFS는 저널링 파일 시스템으로, 메타데이터의 저널링을 통해 데이터 무결성을 유지합니다.
- 고성능: JFS는 낮은 CPU 사용률과 빠른 파일 시스템 복구 시간을 제공하며, 대용량 파일 시스템에서 효율적입니다.
- 확장성: JFS는 최대 4PB(페타바이트)까지 파일 시스템을 지원하며, 파일 크기도 최대 4PB까지 지원합니다.
- 디스크 조각화 방지: JFS는 디스크 조각화 방지 기능이 우수하여, 파일 시스템 성능을 장기간 유지할 수 있습니다.
- 빠른 복구: 시스템 충돌 후 빠른 복구가 가능하여, 서버 환경에서 안정적으로 사용됩니다.
- 저자원 사용: CPU와 메모리 자원을 적게 사용하여, 리소스가 제한된 환경에서도 효과적으로 운영될 수 있습니다.
결론
이들 파일 시스템은 각각 고유한 특성과 강점을 가지고 있어, 특정 용도와 환경에 따라 적합한 파일 시스템을 선택할 수 있습니다.
예를 들어, 고성능 서버에서는 XFS나 ZFS가 많이 사용되며, 데이터 무결성이 중요할 경우 Btrfs나 ZFS가 선택될 수 있습니다. 작은 파일 처리에 최적화된 ReiserFS, 대규모 스토리지에 강한 JFS 등 다양한 선택지가 존재합니다.