리눅스 파일 시스템은 리눅스 운영 체제에서 파일과 디렉토리(폴더)를 저장하고 조직하는 방법을 정의한다. 이 시스템은 사용자 데이터와 시스템 데이터를 효율적으로 관리하고, 다양한 저장 장치(하드 드라이브, SSD, USB 드라이브 등)에 대한 접근을 가능하게 한다.
리눅스 파일 시스템은 계층적인 구조를 가지고 있다. 모든 파일과 디렉토리는 단일 루트(/)에서 시작되며, 이 루트 아래에 여러 하위 디렉토리가 위치한다. 이 구조는 파일의 위치를 쉽게 찾을 수 있도록 도와준다.
리눅스에서는 여러 종류의 파일 타입을 지원한다. 일반 파일, 디렉토리, 심볼릭 링크, 디바이스 파일(문자 및 블록 디바이스) 등이 있으며, 각 파일 타입은 파일 시스템 내에서 다른 목적으로 사용된다.
리눅스 파일 시스템은 사용자와 그룹 기반의 권한 시스템을 사용하여 파일과 디렉토리에 대한 액세스를 제어한다. 파일 소유자, 소유자가 속한 그룹, 그리고 시스템의 나머지 사용자들에게 다른 권한(읽기, 쓰기, 실행)을 부여할 수 있다.
Ext4: 현재 가장 널리 사용되는 리눅스 파일 시스템이다. 대용량 파일 시스템과 파일을 지원하며, 저널링 기능을 통해 시스템 충돌 후 복구 시간을 단축할 수 있다.
XFS: 대규모 파일 시스템에 적합한 고성능 파일 시스템이다. 병렬 I/O 처리를 위해 설계되었으며, 대용량 데이터를 효율적으로 처리할 수 있다.
Btrfs: 'B-tree 파일 시스템'으로 불리며, 스냅샷, 데이터 복구, 동적 인-플레이스 확장 등 고급 기능을 제공한다. 현재 개발 중이며, 안정성이 계속 향상되고 있다.
리눅스에서는 파일 시스템을 마운트하여 사용한다. 마운트는 특정 저장 장치의 파일 시스템을 파일 시스템 계층 구조의 특정 지점에 연결하는 과정을 의미한다. 이를 통해 사용자는 여러 저장 장치에 걸쳐 있는 파일을 마치 하나의 디렉토리 구조 안에서 접근하는 것처럼 사용할 수 있다.
리눅스 파일 시스템은 유연성과 확장성을 제공하며, 다양한 스토리지 요구 사항과 환경에 맞게 설계되어 있다. 이러한 특성 덕분에 리눅스는 개인용 컴퓨터부터 대규모 서버 환경까지 다양한 분야에서 사용될 수 있다.
리눅스 파일 시스템에서 데이터는 파일에 포함된 실제 정보를 의미한다. 이는 문서의 텍스트, 이미지 파일의 픽셀 데이터, 실행 파일의 코드 등이 될 수 있다. 파일 시스템은 이러한 데이터를 저장하고, 필요할 때 사용자나 애플리케이션에 제공하는 역할을 한다.
메타데이터는 데이터에 대한 데이터로, 파일 자체의 내용은 아니지만 파일을 관리하고 이해하는 데 필요한 정보이다. 리눅스 파일 시스템에서 파일 또는 디렉토리의 메타데이터에는 다음과 같은 정보가 포함될 수 있다.
쿼터는 파일 시스템에서 사용자 또는 그룹별로 사용할 수 있는 디스크 공간의 양을 제한하는 기능이다. 시스템 관리자는 쿼터를 설정하여 특정 사용자나 그룹이 할당된 디스크 공간을 초과하여 사용하지 못하도록 할 수 있다.
저널링 파일 시스템은 파일 시스템의 변경 사항(데이터의 업데이트, 파일의 추가 및 삭제 등)을 파일 시스템에 적용하기 전에, 먼저 '저널'이라고 하는 특별한 영역에 기록한다. 이후 실제 파일 시스템에 변경 사항을 적용한다. 시스템 충돌이나 전원 문제로 인해 시스템이 예기치 않게 중단되더라도, 저널에 기록된 정보를 사용하여 파일 시스템을 안정적인 상태로 복구할 수 있다.
저널링을 사용하는 대표적인 파일 시스템으로는 Ext3, Ext4, XFS, NTFS 등이 있다.
COW 데이터를 변경할 때 원본 데이터를 직접 수정하는 대신, 변경된 데이터를 새로운 위치에 저장하고, 데이터의 포인터를 새로운 위치로 업데이트하는 기술이다. 원본 데이터는 변경되지 않고 유지되므로, 데이터의 이전 상태를 보존하고 시스템 충돌이나 오류가 발생했을 때 원본 데이터로 쉽게 복구할 수 있다. 또한, 여러 버전의 데이터를 효율적으로 관리할 수 있어 스냅샷 기능을 구현하는 데 유리하다.
Copy-On-Write를 사용하는 대표적인 파일 시스템으로는 ZFS, Btrfs 등이 있으며, 이러한 파일 시스템은 데이터 무결성 검증, 스냅샷, 동적 볼륨 확장과 같은 고급 기능을 제공한다.
데이터 복구: 저널링은 시스템 충돌 후 데이터의 빠른 복구를 위해 설계되었으며, 저널에 기록된 정보를 사용하여 파일 시스템의 일관성을 유지한다. 반면, COW는 데이터의 이전 상태를 보존하며, 이를 통해 데이터의 복구 또는 여러 버전의 데이터를 유지할 수 있다.
성능: 저널링은 모든 변경 사항을 먼저 저널에 기록한 후 실제 데이터를 업데이트하기 때문에, 작은 파일 변경에서는 성능 저하가 발생할 수 있다. COW는 변경된 데이터를 새로운 위치에 기록하기 때문에, 큰 파일의 변경이나 스냅샷 생성 시에 더 효율적일 수 있다.
용도: 저널링은 일반적인 사용자 데이터와 시스템 데이터의 안정성과 빠른 복구에 중점을 둔다. COW는 데이터의 버전 관리, 스냅샷, 높은 수준의 데이터 무결성을 필요로 하는 환경에 적합하다.
정의 및 특징: 캐릭터 장치는 데이터를 한 번에 한 문자(character)씩 순차적으로 처리한다. 이러한 장치는 흔히 '스트림'으로 데이터를 처리하며, 키보드나 마우스, 시리얼 포트 같은 입력/출력 장치에 사용된다.
접근 방식: 캐릭터 장치는 일반적으로 버퍼링되지 않은 입력/출력을 제공한다. 즉, 읽기와 쓰기 작업이 바로 장치로 전달되어 처리된다.
예시: /dev/tty (터미널 장치), /dev/null (데이터를 소멸시키는 장치), /dev/random (임의의 수를 생성하는 장치) 등이 있다.
정의 및 특징: 블록 장치는 데이터를 고정된 크기의 블록 단위로 저장하고 접근한다. 이러한 장치는 디스크 드라이브와 같이 대량의 데이터를 저장하는 데 적합하며, 무작위 접근(random access)이 가능하다.
접근 방식: 블록 장치는 데이터를 블록 단위로 버퍼링하여 처리한다. 이는 데이터의 읽기 및 쓰기 작업을 효율적으로 만들어 준다. 파일 시스템이 이러한 장치 위에 구축될 수 있다.
예시: 하드 디스크 드라이브(/dev/sda), SSD(/dev/nvme0n1), USB 드라이브 등이 있다.
메모리 기반 파일 시스템은 주 메모리(RAM)를 사용하여 파일 시스템을 구현한 것이다. 이러한 파일 시스템은 디스크 기반의 저장 장치보다 훨씬 빠른 입출력(I/O) 성능을 제공한다. 하지만, 전원이 꺼지면 저장된 데이터가 소실되는 휘발성(volatile)의 특성을 가지고 있다. 메모리 기반 파일 시스템의 일반적인 용도는 임시 파일 저장, 고속 캐싱, 시스템 부팅 과정의 속도 향상 등이다.
네트워크 파일 시스템은 네트워크를 통해 여러 컴퓨터 간에 파일을 공유할 수 있게 해주는 파일 시스템이다. 클라이언트 컴퓨터는 네트워크를 통해 연결된 서버의 파일 시스템에 접근하여, 로컬 파일 시스템처럼 파일을 읽고 쓸 수 있다. 이를 통해 사용자는 네트워크상의 다른 컴퓨터에 있는 데이터에 접근하고 공유할 수 있다.
가상 파일 시스템은 다양한 유형의 파일 시스템을 추상화하여 단일 일관된 인터페이스를 제공하는 시스템이다. VFS는 운영 체제의 커널에 구현되며, 사용자 및 응용 프로그램이 실제 파일 시스템의 구체적인 구현과 상관없이 파일 시스템에 접근할 수 있게 해준다. 이를 통해 하드 디스크, 네트워크 파일 시스템, 메모리 기반 파일 시스템 등 다양한 파일 시스템을 동일한 방식으로 사용할 수 있다.
Btrfs (B-tree File System)는 리눅스를 위해 설계된 현대적인 파일 시스템이다. Oracle이 주도하여 개발되었으며, 고급 기능과 유연성을 제공하는 것을 목표로 한다. Btrfs는 향상된 저장 관리, 신뢰성 및 확장성을 제공하여 기업 환경과 대규모 스토리지 인프라의 요구 사항을 충족시키기 위해 개발되었다.
COW (Copy-On-Write): Btrfs는 복사 후 쓰기 방식을 사용하여 데이터와 메타데이터를 관리한다. 이는 스냅샷 생성과 데이터 복구를 용이하게 하며, 데이터 무결성을 보장하는 데 도움을 준다.
스냅샷과 서브볼륨: Btrfs는 파일 시스템 또는 서브볼륨 단위로 스냅샷을 생성할 수 있다. 스냅샷은 데이터의 특정 시점을 기록한 것으로, 데이터 복구나 백업에 유용하게 사용된다. 서브볼륨은 물리적 파티션과 독립적으로 운영되는 논리적 파티션으로, 각각의 서브볼륨에 대해 다른 마운트 옵션을 설정할 수 있다.
동적 인라인 확장: Btrfs 파일 시스템은 필요에 따라 동적으로 크기를 확장하거나 축소할 수 있다. 이는 스토리지 관리를 효율적으로 만들어 준다.
데이터 및 메타데이터 체크섬: Btrfs는 데이터 및 메타데이터의 체크섬을 생성하여 저장함으로써 데이터 무결성을 검증한다. 이는 손상된 데이터를 감지하고, 가능한 경우 복구하는 데 도움을 준다.
레이드 지원: Btrfs는 소프트웨어 레벨에서 RAID 0, RAID 1, RAID 10, RAID 5, RAID 6를 지원한다. 이를 통해 데이터 미러링, 스트라이핑, 패리티를 사용하여 데이터의 신뢰성과 성능을 향상시킬 수 있다.