1. 파일 시스템이란?
: 파일을 저장하고 관리하는 체계 (파일과 그 안에 든 자료를 저장하고 찾기 쉽도록 유지 관리하는 방법)
: 데이터를 저장하기 위해 물리적 장치인 디스크 장착, 장착한 디스크를 사용할 수 있도록 파티션 영역을 지정
-> 사용하고자 하는 영역을 지정해 주었으면 그 안에 데이터(파일과 자료)를 저장하고 관리할 수 있도록 파일 시스템을 만들어줌
2. 파일 시스템 종류
| ext2 | mkfs.ext2 | 리눅스 이전 버전에서 사용하는 파일시스템 |
| ext3 | mkfs.ext3 | CentOS 5.X 사용하는 파일시스템 |
| ext4 | mkfs.ext4 | CentOS 6.X 사용하는 파일시스템 |
| xfs | mkfs.xfs | 현재 고성능 저널링 파일 시스템 (eXtended File System) |
| msdos | mfs.msdos | MS-DOS filesystem |
ex) CentOS 5.X - ext3
CentOS 6.X - ext4
CentOS 7.X - ext4.xfs
CentOS 8.X - ext4.xfs
파일 시스템에 대한 정보 확인
# man 5 filesystems
| 이름 filesystems - Linux filesystem types: minix, ext, ext2, xia, msdos, umsdos, vfat, proc, nfs, iso9660, hpfs, sysv, smb, ncpfs 설명 /proc/filesystems 파일에서 당신의 커널에서 지원하는 파일 시스템을 찾을 수 있 다. (현제 지원되지 않는 것을 원한다면, 대응하는 모듈을 넣거나, 커널을다시 컴파일 하라) 아래는 여러 가지 파일 시스템에 대한 설명이다. minix 은 Minix 운영체제에서 쓰이는 Linux에서 사용할 수 있는 파일 시스템이다. 이것은 몇가지 결점이 있다: 64MB 파티 션 크기 제한, 짧은 파일 이름 등..sp 하지만 플로피나 RAM 디스크에는 유용하다. ext 는 minix 파일 시스템의 정교한 확장이다. 이것은 두번째 버전의 확장 파일 시스템 (ext2) 에 완전히 대체되었고 결국 커널에서 지워졌다. ext2 는 고정 디스크를 리무버블 미디어와 마찬가지로 리눅스 상에서 사용되는 고 성는 디스크 파일 시스템이다. 두번째 확장 파일 시스템은 확장 파일 시스템의 확장형태로 디자인 되었다. (ext). ext2 는 리눅스상에서 지원되는 파일 시스템의 최고의 성능을(속도와 CPU활용상에서) 제공한다. xiafs 는 Minix 파일시스템 코드를 확장함으로써 안정성을 중심으로 디자인 되었고, 또 충족시키고 있다. xia 파 일 시스템은 더 이상 활발히 계발 되거나 유지되지 않고 있다. 이것이 사용되는 것은 드물다. msdos 는 DOS, Window와 몇몇 OS/2 컴퓨터에서 사용되는 파일시스템이다. msdos 파일 시스템은 홉션에 따른 8 글자의 파일명과 3 글자의 확장명만이 가능하다. umsdos 는 리눅스에서 사용되는 확장 도스 파일 시스템이다. 이것은 긴 파일 이름과 UID/GID, POSIX, 특수 파일(devices, na med popes, etc)을 도스 파일 시스템상에서 도스의 기능을 희생하지 않고 사용 할 수 있다. vfat 는 MS Window95와 Window NT에서 사용되는 도스 파일 시스템이다. VFAT는 MS 도스 파일 시스템에 긴 파일 이름 기능을 추가하였다. proc 는 읽기나 인터페이싱 보단 커널 데이터 구조를 위한 인터페이스로 사용되는 pseudo 파일 시스템이다. /dev/kmem. 특이하게 이 파일은 디스크 공간을 차지하지 않는다. proc(5)를 참조하라. iso9660 는 ISO 9660 표준을 따르는 CD-ROM 파일 시스템 형태이다. High Sierra 리 눅 스 는 ISO 9660 표준의 전신인 High Sierra를 지원한다 iso9660 파일 시스템에서 자동으로 인식된다. Rock Ridge Linux는 Rock Ridge 교환 프로토콜로 분 류 되 는 System Use Sharing Protocol 역시 지원한다. 그것들은 더 나아가서 유닉스 호스트에게 iso9660 파일 시스템상에서 파일을 알리고, 긴 파 일 이 름이나 UID/GID, POSIX 인가, 그리고 디바이스와 같은 정보를 알린다. 이것은 자동으로 iso9660 파일 시스템상에서 인식된 다. hpfs 는 OS/2에서 쓰이는 고성능 파일 시스템이다. 이것은 리눅스상에서는 가능한 문서의 부족 때문에 읽기만 가능하다. sysv 는 리눅스를 위한 SystemV/Coherent 실행 시스템이다. 이것 은 모 든 Xenix FS, SystemV/386 FS, Coherent FS을 실행 한다. nfs 는 원거리 컴퓨터에 있는 디스크에 접근할 때 쓰이는 네트웍 파일 시스템이다. smb 는 Windows Workgroups, Windows NT, Lan Manager에서 쓰이는 SMB 프로토콜을 지원하는 네트웍 파일 시스템이다. smb 파일 시스템을 사용하기 위해선 ksmbfs 패키지에서 구할 수 있는 특 별한 마운트 프로그램이 필요하다 패키지는 아래에서 구할 수 있 다. ftp://sunsite.unc.edu/pub/Linux/system/Filesystems/smbfs. ncpfs 는 Novell NetWare에서 사용하는 NCP 프로토콜을 지원하는 네트웍 파일시스템이다. ncpfs, 를 사용하기 위해선 아래에서 구할 수 있는 특별한 프로그램이 필요하다. ftp://linux01.gwdg.de/pub/ncpfs. -----------------------------------------------------------------(등등)----------------------------------------------------------------- |
3. 대표적인 파일 시스템의 특성
1) ext2 파일시스템 (Second Extended File System)
- 도입일: 1993년 1월
- 도입 운영체제: 리눅스
- 디렉토리 구조: 테이블
- 파일 구조: 비트맵(여유공간), 테이블(메타데이터)
- 불량블록 구조: 테이블
- 최대 파일 크기: 16GB - 2TB
- 최대 파일수: 10^18
- 최대 파일이름 길이: 255 bytes
- 최대 볼륨크기: 2-32TB
- 파일시스템 권한: POSIX
- 압축: 아니오(패치를 통해 사용 가능)
- 암호화: 아니오
- 운영체제: 리눅스, BSD, 윈도우(IFS를 통해), OS X(IFS를 통해)
-주요 특징-
: 리눅스의 표준 파일 시스템
: R'emy Card가 1993년 1월에 알파 버전을 공개한 파일 시스템
: ext 문제를 해결하기 위해 나옴 - ext의 단점) 분리 접근, 아이노트 수정 등을 지원하지 않음
: ext 파일 시스템 코드를 바탕으로 만들었음
: 255자가지의 파일 이름을 지원함
: 세타임 스탬프 3을 지원하며, 확장이 쉬움
: 파일 시스템의 최대 크기는 블록 사이즈에 따라 2TiB - 32TiB, 서브 디렉토리 개수 제한은 32768개
문제점
: 정전이나 시스템 장애로 인하여 비정상적으로 시스템이 shutdown 되었을 때 파일 시스템이 umount 되지 않은 경우나 Maximal mount에 도달하였을 때 데이터의 손실을 막기 위하여 데이터 구조 일치성을 파일 시스템이 체크하도록 되어 있는데, 파일 시스템이 작을 경우에는 무의미 할 뿐더러 파일 시스템이 큰 경우에는 부팅하는 데 상당한 오랜 시간이 걸린다
※ 저널링 파일 시스템 (Journaling File System)
: ext3 파일 시스템 등장 배경
: 부팅 할 때의 시간을 단축하면서 비정상적인 시스템 종료 시 파일 시스템을 체크하지 않고 인덱스에 대한 로그를 기록해 문제 발생 시 이를 복구할 수 있는 대체 파일 시스템이 요구되어 등장
: 리눅스에서 지원하는 저널링 파일시스템은 ext3, reiserfs, XFS 등이 많이 사용
레드햇 리눅스에서는 ext2 파일 시스템의 대안으로 ext3 파일 시스템을 지원
2) ext3 파일 시스템
- 도입일: 2001년 11월
- 도입 운영체제: 리눅스 2.4.15
- 디렉토리 구조: 테이블, hashed B-tree(dir_index 사용)
- 파일 구조: 비트맵(여유 공간), 테이블(메타 데이터)
- 블량 블록 구조: 테이블
- 최대 파일 크기: 16GiB - 2TiB
- 최대 파일수: 가변, 작성 시간에 할당
- 최대 파일이름 길이: 255 bytes
- 최대 볼륨 크기: 2TiB - 16TiB
- 파일시스템 권한: 유닉스 허가, ACLs, 임의 보안 특성(리눅스 2.6 이상)
- 압축: 아니오
- 암호화: 아니오(블록 장치 수준에서 제공됨)
- 운영체제: 리눅스, BSD, 윈도우(IFS를 통해 지원)
- 파일시스템 특성: No-atime, append-only, synchronous-write, no-dump, h-tree(디렉토리), immutable, journal, secure-delete, top(디렉토리), allow-undelete
-주요 특징-
① ext3 파일 시스템의 가용성과 데이터 무결성
: ext3 파일 시스템은 변경되는 파일 데이터를 바로 동기화시키기 때문에 시스템이 갑자기 정지되더라도 다음 부팅시에는 파일 시스템을 체크하지 않고, 구조 일치성을 체크하는데 몇 초 밖에 걸리지 않기 때문에 부팅 속도가 빨라짐
: 항상 파일 시스템의 일치성을 유지하는데 있어서 데이터 무결성을 보장해 줌
② ext2 파일 시스템에서 ext3 파일 시스템으로 변환 용이
: Tune2fs 프로그램으로 사용해 ext2 파일 시스템에 저널을 추가해 ext3로 변환 할 수 있음
: 레드햇 리눅스 9에서 e2fsprogs 프로그램을 지원하고 있어 이 프로그램이 설치되어 있으면 ext3 파일 시스템을 거꾸로 ext2 파일 시스템으로 사용할 수 있음
③ 속도
: 하드디스크의 헤더 동작을 최적화 시켜주어 동일한 데이터를 여러 차례 반복 저장해도 ext2파일 시스템에 비해 빠른 속도를 제공
: 데이터 일치성 속도를 최적화할 수 있는 data=writeback, data=odered, data=journal 등의 저널링 모드 제공
3) ext4 파일 시스템
- 도입일: 안정판: 2008-10-21, 불안정판: 2006-10-10
- 도입 운영체제: 리눅스 2.6.28, 2.6.19
- 디렉토리 구조: linked list, hashed B-tree
- 파일 구조: Extents/Bitmap
- 블량블록 구조: 테이블
- 최대 파일 크기: 16TiB(4k 블록 파일시스템 기준)
- 최대 파일수: 40억(파일시스템 작성 시간에 지정됨)
- 최대 파일이름 길이: 256 바이트
- 포크 스트림: 아니오
- 파일시스템 권한: POSIX
- 압축: 아니오
- 암호화: 아니오
- 운영체제: 리눅스, 윈도우(ext2fsd 이용시)
- 파일시스템 특성: extents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev
-주요 특징-
① 큰 파일 시스템
: 1EBS 볼륨과 16TB까지의 파일 지원
② Extents
: ext2, ext3의 block mapping 방식 대신 extends 방식을 새로 사용
: 큰 파일 처리를 개선하고 조각화 현상을 줄여줌
③ 호환성
: ext2, ext3를 ext4 방식으로 마운트해 성능이 향상된 상태로 사용
: ext4는 ext3 방식으로 마운트 될 수 있음
: extends를 사용하는 ext4 파티션은 ext3 방식으로 마운트 될 수 없음
④ Journal checksum
: ext3 파일 시스템에 없던 저널 체크섬 기능이 추가됨으로써 파일 시스템 손상 가능성이 줄어듬
⑤ 32000개 서브 디렉토리 제한이 깨짐
: 서브 디렉토리 개수 제한이 64000개로 늘어남
⑥ 온라인 조각모음
: ext4는 ext3에서 지원하지 않았던 온라인 조각모음을 지원할 수 있음
⑦ 빠른 파일 시스템 검사
: ext4는 디스크 검사를 할때 사용하지 않는 부분은 건너뜀으로써 시스템 검사를 빨리 할 수 있음
⑧ 파일 스탬프 향상
: 타임 스탬프가 초 단위가 아닌 나노 초 단위로 세어짐
⑨ 영속적 선행 할당
: 디스크 공간을 프로그램이 실제로 사용하기 전에 할당해야 한다면 대부분의 파일 시스템은 아직 사용하지 않은 공간을 0으로 기록함으로써 선행 할당을 하지만 ext4는 그렇지 않고도 선행 할당을 할 수 있음
⑩ 지연할당
: 디스크 공간 할당을 마지막까지 지연하므로 성능이 향상됨
4) xfs 파일시스템 (eXtended File System- 고성능 저널링 파일 시스템)
- 도입일: 1994년
- 도입 운영체제: IRIX 5.3
- 디렉토리 구조: B+ 트리
- 파일 구조: B+ 트리
- 최대 파일 크기: 8 EiB
- 최대 파일 이름 길이: 255 바이트
- 최대 볼륨 크기: 16 EiB
- 파일시스템 권한:
- 압축: 아니오
- 암호화: 아니오(블록 장치 수준에서 제공)
- 운영체제: IRIX, 리눅스, FreeBSD(읽기 전용, 실험적인 쓰기 지원)
-주요 특징-
① 저널링 (신속한 복구 기능)
: 파일 수에 관계없이 예상치 못한 상황으로부터 신속하게 복구해 재시작이 가능
② 신속한 트랜잭션
: 데이터 읽기/쓰기 트랜잭션으로 인한 성능 저하를 최소화
: 저널링 구조와 알고리즘은 트랜잭션에 대한 로그 기록을 신속하게 할 수 있도록 최적화됨
③ 높은 확장성
: 완전한 64bit 파일 시스템이기 때문에 100만TB 크기의 파일도 다룰 수 있음
: 디스크 공간이 커짐에 따라 주소공간만 커지는 것이 아니라 그에 따른 자료 구조나 알고리즘도 확장되어야 하는데 이런 확장성을 제공하는 파일 시스템
④ 뛰어난 처리량
: 거의 raw 10 성능에 가까운 성능을 낼 수 있는 파일 시스템
: 리눅스 서버의 처리량이 증가함에 따라 xfs가 리눅스에서도 많은 양의 데이터를 신속하게 처리할 수 있게 됨
4. 파일 시스템의 구조
파일시스템은 모든 입출력을 제어하는 Device Driver와 연결되어 있고 시스템 호출을 통해 사용자로부터 데이터를 받아 처리한다. 리눅스는 VFS(Virtual File System)을 통해 ext2, jfs2, proc와 같은 다양한 파일시스템을 지원한다
가상 파일 시스템 구조 (Virtual File System)
: 리눅스는 다양한 형식으로 포맷된 디스크를 사용할 수 있음
: 보통 리눅스는 ext2, ext3, ext4를 사용하지만 다른 것도 사용할 수 있음
: 실제 파일시스템에 관계없이 공통된 인터페이스로 파일시스템에 접근하도록하는 계층

1) 파일시스템 구조 분석
: 대부분 리눅스 사용자들은 ext2 파일시스템을 많이 사용
: 현재 사용하고 있는 배포본의 파일시스템을 확인하려면 mount 명령을 수행하면 됨
: ext2는 전통적인 유닉스 파일시스템이 가진 대부분의 특성들을 가지고 있고, 블럭, 아이노드 디렉토리의 개념을 가짐
-> ext2는 할당할 수 있는 최소의 단위로 블록을 사용
-> ext2 파일시스템에서 주축이 되는 건 블럭과 아이노드임
# man dumpe2fs - dumpe2fs : 파일시스템에 대한 상세정보를 확인하는 명령어
NAME
dumpe2fs - dump ext2/ext3/ext4 filesystem information
[root@server1 ~]# man dumpe2fs
DUMPE2FS(8) System Manager's Manual DUMPE2FS(8)
NAME
dumpe2fs - dump ext2/ext3/ext4 filesystem information
SYNOPSIS
dumpe2fs [ -bfghixV ] [ -o superblock=superblock ] [ -o block‐
size=blocksize ] device
DESCRIPTION
dumpe2fs prints the super block and blocks group information for the
filesystem present on device.
Note: When used with a mounted filesystem, the printed information may
be old or inconsistent.
# mkfs.ext4 /dev/sdb1
: ext4 포맷으로 포맷
: 파티션이 완료된 상태에서 ext4로 바꾸는 작업이기 때문에 sdb가 아닌 sdb1을 입력
[root@server1 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.45.6 (20-Mar-2020)
Found a dos partition table in /dev/sdb1
Proceed anyway? (y,N) y
Creating filesystem with 512000 1k blocks and 128016 inodes
Filesystem UUID: 1e367880-561f-46a9-b0a8-e2cba158ef5a
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
# dumpe2fs /dev/sdb1 (# tune2fs -l /dev/sdb1)
dumpe2fs
: 파일 시스템 정보 보기
: ext2/ext3/est4 파일 시스템 정보를 출력
: 사용방법 = dumpe2fs [옵션] 장치명
[root@server1 ~]# dumpe2fs /dev/sdb1
dumpe2fs 1.45.6 (20-Mar-2020) # Superblock 정보 시작
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 1e367880-561f-46a9-b0a8-e2cba158ef5a
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean # 파일시스템 상태
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 128016
Block count: 512000
Reserved block count: 25600 # Minfree 공간
Free blocks: 485316
Free inodes: 128005
First block: 1
Block size: 1024 # 파일 IO의 단위
Fragment size: 1024 # Fragment 단위
Group descriptor size: 64
Reserved GDT blocks: 256
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2032
Inode blocks per group: 254
Flex block group size: 16
Filesystem created: Thu Aug 26 17:46:19 2021
Last mount time: n/a
Last write time: Thu Aug 26 17:46:20 2021
Mount count: 0
Maximum mount count: -1
Last checked: Thu Aug 26 17:46:19 2021
Check interval: 0 (<none>)
Lifetime writes: 284 kB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 34528b42-aca0-4f46-a262-ec1a148ea3a0
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0x57334ce2
Journal features: (none)
Journal size: 8M
Journal length: 8192
Journal sequence: 0x00000001
Journal start: 0
(ext4) # tune2fs -l /dev/sd1
tune2fs
: 리눅스 파일 시스템의 변경가능한 파라미터값을 설정하는 명령어
: 파일시스템의 파라미터값을 변경함으로서 파일시스템을 튜닝할 수 있으며 결과적으로 시스템의 성능을 향상시킬 수 있음
(xfs) # xfs_info /dev/sdb1
xfs_info
: 기존 xfs 파일 시스템에 대해 기하학적인 정보를 표시
'Linux > 2) 리눅스 서버 관리자 과정' 카테고리의 다른 글
| 3_3 File System Administration - 파일 시스템 점검 및 사용량 점검 (0) | 2021.08.29 |
|---|---|
| 3_2 File System Administration - 파일 시스템 생성 (0) | 2021.08.29 |
| 2_2 Device Reconfiguration & Partition - fdisk 명령어를 통한 디스크 파티션 구성 (0) | 2021.08.23 |
| 2_2 Device Reconfiguration & Partition - 디스크 장착 및 디스크 장치 인식(실습) (0) | 2021.08.23 |
| 2_2 Device Reconfiguration & Partition - 장치 인식 (0) | 2021.08.23 |