Linux Category에 들어갈 내용은 아니지만, Linux에 대해 정리하다가 생각나서 File System 에 대해 정리.
파일 시스템
파일 시스템(File System)은 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체계를 가리키는 말이다. 통상적으로 하드디스크나 CD-ROM 같은 물리적인 저장장치를 이용하여 관리하는 것을 가리킨다.
파일 시스템은 일반적으로 크기가 일정한 블록들의 배열(섹터라고도 불림)에 접근할 수 있는 자료 보관 장치 위에 생성되어 이러한 배열들을 조직함으로 파일이나 디렉토리를 만들며 어느 부분이 파일이고 어느 부분이 공백인지를 구분하기 위하여 각 배열에 표시를 해 둔다. 또한, 자료를 '클러스터' 또는 '블록'이라고 불리는 일정한 단위(통상 1~64)에 새겨넣는데 이것이 바로 파일 하나가 필요로 하는 디스크의 최소 공간이다.
파일에 이름이 존재함은 컴퓨터 메모리 안에서 해당 파일의 소재 위치를 보장하기 위함이고, 파일 시스템 안에서 디렉토리는 통상 파일 이름과 해당 파일을 연결해 주는데 도스의 FAT나 유닉스 계열 OS의 I-Node 의 경우 파일 이름을 색인과 연결한다.
파일 시스템 종류
모든 파일 시스템의 종류를 살펴볼 순 없고, 많이 몇 개만 뽑아서 정리하였다.
디스크 파일 시스템
(1) FAT
파일 할당 테이블(File Allocation Table, FAT)은 디지털 카메라 등에 장착되는 대부분의 메모리 카드와 수많은 컴퓨터 시스템에 널리 쓰이는 컴퓨터 파일시스템 구조(architecture)이다. FAT 파일 시스템은 상대적으로 간단하기 때문에 다른 수많은 휴대용 기기에서 흔하게 볼 수 있다. FAT의 성능은 다른 대부분의 파일 시스템에 견주어 좋지 않은 평을 받는다. 그 까닭은 운영 시간을 낭비하게 만드는 너무나도 단순한 자료 구조를 이용하고 조그마한 파일이 많이 있으면 디스크 공간을 잘 활용하지 못하기 때문이다.
크게 FAT12, FAT16, FAT32로 나뉘는데, 뒤의 숫자는 최대 표현 가능한 클러스터의 수를 비트 수로 나타낸 것이다.
예를들어 FAT12는 최대 2^12개의 클러스터를 표현할 수 있다.(예약된 클러스터 12개 제외하고 2^12 - 12 개의 클러스터를 표현 가능하다.)
(2) ext4
ext4(extended file system 4, 확장된 파일 시스템4)는 리눅스의 저널링 파일 시스템 중 하나로, ext3 파일 시스템의 향상된 버전이다.
- ext2 : Block Mapping
가장 중요한 특징으로는 파일을 저장할 때, Block Mapping 방식을 사용한다는 것이다.
위의 그림처럼 inode 1번부터 12번까지는 하나의 파일에 매핑을 한다. 하지만, 실제 시스템에서 사용하는 파일의 수는 수백, 수천개가 넘어가므로 이렇게 표현해서는 부족하다. 따라서 13번 inode 부터는 Block Mapping 방식을 사용하여 하나의 inode가 여러 개의 블록을 가리키도록하여 많은 파일들을 효율적으로 저장할 수 있다.
- ext3 : ext2와 유사하지만 저널링(Journaling)기능이 생겼다는 특징이 있다.
※ 저널링 파일 시스템
저널링 파일 시스템( Journaling file system)은 주 파일 시스템에 변경사항을 반영(commit)하기 전에, 저널(주로 파일 시스템의 지정된 영역 안의 원형 로그)안에 생성되는 변경사항을 추적하는 파일시스템이다. 시스템 충돌이나 전원 문제가 발생하면, 이러한 파일 시스템은 더 빠르게 online 상태로 돌아오며 손상될 가능성이 낮다
- ext4 : ext3와 거의 유사하지만, Block Mapping 방식이 아닌, extents Tree를 이용하여 파일을 관리한다.
- ext4의 구조
부팅과 파티션 관리를 위한 MBR 영역 이후에 여러 개의 Block Group으로 나누어진 형태이다. 각각의 Block Group 속에는 여러 6개의 영역으로 나뉜다.
- Super Block : 전체적인 파일 시스템의 정보(총 inode 개수, 총 블록 개수, 볼륨 라벨명, 볼륨 사이즈 등 전체적인 파일 시스템의 틀을 규정). 여러 개의 Block Group 에 동일한 값으로 저장.
- inode table : 각 파일의 inode 정보가 표 형식으로 배열되어 있다. ext4의 경우 기본적으로 하나의 inode의 크기는 256 bytes 이다. 각 inode에는 접근 시각, 수정시각, 삭제시각, extents 트리 데이터, extents 할당 블록 개수, 데이터의 위치 등의 정보를 담고 있다. 즉, 실제 파일이 어떻게 구성되고 어디에 저장되어 있는 지 알 수 있다.
- Data Blocks: 실제 데이터들이 저장되어 있는 곳이다. Block 단위로 계산하며, inode 정보를 통해 파일의 실제 데이터 위치를 파악한다.
(3) NTFS(New Technology File System)
- Boot Record : 부팅을 위한 코드와 NTFS 설정값
- MFT(Master File Table) : 볼륨에 존재하는 모든 파일과 디렉터리 정보를 담고 있음.
- Data Area : 파일과 디렉터리를 담는 영역. FAT와 같이 클러스터 단위로 읽기/쓰기.
윈도우 계열 운영체제의 파일 시스템이다.
- 데이터 복구 기능. ( 기능이 있으나, 실제로 사고가 발생하여 서버의 파일시스템이 깨졌던 경우, 비정상으로 작동했던 경험이 있음 )
- b-tree 디렉토리 구성표를 사용하여 파일 클러스터를 추적한다. 이는 파일을 효율적으로 정렬하고 구성할 수 있기 때문에 중요하다.
- 매우 큰 대용량 파일을 지원한다.
- FAT와 마찬가지로 전체 관리 테이블 뿐만 아니라 파일의 클러스터 및 기타 데이터에 대한 데이터를 MFT에 저장
- 서버 관리자가 특정 파일에 액세스할 수 있는 사용자를 제어할 수 있는 ACL 이 있음
- EFS(Encryption File System) : 보안과 암호화 지원
- 파일 시스템 수준의 압축 기능 제공 (ZIP)
- 비어있는 정보(0의 긴 문자열)을 더 작은 저장공간을 차지하는 메타 데이터로 대체하도록 지원.
- Disk Quota : 디스크 할당량을 사용하여 지정된 사용자가 액세스할 수 있는 저장공간의 양을 제한 가능.
- (단점) 제한된 OS 호환성. Windows가 아닌 OS에서는 읽기 전용이다. 많은 이동식 장치, 다른 OS에서 읽을 수는 있지만 쓸 수는 없다.
Reference
'OS > Linux Server' 카테고리의 다른 글
[Linux] Linux에서 Docker를 운영하는 이유 (0) | 2021.11.29 |
---|---|
[Linux] Linux Command - Mornitoring (0) | 2021.11.24 |
[Linux] Linux Directory 구조 (0) | 2021.11.23 |
Linux 실질 메모리 사용률 계산 (0) | 2021.11.04 |
Port 사용 여부 확인 / Process Kill (0) | 2021.09.10 |