Ext2
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
Ext2는 리눅스 운영 체제에서 사용된 초기 파일 시스템 중 하나이다. 1993년 개발된 ext2는 확장 파일 시스템(ext)을 개선하여 최대 2TB의 데이터와 255자 길이의 파일명 지원, 파일 접근 시간, 아이노드 수정, 데이터 수정 등의 기능을 제공했다. ext2는 블록 그룹, 아이노드, 디렉터리 등의 구조를 가지며, 파일 시스템 제한과 압축 확장(e2compr) 등의 특징을 갖는다. 리눅스 커널 6.9부터는 더 이상 사용되지 않으며, 다른 운영 체제에서도 접근하기 위한 별도의 도구가 필요하다.
더 읽어볼만한 페이지
- 1993년 소프트웨어 - 윈도우 NT
윈도우 NT는 1988년에 개발되어 1993년에 출시된 마이크로소프트의 운영 체제 제품군이며, 하드웨어 및 소프트웨어 이식성을 목표로 다양한 프로세서 아키텍처를 지원하고, 사용자 모드와 커널 모드를 사용하며, 개체별 접근 제어 목록을 통해 시스템 보안을 강화했다. - 1993년 소프트웨어 - NetBSD
NetBSD는 높은 이식성을 가진 BSD 계열 오픈 소스 운영 체제로, 다양한 아키텍처를 지원하며 pkgsrc 패키지 관리 시스템을 통해 응용 프로그램 설치가 용이하고 안정성과 보안을 중시하여 여러 환경에서 사용된다. - 파일 시스템 - 부트 섹터
부트 섹터는 시스템 부팅 코드를 담은 저장 매체의 특정 영역으로, 볼륨 부트 레코드(VBR)와 마스터 부트 레코드(MBR)로 나뉘며, BIOS는 이를 실행하고 UEFI는 부트로더를 직접 로드하지만 바이러스 공격에 취약하다. - 파일 시스템 - ZFS
ZFS는 Jeff Bonwick 등이 설계하고 구현한 파일 시스템으로, 데이터 무결성, 스냅샷, RAID-Z 등의 기능을 제공하며, 썬 마이크로시스템즈에서 개발되어 OpenZFS 프로젝트를 통해 다양한 운영체제에서 사용된다.
| Ext2 - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 파일 시스템 정보 | |
| 이름 | ext2 |
| 전체 이름 | 이차 확장 파일 시스템 |
| 개발자 | 레미 카드 |
| 출시일 | 1993년 1월 |
| 출시 운영 체제 | 리눅스 |
| 파티션 ID | Apple_UNIX_SVR2 (애플 파티션 맵) |
| 구조 | |
| 디렉터리 구조 | 테이블 |
| 파일 구조 | inode |
| 잘못된 블록 구조 | 테이블 |
| 제한 | |
| 최대 파일 크기 | 2TiB |
| 최대 파일 수 | 1018 |
| 최대 파일 이름 크기 | 255 바이트 |
| 최대 볼륨 크기 | 16TiB |
| 파일 이름 문자 집합 | NUL과 '/'를 제외한 모든 문자 |
| 날짜 | |
| 기록된 날짜 | 수정, 속성 수정, 접근 |
| 날짜 범위 | 1901년 12월 14일 - 2038년 1월 18일 |
| 날짜 해상도 | 1초 |
| 기능 | |
| 포크/스트림 | 가능 |
| 파일 시스템 권한 | POSIX |
| 압축 | 선택 사항 |
| 암호화 | 없음 |
| 단일 인스턴스 저장소 | 없음 |
| 지원 운영 체제 | |
| 운영 체제 | 리눅스, BSD, Windows (IFS 경유), macOS, ReactOS, HelenOS, RIOT, Zephyr, GNU Hurd, MINIX |
2. 역사
MINIX 운영 체제에서 교차 개발 방식으로 만들어진 리눅스의 초기 개발은 MINIX 파일 시스템을 리눅스의 첫 번째 파일 시스템으로 사용하였다. MINIX 파일 시스템은 대부분 버그가 없었지만, 16비트 오프셋을 사용했기 때문에 최대 크기가 64 메가바이트로 제한되었고, 파일 이름도 14자까지만 사용할 수 있었다. 이러한 제한 때문에 리눅스를 위한 파일 시스템으로 대체하는 작업이 시작되었다.
ext2 파일 시스템의 공간은 블록으로 나뉘고, 이 블록들은 유닉스 파일 시스템의 실린더 그룹과 유사한 블록 그룹으로 묶인다. 대용량 파일 시스템에는 보통 수천 개의 블록이 있으며, 각 파일 데이터는 가능한 한 하나의 블록 그룹 내에 포함되어 외부 단편화를 줄이고 연속된 데이터를 읽을 때 디스크 탐색을 최소화한다.
새 파일 시스템의 추가를 쉽게 하고 일반 파일 API를 제공하기 위해 VFS 레이어가 리눅스 커널에 추가되었다. 확장 파일 시스템(ext)은 1992년 4월에 VFS API를 사용한 첫 파일 시스템으로 발표되었고 리눅스 버전 0.96c에 포함되었다. ext 파일 시스템은 MINIX 파일 시스템의 두 가지 주요 문제(최대 파티션 크기와 파일 이름 14자 제한)를 해결하여, 2 기가바이트의 데이터와 255자의 파일명 제한을 허용하였다. 그렇지만 여전히 파일 접근에 대한 타임 스탬프, 아이노드 수정, 그리고 데이터 수정을 지원하지 않는 문제가 있었다.
이 문제의 해결을 위해 1993년 1월에 새로운 두 파일 시스템 xiafs와 버클리 고속 파일 시스템으로부터 많은 아이디어를 통합하여 확장 파일 시스템을 재검토하는 '''이차 확장 파일 시스템'''('''ext2, seconday extended file system''')이 개발되었다. ext2는 또한 다음 버전에서 사용할 많은 디스크상 데이터의 남은 공간에 대한 확장성을 염두에 두고 설계되었다.
그 때부터, ext2는 VFS API에 여러 가지 새 확장에 대한 테스트베드를 해 왔다. POSIX 접근 제어 목록과 확장 속성은 보통 ext2에 먼저 구현되었는데, 이는 ext2가 상대적으로 확장이 단순하였고 그 내부 구조가 이해하기 쉽게 되어있었기 때문이다.
2.6.17 이전의 리눅스 커널에서[34] ext2 파일 시스템에 대한 블록 드라이버 크기 제한이 최대 2 테라바이트였다.
ext2는 여전히 부팅 가능한 USB 플래시 드라이브와 다른 솔리드 스테이트 드라이브에서 저널링 파일 시스템 이상을 권장하고 있다. ext2는 저널링을 쓸 필요가 없기 때문에 ext3보다 적은 쓰기를 수행한다. 플래시 칩이 노화되는 주요 원인은 지우기 사이클의 개수이며, 이는 쓰기를 할 때 빈번히 나타나고, 감소된 쓰기 작업은 솔리드 스테이트 디바이스의 수명을 증가시킨다.[35] 같은 이유로, 플래시 장치상의 파일 시스템에 대해서는 ''noatime'' 마운트 옵션을 사용하는 것이 좋다.
3. 구조
각 블록 그룹은 슈퍼블록과 블록 그룹 서술자 테이블의 복사본, 블록 비트맵, 아이노드 비트맵, 아이노드 테이블, 그리고 실제 데이터 블록을 포함한다. 슈퍼블록은 운영 체제 부팅에 필요한 핵심 정보를 담고 있어, 파일 시스템 내 여러 블록 그룹에 백업 복사본이 만들어진다. 그러나 일반적으로는 첫 번째 블록의 첫 번째 복사본만 부팅에 사용된다. 그룹 서술자는 각 블록 그룹의 블록 비트맵, 아이노드 비트맵 및 아이노드 테이블 시작 위치를 저장하며, 이들은 그룹 서술자 테이블에 저장된다.
모든 파일이나 디렉터리는 아이노드로 표현되며, 크기, 권한, 소유권 및 디스크 위치 정보를 포함한다.
3. 1. 블록 그룹
ext2 파일 시스템에서 공간은 블록으로 나뉘며, 이 블록들은 다시 블록 그룹으로 묶인다. 이는 유닉스 파일 시스템의 실린더 그룹과 비슷한 개념이다. 대규모 파일 시스템에는 보통 수천 개의 블록이 존재한다.
각 파일의 데이터는 가능한 한 하나의 블록 그룹 안에 저장되도록 설계되어 있다. 이렇게 함으로써 외부 단편화를 줄이고, 연속된 데이터를 읽을 때 디스크 탐색 시간을 최소화할 수 있다.
각 블록 그룹은 다음과 같은 요소들을 포함한다.
슈퍼블록은 운영 체제 부팅에 필요한 핵심 정보를 담고 있으며, 파일 시스템의 여러 블록 그룹에 백업 복사본이 만들어진다. 하지만 일반적으로 부팅 시에는 파일 시스템의 첫 번째 블록에 있는 첫 번째 복사본만 사용된다.
그룹 서술자는 각 블록 그룹의 블록 비트맵, 아이노드 비트맵, 아이노드 테이블의 시작 위치 정보를 저장하며, 이 정보들은 다시 그룹 서술자 테이블에 저장된다.
3. 2. 아이노드(inode)
모든 파일이나 디렉터리는 아이노드로 표현된다. "아이노드"라는 용어는 "색인 노드"(index node)에서 유래되었다.(시간이 지나면서 i-node, 그 다음 inode가 되었다.)[25] 아이노드는 파일 또는 디렉터리의 크기, 권한, 소유권 및 디스크상의 위치에 대한 데이터를 포함한다.
ext2 아이노드 구조의 예:
ext2에 대한 리눅스 커널 문서 인용:[26]
> 아이노드에는 파일의 데이터를 포함하는 처음 12개 블록에 대한 포인터가 있다. 간접 블록(다음 블록 집합에 대한 포인터를 포함)에 대한 포인터, 이중 간접 블록에 대한 포인터, 삼중 간접 블록에 대한 포인터가 있다.
따라서 ext2에는 15개의 포인터가 있는 구조가 있다. 포인터 1~12는 직접 블록을 가리키고, 포인터 13은 간접 블록을 가리키고, 포인터 14는 이중 간접 블록을 가리키고, 포인터 15는 삼중 간접 블록을 가리킨다.
3. 3. 디렉터리
각 디렉터리는 디렉터리 엔트리의 목록이다. 각 디렉터리 엔트리는 파일명 하나와 아이노드 번호 하나를 연결하며, 아이노드 번호, 파일명 길이, 파일명을 나타내는 실제 텍스트로 구성된다. 파일을 찾으려면, 디렉터리 내 관련 파일 이름을 앞에서부터 뒤로 검색한다. 디렉터리 크기가 적당하면 이렇게 해도 괜찮지만, 큰 디렉터리에서는 비효율적이다. ext3는 단순히 파일명을 목록에 올리는 것보다 더 효율적으로 디렉터리를 저장하는 두 번째 방법을 제공한다.
루트 디렉터리는 항상 아이노드 번호 2에 저장되며, 파일 시스템 코드가 마운트할 때 이를 찾을 수 있다. 하위 디렉터리는 이름 필드에 하위 디렉터리 이름을, 아이노드 필드에 하위 디렉터리의 아이노드 번호를 저장하여 구현된다. 하드 링크는 하나 이상의 파일명과 같은 아이노드 번호를 저장하여 구현된다. 이름으로 파일에 접근하면 같은 아이노드 번호로 접근하게 되므로, 결국 같은 데이터에 접근하게 된다.
"."(현재 디렉터리)나 ".." (상위 디렉터리)와 같은 특별한 디렉터리는 디렉터리에 "."과 ".." 이름을 저장하고, 아이노드 필드에 현재 및 상위 디렉터리의 아이노드 번호를 저장하여 구현된다. 이 두 엔트리는 새 디렉터리가 만들어질 때 자동으로 생성되며, 삭제할 수 없다.
3. 4. 데이터 할당
새 파일이나 디렉터리가 만들어지면, ext2 파일 시스템은 데이터를 어디에 저장해야 하는지 결정해야 한다. 디스크가 대부분 비어있다면, 데이터는 거의 어디에나 저장될 수 있다. 그러나 탐색 시간을 최소화하기 위해 데이터가 다른 관련 데이터와 같이 클러스터된 경우 성능이 최대화된다.
ext2 파일 시스템은 상위 디렉터리를 포함하는 그룹에 각각의 새 디렉터리를 할당하려고 시도하는데, 이는 이론상 부모와 자식 디렉터리에 접근하는 것과 밀접하게 관련될 가능성이 있기 때문이다. 또한 ext2는 디렉터리 접근이 종종 파일 접근으로 이어지기 때문에 디렉터리 엔트리와 같은 그룹에 파일을 배치하려는 시도를 한다. 그러나 그룹이 가득 차면, 새 파일이나 새 디렉터리는 그렇지 않은 그룹에 배치된다.
디렉터리와 파일을 저장하는 데 필요한 데이터 블록은 데이터 할당 비트맵에서 찾을 수 있어야 한다. 아이노드 테이블 안에 있는 모든 필요 공간은 아이노드 할당 비트맵에서 찾을 수 있어야 한다.
4. 파일 시스템 제한
ext2 파일 시스템에 일부 제한이 생기는 이유는 데이터의 파일 포맷과 운영 체제의 커널 때문이다. 대부분 이 요인은 파일 시스템이 만들어질 때 한 번 결정된다. 이는 블록 크기, 블록 수와 아이노드 수의 비율에 따라 달라진다.
| 블록 크기 | 1 KB | 2 KB | 4 KB | 8 KB |
|---|---|---|---|---|
| 최대 파일 크기 | 16 GB | 256 GB | 2 TB | 2 TB |
| 최대 파일 시스템 크기 | 4 TB | 8 TB | 16 TB | 32 TB |
또한 2기가바이트보다 용량이 큰 파일은 처리할 수 없는 일부 사용자 공간 프로그램도 있다.
최대 파일 크기는 파일에서 b-byte "블록"의 양을 나타내는 i_block(EXT2_N_BLOCKS의 배열)과 i_blocks(32비트 정수 값)에 의해 min(((b/4)3+(b/4)2+b/4+12)*b, 232*b )로 제한된다.
서브레벨 디렉터리는 링크 횟수 제한 때문에 31998로 제한된다. ext2는 디렉터리 색인을 제공하지 않으므로 1만 개 이상의 많은 파일이 있는 디렉터리에서는 성능에 문제가 있다. 실질적인 상황에 대한 수치는 아니지만, 디렉터리에 있는 파일 수에 대한 이론적 제한은 1.3 × 1020이다.
'''참고''': 리눅스 커널 2.4와 그 이전 버전에서 블록 장치는 2테라바이트로 제한되었으며, 블록 크기에 관계없이 파티션 하나의 최대 크기를 제한하였다.
5. 압축 확장 (e2compr)
e2compr은 리눅스 커널에서 사용자 애플리케이션의 지원 없이 파일 시스템에서 파일의 온라인 압축과 압축 해제를 지원하는 ext2 파일 시스템 드라이버의 변형이다. e2compr은 on-the-fly 압축과 압축 해제 기능을 제공하는 ext2 파일 시스템의 작은 패치다.
e2compr은 일반 파일만 압축한다. 관리 데이터(슈퍼 블록, 아이노드, 디렉터리 파일 등)는 보안을 이유로 압축되지 않는다. 읽기 및 쓰기 작업을 위해 압축된 블록에 대한 접근이 제공된다. 압축 알고리즘과 클러스터 크기는 파일 단위로 지정된다. 디렉터리 역시 압축을 나타내며, 이 경우 디렉터리에서 새로 생성된 모든 파일이 같은 클러스터 크기와 디렉터리에 지정된 같은 알고리즘으로 자동 압축된다.
e2compr은 새로운 파일 시스템이 아니다. 단지 EXT2_COMPR_FL 플래그를 지원하도록 만들어진 ext2 파일 시스템의 패치 버전일 뿐이다. e2compr은 새로운 파티션을 만들 것을 요구하지 않으며, 이미 존재하는 ext2 파일 시스템의 읽기와 쓰기를 지속할 것이다. 간단히 gzip이나 compress와 비슷한 단순 유틸리티로 만든 파일에 접근할 때 루틴을 읽고 쓰는 방법을 고려할 수도 있다. 압축된 파일과 압축 해제된 파일은 공존할 수 있다.
e2-compr에서 갈라져 나온 최신 판은 현재 리눅스 커널 2.4, 2.6, 3.0에서 사용 가능하다. 커널 3.0대의 최신 패치는 2011년 8월에 나왔으며 멀티 코어와 고메모리를 지원한다. 2.2와 2.0 이하 버전을 지원하는 더 안정적인 판도 있다.
6. 다른 운영 체제에서의 지원
Microsoft Windows 환경에서 ext2 파티션에 접근하려면 ext2ifs[30]나 ext2Fsd와 같은 설치 가능한 파일 시스템이 필요하다.[31] 사용자 공간 파일 시스템은 macOS에서 사용할 수 있다.[32]
참조
[1]
웹사이트
Chapter 8. Disks, File Systems, and Boot Loaders
https://www.freebsd.[...]
2018-04-11
[2]
웹사이트
ext2fs(5)
https://www.freebsd.[...]
2018-04-11
[3]
웹사이트
ReactOS 0.4.2 Released
https://reactos.org/[...]
2016-08-17
[4]
웹사이트
HelenOS Wiki: Ext4fs
http://www.helenos.o[...]
2023-11-06
[5]
웹사이트
pkg/lwext4: add lightweight implementation of the ext2/3/4 filesystem
https://github.com/R[...]
2023-11-06
[6]
웹사이트
subsys: fs: Implementation of ext2 file system
https://github.com/z[...]
2023-11-06
[7]
서적
Professional Linux Kernel Architecture
https://books.google[...]
John Wiley & Sons
[8]
웹사이트
GNU Hurd/ hurd/ translator/ ext2fs
https://www.gnu.org/[...]
2024-02-10
[9]
웹사이트
MINIX Release 3.2.0
https://wiki.minix3.[...]
2024-02-10
[10]
웹사이트
git.minix3.org Git - minix.git/tree - minix/fs/ext2/
https://git.minix3.o[...]
2024-02-10
[11]
웹사이트
NetBSD src/sys/ufs/ext2fs/
http://cvsweb.netbsd[...]
2024-02-10
[12]
웹사이트
OpenBSD src/sys/ufs/ext2fs/
https://cvsweb.openb[...]
2024-02-10
[13]
웹사이트
ext2fs « fs « sys - src - FreeBSD source tree
https://cgit.freebsd[...]
2024-02-10
[14]
웹사이트
freemint/sys/xfs/ext2fs at master · freemint/freemint
https://github.com/f[...]
2024-02-10
[15]
웹사이트
ext2 « file_systems « kernel « add-ons « src - haiku - Haiku's main repository
https://git.haiku-os[...]
2024-02-10
[16]
웹사이트
matt-wu/Ext3Fsd: Ext2/3/4 file system driver for Windows
https://github.com/m[...]
2024-02-10
[17]
웹사이트
ext4: Allow ext4 to run without a journal
https://git.kernel.o[...]
2021-01-12
[18]
웹사이트
Linux File Systems: Ext2 vs Ext3 vs Ext4
https://www.thegeeks[...]
2020-07-13
[19]
서적
Linux—Unleashing the Workstation in Your PC
Springer-Verlag
[20]
웹사이트
Anatomy of ext4
http://www.ibm.com/d[...]
IBM Developer Works
2009-02-17
[21]
뉴스
'[PATCH] 2TB files: add blkcnt_t, Author:Takashi Sato, 26 Mar 2006 09:37:52 +0000 (01:37 -0800) — Commit allowing for large files, git.kernel.org'
https://archive.toda[...]
2006-03-26
[22]
웹사이트
Solid State Disk Drives
http://www.supertale[...]
Super Talent Technology
[23]
웹사이트
Linux 6.9 Deprecates The EXT2 File-System Driver
https://www.phoronix[...]
2024-03-26
[24]
웹사이트
ext2 filesystem driver now marked as deprecated - Bootlin's blog
https://bootlin.com/[...]
2024-03-25
[25]
간행물
"Programmer's Journal", Volume 5, 1987, p. 174
[26]
웹사이트
The Second Extended File System
https://www.nongnu.o[...]
2019-12-11
[27]
웹사이트
File system guide
http://linuxreviews.[...]
Linux Reviews
2008-01-24
[28]
웹사이트
Creating the Ext2 Filesystem - Understanding the Linux kernel, Second edition
https://www.oreilly.[...]
2023-07-25
[29]
웹사이트
The Second Extended File System
https://cscie28.dce.[...]
2024-12-07
[30]
간행물
Linux: You Can Do It!
https://books.google[...]
2007-09-18
[31]
웹사이트
Enable the mounting of ext2/3 file systems on a Windows machine
http://www.techrepub[...]
2016-01-17
[32]
웹사이트
How to manage Ext2/Ext3 disks in OS X
http://www.cnet.com/[...]
2016-01-17
[33]
웹사이트
The Second Extended Filesystem — the Linux Kernel documentation
https://www.kernel.o[...]
[34]
뉴스
'[PATCH] 2TB files: add blkcnt_t, Author:Takashi Sato, 26 Mar 2006 09:37:52 +0000 (01:37 -0800) — Commit allowing for large files, git.kernel.org'
http://git.kernel.or[...]
[35]
웹인용
Solid State Disk Drives
http://www.supertale[...]
Super Talent Technology
[36]
웹인용
File system guide
https://web.archive.[...]
Linux Reviews
2011-09-01
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com