파일 시스템과 파티션1
파일 시스템과 파티션1
목차
- 파일 시스템
파일 시스템과 파티션은 파일 시스템, 파티션, 디렉터리, LVM과 RAID로 항목을 나누어서 순차적으로 정리할 예정이다. 그러나, 이 항목들을 한 페이지상에 담자니 가독성의 문제가 있고, 포스팅이 길어질 수 있기에. linux boot에서 진행된 것처럼, 시리즈로 나누어서 설명하고자 한다. 해당 포스팅에서는 파일 시스템을 다루고, 다음 포스팅부터 파티션, 디렉터리 순으로 다루기로 한다. 그러면, 먼저 파일 시스템부터 시작해보자.
파일 시스템
리눅스 파일 시스템은 데이터를 저장하고 관리하는 체계로, 여러 종류의 파일 시스템이 각각 고유의 특성과 용도를 가지고 있다. 이러한 파일 시스템을 기본 개념과 구조, 주요 파일 시스템 유형, 그리고 파일 시스템 작업 순으로 추가적인 설명을 진행할 것이다.
먼저, 기본 개념부터 정리해보기로 하자.
- 파일 시스템의 기본 개념
- 파일 시스템은 데이터를 조직적으로 저장하고 관리하는 방법을 제공하는 소프트웨어이다. 주로 다음과 같은 기능을 수행한다.
- 데이터 저장 및 검색 : 데이터를 저장하고 필요할 때 이를 빠르게 검색할 수 있도록 구조화한다.
- 파일 및 디렉터리 관리 : 파일과 디렉터리를 생성, 삭제, 수정, 이동, 복사할 수 있다.
- 파일 속성 및 권한 관리 : 파일의 소유자, 그룹, 권한, 시간 등의 메타데이터를 관리한다.
- 저장 공간 관리 : 디스크 공간을 효율적으로 할당하고 관리한다.
- 파일 시스템은 데이터를 조직적으로 저장하고 관리하는 방법을 제공하는 소프트웨어이다. 주로 다음과 같은 기능을 수행한다.
참조
메타 데이터
- 메타 데이터는 파일 자체의 데이터가 아니라, 파일에 대한 정보를 담고 있는 데이터이다. 이는 파일 시스템의 중요한 구성 요소로, 파일의 속성, 위치, 상태 등을 관리한다. 이러한 메타 데이터는 파일 시스템의 효율적인 운영과 파일 관리에 필수적이다.
- 메타 데이터의 주요 구성 요소
- 파일 속성 (Attributes)
- 파일의 이름, 크기, 생성 시간, 수정 시간, 접근 시간 등을 포함함.
- 파일 권한 (Permissions)
- 파일의 소유자, 그룹, 그리고 파일에 대한 읽기, 쓰기, 실행 권한을 정의함.
- 파일 위치 (Location)
- 파일의 실제 데이터가 저장된 데이터 블록(*데이터 블록은 파일 데이터를 저장하는 가장 작은 논리적 단위)의 위치를 가리킴.
- 파일 유형 (File Type)
- 파일이 일반 파일인지, 디렉터리인지, 심볼릭 링크인지 등을 나타냄.
- 링크 정보 (Link Info)
- 파일의 하드 링크와 심볼릭 링크 정보를 포함함.
- 아이노드 번호 (Inode Number)
- 파일의 고유 식별자로, 파일 시스템에서 파일을 식별하는데 사용됨.
- 리눅스 파일 시스템에서의 메타 데이터
- 리눅스 파일 시스템, 특히 ext 계열 파일 시스템에서는 메타데이터가 아이노드(Inode)에 저장된다. 각 파일과 디렉터리는 고유한 아이노드를 가지며, 이 아이노드가 파일의 메타데이터를 저장하는 역할을 한다.
- 아이노드의 구조
- 아이노드에는 다음과 같은 정보가 포함된다.
- 아이노드 번호(Inode Number) : 파일을 식별하는 고유 번호
- 파일 유형 (File Type) : 파일, 디렉터리, 심볼릭 링크 등
- 파일 크기 (File Size) : 파일의 바이트 단위 크기
- 소유자 (Owner) : 파일 소유자의 사용자 ID
- 그룹 (Group) : 파일 소유자의 그룹 ID
- 권한 (Permissions) : 파일의 읽기, 쓰기, 실행 권한
- 타임스탬프 (Timestamps) : 파일의 생성 시간, 마지막 접근 시간, 마지막 수정 시간
- 링크 수 (Link Count) : 파일을 참조하는 하드 링크의 수
- 데이터 블록 포인터 (Data Block Pointers) : 파일의 실제 데이터가 저장된 블록들의 위치를 가리키는 포인터.
- 메타데이터의 역할
- 메타데이터는 파일 시스템의 여러 중요한 작업에 사용된다.
- 파일 탐색 (File Navigation) : 디텍터리 구조를 통해 파일을 찾고 접근하는데 사용된다.
- 파일 접근 제어 (Access Control) : 사용자의 권한을 검사하여 파일에 대한 접근을 제어한다.
- 데이터 무결성 (Data Integrity) : 파일 시스템의 상태를 검사하고 복구하는데 도움을 준다.
- 무결성 : 데이터가 완전한 수명 주기를 가지며, 정확성과 일관성을 유지하고 보증하는 것을 말함. 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 의미함.
- 효율적인 저장 공간 관리 (Efficient Storage Management) : 파일의 위치와 크기를 관리하여 디스크 공간을 효율적으로 사용한다.
- 메타데이터의 예
- 다음은 리눅스에서 ls -l 명령어를 실행했을 때 표시되는 파일의 메타데이터 예시이다.
-rw-r--r-- 1 user group 1024 Jul 28 12:34 example.txt
- 이 출력에는 다음과 같은 메타데이터가 포함된다.
- 파일 유형 및 권한 (-rw-r–r–) : 일반 파일이며 소유자는 읽기/쓰기 가능, 그룹과 다른 사용자들은 읽기만 가능.
- 링크 수 (1) : 이 파일을 참조하는 하드 링크의 수.
- 소유자 (user) : 파일 소유자의 사용자 이름.
- 그룹 (Group) : 파일 소유자의 그룹 이름.
- 파일 크기 (1024) : 파일의 크기 (바이트 단위)
- 최종 수정 시간 (Jul 28 12:34) : 파일의 마지막 수정 시간.
- 파일 이름 (example.txt) : 파일의 이름.
메타데이터는 파일 시스템의 작동을 지원하며, 파일에 대한 다양한 정보를 제공하여 파일 관리, 접근 제어, 데이터 무결성 유지 등에 중요한 역할을 한다.
- 파일 시스템의 구조
- 파일 시스템의 구조는 데이터와 메타데이터를 효율적으로 저장, 관리하기 위해 설계된 계층적 시스템이다. 리눅스 파일 시스템 구조는 여러 중요한 구성 요소로 이루어져 있으며, 각 구성 요소는 특정 역할을 수행한다. 이 구조는 파일의 저장, 접근, 수정, 삭제 등의 작업을 효율적으로 처리할 수 있도록 설계되었다. 아래 구조 그림과 함께 파일 시스템의 주요 구성 요소와 그 역할을 알아보자.
(출처 : https://www.learnlinux.org.za/courses/build/internals/ch08s04.html)
- 슈퍼블록 (Superblock)
- 슈퍼블록은 파일 시스템에 대한 전반적인 정보를 담고 있는 블록이다. 슈퍼블록에는 다음과 같은 정보가 포함된다.
- 파일 시스템의 크기
- 블록 크기
- 사용된 블록 수
- 남은 블록 수
- 파일 시스템의 상태 (정상, 오류 등)
- 파일 시스템을 관리하는 구조 정보 (ex. 블록 그룹 정보)
- 슈퍼블록은 파일 시스템을 초기화할 때 생성되며, 파일 시스템의 무결성을 유지하고 복구하는데 중요한 역할을 한다.
- 슈퍼블록은 파일 시스템에 대한 전반적인 정보를 담고 있는 블록이다. 슈퍼블록에는 다음과 같은 정보가 포함된다.
- 슈퍼블록 (Superblock)
- 아이노드 테이블 (Inode Table)
- 아이노드는 파일이나 디렉터리의 메타데이터를 저장하는 구조체이다. 각 파일과 디렉터리는 고유한 아이노드를 가지며, 아이노드에는 다음과 같은 정보가 포함된다.
- 아이노드 번호
- 파일 유형 (일반 파일, 디렉터리, 심볼릭 링크 등)
- 파일 크기
- 파일 소유자의 사용자 ID(UID)
- 파일 소유자의 그룹 ID(GID)
- 파일 권한 (읽기, 쓰기, 실행)
- 파일의 생성 시간, 마지막 접근 시간, 마지막 수정 시간
- 파일을 참조하는 하드 링크 수
- 파일의 데이터 블록 포인터 (파일의 실제 데이터가 저장된 블록들의 위치)
- 아이노드 테이블은 파일 시스템의 모든 아이노드를 저장하는 테이블로, 각 파일과 디렉터리에 대한 메타데이터를 효율적으로 관리한다.
- 아이노드는 파일이나 디렉터리의 메타데이터를 저장하는 구조체이다. 각 파일과 디렉터리는 고유한 아이노드를 가지며, 아이노드에는 다음과 같은 정보가 포함된다.
- 아이노드 테이블 (Inode Table)
- 데이터 블록 (Data Block)
- 데이터 블록은 실제 파일의 데이터를 저장하는 공간이다. 파일의 내용이 데이터 블록에 저장되며, 아이노드는 이 데이터 블록의 위치를 가리킨다. 데이터 블록은 파일 시스템의 주요 저장 공간으로, 파일의 크기에 따라 여러 데이터 블록이 사용될 수 있다.
- 데이터 블록 (Data Block)
(출처 : https://en.wikipedia.org/wiki/Inode_pointer_structure)
- 디렉터리 엔트리 (Directory Entry)
- 디렉터리 엔트리는 파일 이름과 해당 파일의 아이노드 번호를 매핑하는 정보를 저장한다. 디렉터리는 파일 시스템 내에서 파일과 디렉터리를 조직화하는데 사용되며, 디렉터리 엔트리를 통해 파일 시스템은 파일 이름을 아이노드 번호로 변환하여 파일에 접근할 수 있다.
- 디렉터리 엔트리 (Directory Entry)
- 저널 (Journal)
- 저널은 파일 시스템 변경 사항을 먼저 기록하는 공간이다. 저널링 파일 시스템은 데이터 변경 작업을 먼저 저널에 기록한 후 파일 시스템에 반영하여 데이터 무결성을 보장한다. 시스템 충돌이나 정전 등의 문제가 발생했을 때, 저널을 사용하여 파일 시스템을 복구할 수 있다. ex: ext3, ext4, XFS, Btrfs 등이 저널링 기능을 지원한다.
- 저널 (Journal)
- 블록 그룹 (Block Group)
- 블록 그룹은 파일 시스템을 관리하기 쉽게 여러 그룹으로 나눈 것이다. 각 블록 그룹은 자체 슈퍼 블록 복사본, 아이노드 테이블, 데이터 블록 등을 포함한다. 블록 그룹 구조는 파일 시스템의 성능을 최적화하고, 특정 영역에서의 데이터 집중을 방지하여 디스크의 균형 잡힌 사용을 돕는다.
- 블록 그룹 (Block Group)
- 파일 시스템의 작동 예시
- 파일 생성
- 새로운 파일을 생성하면 파일 시스템은 새로운 아이노드를 할당하고, 파일의 메타데이터를 저장한다.
- 데이터 블록을 할당하여 파일의 내용을 저장하고, 디렉터리 엔트리에 파일 이름과 아이노드 번호를 기록한다.
- 파일 생성
- 파일 읽기
- 파일 시스템은 디렉터리 엔트리를 통해 파일 이름을 아이노드 번호로 변환한다.
- 아이노드 테이블에서 해당 아이노드를 찾아 파일의 메타데이터를 읽고 데이터 블록 포인터를 통해 파일의 실제 데이터를 읽는다.
- 파일 읽기
- 파일 삭제
- 파일의 아이노드 번호를 통해 아이노드를 찾고, 해당 아이노드와 데이터 블록을 해제한다.
- 디렉터리 엔트리에서 파일 이름과 아이노드 번호를 제거한다.
- 파일 삭제
- 파일 시스템 구조 다이어그램
- 파일 시스템의 주요 구성 요소와 그 관계를 시각적으로 표현한 다이어그램을 참조로 추가하여 기록해둔다. 각 구성 요소는 파일 시스템의 특정 역할을 수행하며, 데이터의 저장과 관리를 효율적으로 처리한다.
- 주요 파일 시스템 유형
- 리눅스에서 사용되는 주요 파일 시스템 유형은 다음과 같다.
- ext2 (Second Extended File System)
- 특징 : 저널링 기능이 없는 기본적인 파일 시스템
- 장점 : 안정적이고 성능이 좋음.
- 단점 : 시스템 충돌 시 데이터 복구가 어려움.
- 리눅스에서 사용되는 주요 파일 시스템 유형은 다음과 같다.
- ext3 (Third Extended File System)
- 특징 : ext2의 개선 버전으로, 저널링 기능을 추가.
- 장점 : 데이터 무결성 보장, 시스템 충돌 시 빠른 복구 가능.
- 단점 : ext4에 비해 성능이 떨어질 수 있음.
- ext4 (Fourth Extended File System)
- 특징 : ext3의 발전된 버전으로, 큰 파일과 파일 시스템을 지원.
- 장점 : 저널링 기능, 큰 파일 지원, 향상된 성능과 안정성.
- 단점 : 일부 구형 시스템에서는 지원하지 않을 수 있음.
- XFS
- 특징 : 고성능 64비트 저널링 파일 시스템.
- 장점 : 대용량 파일 시스템과 파일 처리에 최적화, 빠른 성능.
- 단점 : 관리가 복잡할 수 있음.
- Btrfs (B-tree File System)
- 특징 : 작은 파일 처리에 최적화된 저널링 파일 시스템.
- 장점 : 빠른 파일 접근 속도, 효율적인 디스크 공간 사용.
- 단점 : 최근에는 업데이트가 거의 없음.
- JFS (Journaled File System)
- 특징 : IBM이 개발한 저널링 파일 시스템.
- 장점 : 대용량 파일 시스템과 빠른 성능.
- 단점 : ext4와 비교했을 때 덜 널리 사용됨.
- ReiserFS
- 특징 : 작은 파일 처리에 최적화된 저널링 파일 시스템.
- 장점 : 빠른 파일 접근 속도, 효율적인 디스크 공간 사용.
- 단점 : 최근에는 업데이트가 거의 없음.
- 파일 시스템 작업
- 파일 시스템 생성
- 명령어 : mkfs
- ex : mkfs.ext4 /dev/sda1 (ext4 파일 시스템 생성).
- 파일 시스템 마운트
- 명령어 : mount
- ex : mount /dev/sda1 /mnt (디바이스를 /mnt 디렉터리에 마운트)
- 파일 시스템 언마운트
- 명령어 : unmount
- ex : unmount /mnt
- 파일 시스템 검사
- 명령어 : fsck
- ex : fsck /dev/sda1
- 파일 시스템 정보 확인
- 명령어 : df, du
- ex : df -h (디스크 사용량 확인), du -sh /mnt (디렉터리 크기 확인)
- 파일 시스템 생성
- 고급 기능
- 저널링
- 파일 시스템 변경 사항을 먼저 저널에 기록한 후 파일 시스템에 반영함.
- ex : ext3, ext4, XFS, Btrfs 등이 저널링 기능을 지원함.
- 스냅샷
- 파일 시스템의 상태를 특정 시점으로 저장하여 복구할 수 있게 함.
- ex : Btrfs, LVM 스냅샷
- 압축 및 암호화
- 파일 시스템 자체에서 데이터 압축과 암호화를 지원함.
- ex : Btrfs의 데이터 압축, eCryptfs (암호화된 파일 시스템)
- RAID 기능
- 여러 디스크를 결합하여 데이터 안정성과 성능을 향상시키는 RAID 기능을 지원.
- ex : Btrfs, LVM
- 저널링
- 파일 시스템 관리
- 파일 시스템 백업
- 정기적으로 파일 시스템을 백업하여 데이터 손실 방지.
- ex : rsync, tar, dd 명령어 사용.
- 파일 시스템 최적화
- 디스크 조각 모음을 통해 파일 시스템 성능을 최적화.
- ex : e4defrag, xfs_fsr 등
- 파일 시스템 모니터링
- 파일 시스템의 상태와 성능을 모니터링하여 문제를 사전에 예방함.
- ex : iostat, df, du, tune2fs 등
- 파일 시스템 백업
리눅스 파일 시스템은 데이터의 저장과 관리에 핵심적인 역할을 하며, 다양한 유형과 고급 기능을 통해 효율성과 안정성을 제공한다. 이러한 파일 시스템의 이해와 관리 방법을 숙지하면, 시스템의 성능과 데이터 무결성을 유지할 수 있다.
This post is licensed under CC BY 4.0 by the author.