logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

Linux(리눅스) 파일 시스템 정리 (ext, ext2, ext3, ext4)

by digipine posted Oct 29, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

1. ext(ext1)

 ext는 ext1으로도 불리며, 리눅스 운영 체제를 목표로 만들어진 첫 번째 파일 시스템입니다. Extended File System을 줄여 extfs 또는 ext로 씁니다. ext는 Rémy Card가 MFS(MINIX File System)의 한계를 극복하기 위해 만들었으며, 1992년 4월에 구현되어 Linux 0.96c에 추가되었습니다.
 MFS는 파일 시스템의 최대 크기가 64MB였지만, ext에서는 2GB로 늘어나며, 파일 이름 최대 길이도 MFS는 14byte[각주:1] 또는 30byte였지만 ext는 255byte까지 지원합니다. 하지만 분리 접근, 아이노드(inode) 수정, 자료 수정 타임스탬프[각주:2] 등의 기능을 지원하지 않으며, 프리 블록과 아이노드의 트랙을 다루기 위해 연결 리스트를 사용했기 때문에 사용하면 할수록 리스트가 뒤죽박죽이 되고 파일 시스템이 조각화된다는 단점이 있었습니다.

참고 자료
http://e2fsprogs.sourceforge.net/ext2intro.html

 

2. ext2

 ext2는 Rémy Card가 1993년 1월에 알파 버전을 공개한 파일 시스템입니다. 정식 이름은 Second Extended File System입니다. 이 파일 시스템은 ext의 문제를 해결하기 위해 나온 파일 시스템입니다.
  ext2 파일 시스템은 ext 파일 시스템 코드를 바탕으로 했으며, 많은 재구성과 개선이 있었습니다. ext2 파일 시스템은 나중에 있을 개선도 고려해 만들어진 파일 시스템이었습니다. ext2 파일 시스템은 점점 많이 쓰이게 되면서 버그도 고쳐지고 계속해서 새로운 기능이 추가되어, 현재 아주 안정한 파일 시스템이 되었습니다.
 ext2 파일 시스템은 255자까지의 긴 파일 이름을 지원합니다. ext2 파일 시스템은 세 타임 스탬프[각주:3]를 지원하며, 확장이 쉽습니다. 그리고 ext에 있었던 여러 단점(분리 접근, 아이노트 수정 등 지원 안 함)도 개선되었습니다. 파일 시스템의 최대 크기는 블록 사이즈에 따라 2 TiB ~ 32 TiB이며, 서브 디렉토리 개수 제한은 32768개입니다.

 

  파일 크기

  제한 파일

  시스템 크기 제한

1 KiB 

16448 MiB (약 16 GiB)

2048 GiB (2 TiB)

2 KiB

256 GiB

8192 GiB (8 TiB)

4 KiB

2048 GiB (2 TiB)

16384 GiB (16 TiB)

8 KiB

65568 GiB (약 64 TiB)

32768 GiB (32 TiB)


      

 

참고 자료
http://e2fsprogs.sourceforge.net/ext2intro.html
http://linuxreviews.org/sysadmin/filesystems

 

3. ext3

 ext3는 Stephan Tweedie가 개발하여 2001년 11월에 Linux 2.4.15에 추가되었습니다. ext2에 저널링, 온라인 파일 시스템 증대, 큰 디렉토리를 위한 HTree[각주:4] 인덱싱 등의 기능이 추가되었습니다. ext3 파일 시스템은 ext2 파일 시스템을 바탕으로 만들었기 때문에, ext2 파일 시스템을 자료 손실 없이 ext3 파일 시스템으로 바꿀 수 있습니다.
 저널링은 주 파일 시스템을 수정하기 전에 저널에 수정 사항을 먼저 기록해 놓습니다. 이렇게 함으로써, 전원이 갑자기 나가거나 시스템 충돌이 일어났을 때 데이터 손실 가능성을 줄일 수 있습니다.
 ext3 파일 시스템은 ext2 파일 시스템과의 호환을 목표로 설계되었기 때문에 많은 구조가 ext2 파일 시스템과 비슷합니다. 그래서 아이노드의 동적 할당, 다양한 블록 크기 등과 같은 기능이 부족합니다. 또한 extends 기능도 지원하지 않습니다. 또 다른 ext3의 단점은 온라인 조각모음 프로그램이 없다는 것입니다. 오프라인 조각모음 프로그램이 있기는 하지만, 이를 사용하기 위해서는 ext2 파일 시스템으로 변환시켜야 하며, ext3에서 ext2로 변환 후 조각모음을 하면 조각모음 프로그램이 ext3의 새로 추가된 기능을 인식하지 못해 자료가 손상될 수 있습니다. ext3가 조각모음이 필요 없다는 주장이 있는데, FAT 시스템보다는 덜 조각화되기는 하지만 계속된 사용으로 인해 ext3도 조각화 될 수 있습니다. 이는 ext4에서 다시 조각모음 프로그램이 만들어지는 계기가 됩니다. ext3 파일 시스템은 또한 저널링을 할 때 체크섬을 검사하지 않습니다.

  한 디렉토리 당 서브 디렉토리 개수 제한은 31998개입니다.
 

  파일 크기

  제한 파일

  시스템 크기 제한

1 KiB 

16 GiB

< 2 TiB

2 KiB

256 GiB

< 4 TiB

4 KiB

2 TiB

< 8 TiB

8 KiB

2 TiB

< 16 TiB

 


참고 자료
http://en.wikipedia.org/wiki/Ext3

 

4. ext4

 ext4는 Mingming Cao, Andreas Dilger, Alex Tomas, Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh와 그 외 여러 사람에 의해 ext3를 바탕으로 하여 개발되었습니다. 2006년 8월 10일 리눅스 2.6.19에서 Unstable 버전이 공개되었으며, 2008년 8월 21일에 Stable 버전이 공개되었습니다. 주요 특징은 다음과 같습니다.

(1) 큰 파일 시스템

1 EB[각주:5]까지의 볼륨과 16 TB까지의 파일을 지원합니다.

(2) Extents

ext2, ext3의 block mapping 방식 대신 extends 방식을 새로 사용합니다. 이는 큰 파일 처리를 개선하고 조각화 현상을 줄여줍니다.

(3) 호환성

ext2, ext3를 ext4 방식으로 마운트하여 성능이 향상된 상태로 사용할 수 있으며, ext4는 ext3 방식으로 마운트될 수 있습니다. 그러나 extends를 사용하는 ext4 파티션은 ext3 방식으로 마운트 될 수 없습니다.

(4) 저널 체크섬

ext3 파일 시스템에 없었던 저널 체크섬 기능이 추가됨으로써, 파일 시스템 손상 가능성이 더 줄어들었습니다.

(5) 32000개 서브 디렉토리 제한이 깨짐

서브 디렉토리 개수 제한이 32000개에서 64000개로 늘어납니다.

(6) 온라인 조각모음

ext4는 ext3에서 지원하지 않았던 온라인 조각모음을 지원할 수 있습니다.

(7) 빠른 파일 시스템 검사

ext4는 디스크 검사를 할 때 사용하지 않는 부분은 건너뜀으로써 시스템 검사를 빨리 할 수 있습니다.

(8) 파일스탬프 향상

타임스탬프가 초 단위가 아닌 나노초 단위로 재어지며, ext2, ext3에서는 1901년 12월 14일 ~ 2038년 1월 18일을 지원했지만 ext4에서는 1901년 12월 14일 ~ 2514년 4월 25일을 지원합니다.

(9) 영속적 선행 할당

디스크 공간을 프로그램이 실제로 사용하기 전에 할당해야 한다면 대부분의 파일 시스템은 아직 사용하지 않은 공간에 0을 기록함으로써 선행 할당을 하지만, ext4는 이렇게 하지 않고도 선행 할당을 할 수 있습니다.

(10) 지연 할당

ext4는 디스크 공간 할당을 마지막까지 지연하므로 성능이 향상됩니다.

(11) 그 외

Multiblock allocator, 파일 복구 기능 추후 구현 가능성 등


참고 자료
http://en.wikipedia.org/wiki/Ext4

 

참고

1 KiB = 1024 byte, 1 MiB = 1024 KiB, 1 GiB = 1024 MiB, 1 TiB = 1024 GiB, 1 PiB = 1024 TiB, 1 EiB = 1024 PiB
1 MB는 1000 KB로 쓰이기도 하고 1024 KB로 쓰이기도 합니다. KB, GB, TB, PB, EB 등의 단위도 마찬가지이기 때문에 KiB, MiB, GiB, TiB, PiB, EiB 등의 단위를 주로 사용했습니다.
이 단위에 대해 더 자세한 정보를 알고 싶으시면 위키백과(키비바이트, 메비바이트, 이진 접두어)를 참조해 주세요.

1.0.99p7 전의 커널은 이것만 지원합니다. [본문으로]
2.파일을 수정된 날짜, 파일에 접근한 날짜 등을 기록하는 것 [본문으로]
3.수정(mtime), 속성 수정(ctime), 접근(atime) [본문으로]
4.B-tree의 변형 [본문으로]
5.1 EB = 1024 PB = 1048576 TB [본문으로]

 

List of Articles
No. Subject Author Date Views
103 공짜 무료 C/C++ 컴파일러들 file digipine 2017.10.28 4373
102 UML - 기본편 ( 기본 표기 형식 및 관계 표현법 ) digipine 2017.10.28 877
101 프로세스 능력 성숙도 모델(CMMI)의 적용 digipine 2017.10.28 696
100 ALM의 등장 배경, 오해와 진실 digipine 2017.10.28 376
99 CMM / CMMI 란 무엇인가? digipine 2017.10.28 2461
98 Thread간 동기화관리자 digipine 2017.10.28 572
97 Windows API - 안전한 문자열 함수들 digipine 2017.10.28 354
96 WIN CE C++ 시리얼 제어 방법 digipine 2017.10.28 627
95 WIN CE, GPS - NMEA protocol - GPS Virtual Driver digipine 2017.10.28 2829
94 NMEA-0183을 이용한 GPS 애플리케이션 제작 digipine 2017.10.28 442
93 Windows에서 SVN 용 폴더 한 번에 삭제하기 digipine 2017.10.29 462
92 WinPCap과 Ethereal, Wireshark 을 이용한 스니핑(Sniffing) digipine 2017.10.29 5425
91 FFT (Fast Fourier Transform) 고속 푸리에 변환 예제 소스 digipine 2017.10.29 12537
» Linux(리눅스) 파일 시스템 정리 (ext, ext2, ext3, ext4) digipine 2017.10.29 1106
89 Ubuntu Server OS 한국어 모드로 설치 후 서버 콘솔에서 한글 깨짐 해결 방법 digipine 2017.10.31 2231
88 QCAD 1.1 한국 최초의 2D CAD 소프트웨어 file digipine 2017.11.01 825
87 OpenAL 사용법 정리 1 digipine 2017.11.01 3395
86 WPA_SUPPLICANT 빌드 방법 digipine 2017.11.01 338
85 WPA_SUPPLICANT 빌드 방법 digipine 2017.11.01 544
84 Iconv 사용법 소스 digipine 2017.11.01 1258
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6