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
44 Phabricator Ubuntu Installation Guide digipine 2022.01.26 440
43 OpenAL 사용법 정리 1 digipine 2017.11.01 3397
42 OBS Studio for Http Interface EXE lizard2019 2023.02.15 247
41 NMEA-0183을 이용한 GPS 애플리케이션 제작 digipine 2017.10.28 445
40 mongoose 3.8 싱글 파일 소스 코드 file digipine 2020.09.01 335
39 MongoDB 설치 및 C 개발 도구 설정 1 digipine 2020.09.03 449
38 MacOS 10.12.2 (OSX) 보안 취약점 공격 코드 2 file digipine 2017.11.02 1555
37 MacOS 10.12.2 (OSX) 보안 취약점 공격 코드 digipine 2017.11.02 605
36 MacOS 10.12.2 (OSX) 보안 취약점 공격 기초 digipine 2017.11.02 663
35 MacOS 10.12.2 (OSX) KERNEL DEBUGGING file digipine 2017.11.02 1451
34 MAC Screen Sharing을 위한 VNC 접속을 위한 Port 변경 방법 digipine 2022.09.05 381
33 Mac Address 를 String 으로 변환하는 간편한 방법 digipine 2017.11.02 433
32 Linux/OSX bash에서 source 명령어 lizard2019 2019.01.07 779
» Linux(리눅스) 파일 시스템 정리 (ext, ext2, ext3, ext4) digipine 2017.10.29 1107
30 Linux Kernel 컴파일 및 Patch 방법 digipine 2017.11.02 1099
29 Linux init.d 에서 등록하기. 부팅 시 자동실행 설정 digipine 2017.11.03 12565
28 Linux /dev/random vs /dev/urandom 삽질 후기 엉뚱도마뱀 2017.11.22 957
27 LibVLC 미디어 재생기 프로그래밍 방법 C++, QT 엉뚱도마뱀 2018.04.20 2500
26 Let's Encrypt SSL 인증서 자동 갱신 설정 방법 digipine 2020.09.03 738
25 JDK Install ubuntu digipine 2017.11.02 355
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6