목차
파일 시스템(File System)
파일 시스템은 운영체제가 파티션이나 디스크에 데이터를 저장하고, 읽고 쓰고 찾기 위해 구성하는 일련의 체계를 말한다.
그리고 이러한 파일 시스템은 운영체제가 사용자에게 제공하는 가장 기본적인 데이터 관리 인터페이스이다.
사용자는 파일 시스템을 통해 데이터를 파일과 디렉토리 형태로 저장하고 접근하며, 파일의 이름, 크기, 경로, 권한 등의 메타데이터를 확인할 수 있다.
파일 시스템은 사용자의 명령을 받아 디스크의 물리적 저장 위치와 데이터를 매핑하여 효율적으로 관리한다.
예를 들어, 파일 생성, 삭제, 복사, 이동, 읽기, 쓰기 등의 작업은 파일 시스템을 통해 처리된다.
파일 시스템의 기능
1. 데이터 저장 및 관리
- 파일과 디렉토리 관리: 파일과 디렉토리를 생성, 수정, 삭제하며 계층적 구조로 조직화한다.
- 경로 탐색: 루트 디렉토리(/)를 시작으로 파일과 디렉토리를 탐색할 수 있도록 경로 체계를 지원한다.
2. 읽기/쓰기 연산
- 파일 읽기: 저장된 데이터를 불러와 사용자가 활용할 수 있도록 한다.
- 파일 쓰기: 데이터를 디스크에 저장하거나 기존 데이터를 수정할 수 있도록 한다.
3. 파일 권한 및 소유권 관리
- 권한 설정: 파일과 디렉토리에 대해 읽기, 쓰기, 실행 권한을 사용자와 그룹별로 설정한다.
- 소유권 관리: 파일과 디렉토리의 소유자를 지정하고, 관련 권한을 관리한다.
4. 저장 공간 관리
- 디스크 공간 할당: 파일 데이터를 효율적으로 저장하기 위해 디스크 블록을 할당.
- 디스크 사용량 확인: df 및 du 명령어를 통해 디스크 사용량과 남은 공간을 관리.
5. 파일 시스템 유형 지원
- 다양한 파일 시스템: ext4, XFS, Btrfs, FAT32, NTFS 등 다양한 파일 시스템 형식을 지원.
- 마운트/언마운트: mount 명령으로 파일 시스템을 특정 디렉토리에 연결하고, umount로 해제.
6. 메타데이터 관리
- 파일의 이름, 크기, 생성/수정 시간, 접근 권한 등 메타데이터를 저장하고 관리.
7. 데이터 무결성 및 복구
- 저널링: ext4, XFS 같은 파일 시스템은 변경 내역을 기록해 시스템 충돌 시 데이터 손실을 방지.
- fsck 유틸리티: 파일 시스템 오류를 감지하고 복구하는 도구.
8. 파일 링크 지원
- 심볼릭 링크: 파일이나 디렉토리의 경로를 참조하는 링크를 생성.
- 하드 링크: 동일한 파일 데이터에 여러 이름을 부여해 관리.
9. 파일 검색 기능
- 인덱싱: 빠른 파일 검색을 위해 파일 시스템 내에서 인덱스 유지.
- 파일 탐색 명령어: find, locate 등을 사용해 파일 검색.
10. 네트워크 파일 시스템 지원
- NFS(Network File System): 네트워크 상에서 파일 시스템을 공유하고 접근 가능.
- Samba, CIFS: 윈도우와의 파일 시스템 공유를 지원.
11. 보안 및 암호화
- 암호화 파일 시스템: 데이터를 암호화해 무단 접근 방지.
- SELinux/AppArmor: 파일 수준에서 보안을 강화하는 보안 프레임워크 제공.
12. 다중 사용자 환경 지원
- 여러 사용자가 동시에 파일 시스템에 접근할 수 있도록 동시성 및 충돌 방지 관리.
리눅스 파일 시스템의 종류와 특징
ext (Extended File System) |
|
ext2 (Second Extended File System) |
|
ext3 (Third Extended File System) |
|
ext4 (Fourth Extended File System) |
|
XFS |
|
Btrfs (B-Tree File System) |
|
FAT32 및 exFAT |
|
NTFS |
|
ZFS |
|
NFS (Network File System) |
|
CIFS/SMB |
|
정리 리눅스에서 파일 시스템은 다양한 사용 환경과 요구 사항에 맞춰 선택된다.
|
기본 용량 단위
기본 용량 단위
Bytes (B)
데이터의 가장 작은 단위로, 하나의 문자나 작은 데이터를 저장하는 데 사용.
예: 1 Byte = 8 bits.
Kilobytes (KB)
1 KB = 1,024 Bytes.
작은 텍스트 파일이나 설정 파일의 크기를 나타낼 때 사용.
Megabytes (MB)
1 MB = 1,024 KB = 1,048,576 Bytes.
이미지, 음악 파일, 일반 소프트웨어 크기를 나타낼 때 사용.
Gigabytes (GB)
1 GB = 1,024 MB = 약 1억 바이트.
영화 파일, 대형 애플리케이션 또는 하드 디스크 크기를 나타낼 때 사용.
Terabytes (TB)
1 TB = 1,024 GB = 약 1조 바이트.
대용량 스토리지 디스크나 서버의 총 저장 공간을 표현.
Petabytes (PB)
1 PB = 1,024 TB.
데이터 센터나 클라우드 스토리지의 총 데이터 용량을 표현.
2진법 vs 10진법 단위 차이
리눅스는 일반적으로 2진법 단위(1KB = 1,024B)를 사용한다.
반면, 일부 시스템은 10진법 단위(1KB = 1,000B)를 사용해 차이가 생길 수 있다.
이를 명확히 하기 위해 2진법 단위는 KiB, MiB, GiB와 같이 표기하기도 한다.
1 KiB = 1,024 Bytes.
1 MiB = 1,024 KiB.
MB (Megabyte)
기준: 10진법 기반 단위.
크기:
1 MB = 1,000 KB = 1,000 × 1,000 Bytes = 1,000,000 Bytes.
사용처:
저장 장치 제조업체, 네트워크 속도, 광고 등에서 사용.
예: USB, 하드 디스크 크기(예: 500MB), 인터넷 속도 표기(예: 50MBps).
MiB (Mebibyte)
기준: 2진법 기반 단위.
크기:
1 MiB = 1,024 KiB = 1,024×1,024 Bytes = 1,048,576 Bytes.
사용처:
운영체제, 소프트웨어에서 정확한 데이터 크기를 계산할 때 사용.
예: 리눅스에서 파일 크기, 메모리 크기 표시(예: 50MiB).
차이점
MB (10진법)와 MiB (2진법)는 계산 기준이 다르다.
1 MB = 1,000,000 Bytes.
1 MiB = 1,048,576 Bytes.
예시:
파일 크기 1,048,576 Bytes:
10진법 기준: 1.048 MB로 표시.
2진법 기준: 정확히 1 MiB로 표시.
가끔 보면 외장 하드나 외장 ssd 같은 제품을 살려고 보니 제품 표기에는 1TB(1024GB)라고 나오지만 실제로 제품을 받고 컴퓨터에 장착 해보면 931GB만 사용 가능한 경우가 있다. 이는 2진법 vs 10진법 단위 차이로 인해 발생하는 오해인데 우리한테 친숙한 10진법으로 제조업체는 1GB는 1,000mb로 계산한다.
하지만 리눅스나 윈도우의 운영체제에서는 2진법 단위를 사용한다.
따라서 사용자는 32GB라고 적혀있는 제품을 샀다고 왜 32GB라고 표시가 안되 이거 사기 아니야 하면 안된다는 것이다...
그냥 그런가보다 하자..
파티션: 저장 장치(디스크)를 독립적인 여러 구역으로 나눈 논리적 단위로, 각각 별도의 파일 시스템을 가질 수 있다. 디스크: 데이터를 읽고 쓰는 데 사용되는 저장 장치로, 하드 디스크(HDD)나 고속 저장 장치(SSD)가 포함된다. 인터페이스
|
저널링 파일 시스템
저널링 파일 시스템은 데이터 변경 사항을 바로 디스크에 적용하기 전에 저널(journal)이라는 로그에 기록하는 파일 시스템이다. 이를 통해 시스템 충돌, 전원 손실 등의 예기치 않은 오류 발생 시 데이터를 복구하거나 무결성을 유지할 수 있다.
초기 리눅스 시절 ext2 파일 시스템의 경우, 시스템이 갑작스럽게 동작을 멈추면 어떤 데이터가 수정 중이었는지 추적할 방법이 없었다. 이로 인해 파일 시스템의 무결성이 손상될 가능성이 높았다.
따라서 이를 복구하기 위해서는 관리자가 직접 fsck라는 명령어를 입력하여 슈퍼블록, 비트맵, 아이노드 등 모두 검사해야 했기에 많은 시간이 걸렸다.
하지만 저널링 기술을 사용한 파일 시스템은 파일을 실제로 수정하기 전에 우선 로그에 수정된 내용을 저장해서 비정상적으로 동작이 멈추더라도 시스템 복구를 위해 단지 로그만 검사하면 되기에 간편하고 시간 절약도된다.
이러한 저널링 기술이 적용된 파일 시스템은 ext3, ext4, XFS, JFS등이 있다.
(1)Boot Block(s)
(2)Super Block
(3)i-list(아이노드 목록)
ext 파일 시스템의 구조
일반적으로 디스크 드라이브 이용 시에 파티션을 분할하고 포맷(Format)이라고 부르는 작업을 통해 파일 시스템을 생성한다.
다음 표는 디스크 드라이브와 파티션 및 파일 시스템과의 관계이다.
Disk Drive | ||
Partition | Partition | Partition |
|
...
파일 시스템 생성(포맷 작업)
포맷 작업 중 파일 시스템의 구조가 생성되며, ext 파일 시스템의 경우 아래와 같은 구성 요소가 만들어진다.
Format(mkfs) ↓
...
Partition(Filesystem) | |||
Boot Block(s) | Super Block | i-list | Directory Blocks and Data Blocks |
ext 파일 시스템의 구성 포맷을 통해 만들어지는 파일 시스템의 주요 구성 요소는 다음과 같다: (1)Boot Block(s)
|
↓
i-list | ||
i-node | i-node | ..... |
i-list는 아이노드 번호의 목록이며, 저장되는 정보는 Directory Blocks and Data Blocks에 저장된다.
Directory Blocks and Data Blocks는 2개의 블록이 섞여있는데 Directory Block에는 아이노드 번호와 파일명이 저장이되며 Data Block에는 파일이 보관해야할 정보를 저장한다.
Directory Blocks and Data Blocks
(1) Directory Blocks
(2) Data Blocks
Directory Blocks and Data Blocks | ||||
.... | Data Block | .... | Directory Block | .... |
Directory Blocks and Data Blocks 이 영역은 파일 시스템에서 실제 데이터를 저장하는 공간으로, 두 가지 블록으로 나뉜다: (1) Directory Blocks
|
↓
Directory Blocks | |
i-node number | filename |
i-list와 Directory Blocks의 관계
|
'리눅스' 카테고리의 다른 글
#6-2 리눅스 파일 시스템 (0) | 2025.01.09 |
---|---|
#5-2 리눅스 부팅과 셧다운 (0) | 2025.01.09 |
#5-1 리눅스 부팅과 셧다운 (1) | 2024.12.15 |
#4 리눅스 디렉터리 (0) | 2024.12.15 |
#3 리눅스의 구조 (0) | 2024.12.15 |