ext2

ext2
ext2
개발자레미 카드
풀네임두 번째 확장 파일 시스템
소개했다1993년 1월 Linux 사용
파티션 식별자Apple_UNIX_SVR2(Apple 파티션 맵)
0x83(마스터 부트 레코드)
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7(GPT)
구조물들
디렉토리 내용테이블
파일 할당비트맵(사용 가능한 공간), 테이블(표준)
불량 블록테이블
한계
최대 볼륨 크기2 ~ 32 TiB
최대 파일 크기16 GiB –2 TiB
최대 파일 수10개18
최대 파일 이름 길이255 바이트
파일 이름에 허용되는 문자NUL('\0') 및 '/'을 제외한 모든 바이트
특징들
기록된 날짜변경(mtime), 속성 변경(ctime), 액세스(atime)
날짜 범위1901년 12월 14일~2038년 1월 18일
날짜 해결1초
파일 시스템 권한POSIX
투과적 압축아니요(패치를 통해 이용 가능)
투과적 암호화아니요.
다른.
지원되는 운영 체제Linux, BSD,[1][2] ReactOS,[3] Windows(IFS 경유), macOS(IFS 경유)

ext2 또는 second 확장 파일시스템은 Linux 커널용 파일시스템입니다.처음에는 프랑스 소프트웨어 개발자인 Rémy Card가 확장 파일 시스템(ext)을 대체하기 위해 설계했습니다.BSDBerkeley Fast File System과 동일한 원리에 따라 설계된 이 [4]제품은 Linux용 최초의 상용 파일 시스템입니다.

ext2의 정식 실장은 Linux 커널의 "ext2fs" 파일 시스템 드라이버입니다.GNU Hurd, MINIX 3, 일부 BSD 커널, MiNT, Haiku서드파티제의 Microsoft Windows 및 MacOS 드라이버에는 다양한 품질과 완전성이 구현되어 있습니다.

ext2는 ext2와 거의 완전히 호환되며 저널링 파일 시스템인 ext3로 대체되기 전까지 DebianRed Hat Linux를 포함한 여러 Linux 디스트리뷰션에서 기본 파일 시스템이었습니다.ext2는 여전히 플래시 기반 스토리지 미디어(: SD 카드 및 USB 플래시 드라이브)에 적합한 파일 시스템입니다. 저널이 없으면 성능이 향상되고 쓰기 횟수가 최소화되며 플래시 디바이스는 쓰기 사이클이 제한되기 때문입니다.2009년 [5]이후 Linux 커널ext4 저널리스 모드를 지원하므로 파일이나 볼륨 사이즈가 커지는 등 [6]ext2에서는 얻을 수 없는 이점을 얻을 수 있습니다.

역사

리눅스 커널의 초기 개발은 MINIX 운영 체제 하에서 교차 개발로 이루어졌습니다.MINIX 파일 시스템은 Linux의 첫 번째 파일 시스템으로 사용되었습니다.Minix 파일 시스템은 대부분 버그가 없었지만 내부적으로 16비트 오프셋을 사용했기 때문에 최대 크기 제한은 64MB에 불과했고 파일 이름 길이 제한도 14자였습니다[7].이러한 제한으로 [7]인해 Linux용 대체 네이티브 파일 시스템에 대한 작업이 시작되었습니다.

새로운 파일 시스템을 쉽게 추가하고 범용 파일 API를 제공하기 위해 가상 파일 시스템 계층인 VFS가 Linux 커널에 추가되었습니다.확장 파일 시스템(ext)은 VFS API를 사용한 최초의 파일 시스템으로 1992년 4월에 출시되었으며 Linux 버전 0.96c에 포함되어 있습니다.확장 파일 시스템은 Minix 파일 시스템의 두 가지 주요 문제(최대 파티션 크기 및 파일 이름 길이 제한 14자)를 해결하여 최대 255자의 데이터와 파일 이름을 2GB까지 허용했습니다.그러나 파일 액세스, inode 수정 및 데이터 수정에 대한 별도의 타임스탬프가 지원되지 않는 문제가 있었습니다.

이러한 문제에 대한 해결책으로 1993년 1월 Linux 커널 0.99용으로 두 개의 새로운 파일 시스템이 개발되었습니다: 샤프와 두 번째 확장 파일 시스템(ext2)은 버클리 패스트 파일 시스템의 많은 아이디어를 통합한 확장 파일 시스템의 정비였습니다.또한 ext2는 확장성을 염두에 두고 설계되었으며, 향후 버전에서 사용할 수 있도록 많은 온디스크 데이터 구조에 공간이 남아 있습니다.

이후 ext2는 VFS API의 새로운 확장 기능의 많은 테스트베드가 되었습니다.취소POSIX 초안 ACL 제안 및 철회된 확장 속성 제안 등의 기능은 확장하기가 비교적 간단하고 내부가 잘 이해되었기 때문에 일반적으로 ext2에 먼저 구현되었습니다.

2.6.17 [8]이전 Linux 커널에서는 블록 드라이버의 제한이 있기 때문에 ext2 파일 시스템의 최대 파일 크기는 2TiB입니다.

부팅 가능한 USB 플래시 드라이브 및 기타 솔리드 스테이트 드라이브의 저널 파일 시스템보다 ext2를 사용하는 것이 좋습니다.저널링이 없기 때문에 ext2는 ext3보다 쓰는 횟수가 적습니다.플래시 칩의 주요 에이징 팩터는 소거 사이클의 수이며, 쓰기 시 소거 사이클이 빈번하게 발생하기 때문에 쓰기를 줄이면 솔리드 스테이트 [9]디바이스의 수명이 늘어납니다.플래시 디바이스상의 파일시스템에 대한 다른 좋은 방법은 같은 이유로 noatime mount 옵션을 사용하는 것입니다.

ext2 데이터 구조

ext2의 공간은 블록으로 분할됩니다.이러한 블록은 Unix File System의 실린더 그룹과 유사한 블록 그룹으로 그룹화됩니다.일반적으로 대규모 파일 시스템에는 수천 개의 블록이 있습니다.일반적으로 특정 파일의 데이터는 가능한 경우 단일 블록 그룹에 포함됩니다.이는 대량의 연속 데이터를 읽을 때 디스크 검색 수를 최소화하기 위해 수행됩니다.

각 블록 그룹은 슈퍼블록 및 블록 그룹 기술자 테이블의 복사본을 포함하고, 모든 블록 그룹은 블록 비트맵, 아이노드 비트맵, 아이노드 테이블 및 마지막으로 실제 데이터 블록을 포함한다.

슈퍼블록에는 운영체제 부팅에 중요한 중요한 정보가 포함되어 있습니다.따라서 백업 복사본은 파일 시스템에서 여러 블록 그룹으로 만들어집니다.그러나 일반적으로 파일 시스템의 첫 번째 블록에 있는 첫 번째 복사본만 부팅에 사용됩니다.

그룹 기술자는 각 블록 그룹에 대한 블록 비트맵, inode 비트맵 위치 및 inode 테이블의 시작을 저장합니다.이들은 그룹 기술자 테이블에 저장됩니다.

이노드

모든 파일 또는 디렉토리는 inode로 표시됩니다."inode"라는 용어는 "index node"에서 유래했습니다(시간이 지남에 따라 [10]i-node가 되고 나서 inode가 되었습니다).inode에는 파일 또는 디렉토리의 디스크 크기, 사용 권한, 소유권 및 위치에 대한 데이터가 포함됩니다.

ext2 inode 구조의 예:

Estructure

ext2의 Linux 커널 매뉴얼에서 인용:

"inode에 파일 데이터를 포함하는 처음 12개 블록에 대한 포인터가 있습니다.간접 블록에 대한 포인터(다음 블록 세트에 대한 포인터 포함), 이중 간접 블록에 대한 포인터 및 삼중 간접 블록에 대한 포인터가 있습니다."[11]

따라서 ext2에는 15개의 포인터를 가진 구조가 있습니다.포인터 1~12는 다이렉트 블록을 가리키고 포인터 13은 간접 블록을 가리키며 포인터 14는 이중 간접 블록을 가리키고 포인터 15는 삼중 간접 블록을 가리키고 있다.

디렉토리

각 디렉토리는 디렉토리 엔트리의 리스트입니다.각 디렉토리 엔트리는 하나의 파일 이름과 하나의 inode 번호를 관련짓습니다.inode 번호, 파일 이름의 길이 및 파일 이름의 실제 텍스트로 구성됩니다.파일을 검색하려면 디렉토리에서 관련된 파일 이름을 전면에서 후면으로 검색합니다.적절한 디렉토리 사이즈의 경우는, 이것으로 괜찮습니다.그러나 매우 큰 디렉토리의 경우 이는 비효율적이며 ext3는 파일 이름 목록보다 더 효율적인 두 번째 디렉토리(HTREE) 저장 방법을 제공합니다.

루트 디렉토리는 항상 inode 2에 저장되어 있기 때문에 파일시스템 코드가 마운트 시에 찾을 수 있습니다.서브 디렉토리는 서브 디렉토리의 이름을 이름 필드에 저장하고 서브 디렉토리의 inode 번호를 inode 필드에 저장함으로써 구현됩니다.하드 링크는 동일한 inode 번호를 여러 파일 이름으로 저장함으로써 구현됩니다.어느 하나의 이름으로 파일에 액세스하면, 같은 inode 번호, 즉 같은 데이터가 됩니다.

특수 디렉토리 「.」(현재 디렉토리)와 「..」(부모 디렉토리)는, 디렉토리에 이름 「.」와 「..」를, inode 필드에 현재의 디렉토리와 부모 디렉토리의 inode 번호를 보존하는 것으로 실장됩니다.이러한 2개의 엔트리가 특별히 취급되는 것은, 새로운 디렉토리가 작성되었을 때에 자동적으로 작성되어 삭제할 수 없는 경우 뿐입니다.

데이터 할당

새 파일 또는 디렉토리가 생성되면 ext2는 데이터를 저장할 위치를 결정해야 합니다.디스크가 대부분 비어 있는 경우 데이터를 거의 어디에나 저장할 수 있습니다.그러나 데이터를 관련 데이터와 클러스터링하면 검색 시간을 최소화하고 성능을 극대화할 수 있습니다.

ext2는 부모 디렉토리와 자녀 디렉토리에 대한 액세스가 밀접하게 관련되어 있다는 이론에 따라 부모 디렉토리를 포함하는 그룹 내의 각 새로운 디렉토리를 할당하려고 합니다.또한 ext2는 디렉토리 엔트리와 같은 그룹에 파일을 배치하려고 합니다.이는 디렉토리 액세스가 파일접근으로 이어지는 경우가 많기 때문입니다.그러나 그룹이 꽉 차면 새 파일 또는 디렉토리가 일부 다른 완전하지 않은 그룹에 배치됩니다.

디렉토리 및 파일 저장에 필요한 데이터 블록은 데이터 할당 비트맵에서 찾을 수 있습니다.inode 테이블에서 필요한 공간은 inode 할당 비트맵에서 찾을 수 있습니다.

파일 시스템 제한

Linux에서의[12] 이론적인 ext2 제한
블록 크기: 1 KiB 2 KiB 4 KiB 8KiB
최대 파일 크기: 16 GiB 256 GiB 2 TiB 2 TiB
최대 파일 시스템 크기: 4 TiB 8 TiB 16 TiB 32 TiB

ext2의 몇 가지 제한이 있는 이유는 데이터의 파일 형식과 운영 체제의 커널입니다.대부분의 경우 이러한 요인은 파일 시스템이 구축될 때 한 번 결정됩니다.블록 크기 및 블록 수와 아이노드 [citation needed]수의 비율에 따라 달라집니다.Linux의 경우 블록 크기는 아키텍처 페이지 크기에 따라 제한됩니다.

또한 2 GiB보다 큰 파일을 처리할 수 없는 사용자 공간 프로그램도 있습니다.

b가 블록사이즈일 경우 최대 파일사이즈는 i_block 구조(직접/간접 EXT2_N_BLOCKS 배열)와 i_blocks([original research?]32비트 정수값)로 인해 min[verification needed](((b/4)3 + (b/4)2 + b/4 + 12) × b, (232 - 1) × 512)로 제한됩니다.

서브레벨 디렉토리의 최대수는 링크카운트 [citation needed]제한으로 인해 31998 입니다.ext2에서는 디렉토리 인덱싱을 사용할 수 없기 때문에 파일 수가 10,000개 이상인 디렉토리의 퍼포먼스에 문제가 있습니다.디렉토리 내의 파일 수에 대한 이론적 제한은 1.3 × 10이지만20,[original research?] 이는 실제 상황과 관련이 없습니다.

주의: Linux 2.4 이전 버전에서는 블록 디바이스는 2TiB로 제한되어 블록 [citation needed]크기에 관계없이 파티션의 최대 크기를 제한했습니다.

압축 확장

e2comprLinux 커널의 ext2 드라이버를 수정하여 파일시스템에 의한 파일 압축 및 압축 해제를 지원하며 사용자 어플리케이션에 의한 지원은 없습니다.e2syslog는 ext2에 대한 작은 패치입니다.

e2blocks는 일반 파일만 압축합니다.관리 데이터(슈퍼블록, inode, 디렉토리 파일 등)는 압축되지 않습니다(안전상의 이유로 압축되지 않습니다).읽기 및 쓰기 작업을 위해 압축 블록에 대한 액세스가 제공됩니다.압축 알고리즘 및 클러스터 크기는 파일 단위로 지정됩니다.디렉토리에 압축 마크를 붙일 수도 있습니다.이 경우 디렉토리에서 새로 작성된 모든 파일은 디렉토리에 대해 지정된 것과 동일한 클러스터 크기와 알고리즘으로 자동으로 압축됩니다.

e2dl은 새로운 파일 시스템이 아닙니다.EXT2_COMPR_FL 플래그를 지원하기 위해 만들어진 ext2에 대한 패치일 뿐입니다.사용자가 새 파티션을 만들 필요가 없으며 기존 ext2 파일 시스템을 계속 읽거나 쓸 수 있습니다.읽기 및 쓰기 루틴이 gzip 또는 compress와 유사한 단순한 유틸리티로 작성된 파일에 액세스하는 단순한 방법으로 간주할 수 있습니다.ext2 파티션에서는 압축된 파일과 압축되지 않은 파일이 적절히 공존합니다.

최신 e2compr-branch는 Linux 2.4, 2.6 및 3.0의 최신 릴리스에서 사용할 수 있습니다.최신 Linux 3.0용 패치는 2011년 8월에 출시되었으며 멀티코어대용량 메모리를 지원합니다.Linux 2.0 및 2.2 용 브랜치도 있습니다.

다른 운영 체제에서는

Microsoft Windows 의 ext2 파티션에의 액세스는, ext2ifs[13] [14]ext2Fsd 와 같은 인스톨 가능한 파일 시스템을 개입시켜 실시할 수 있습니다.사용자 공간의 파일 시스템을 MacOS에서 [15]사용할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Chapter 8. Disks, File Systems, and Boot Loaders". www.freebsd.org. Retrieved 11 April 2018.
  2. ^ "ext2fs(5)". www.freebsd.org. Retrieved 11 April 2018.
  3. ^ "ReactOS 0.4.2 Released". reactos.org. Retrieved 17 August 2016.
  4. ^ Mauerer, Wolfgang (2010). Professional Linux Kernel Architecture. John Wiley & Sons. ISBN 9781118079911.
  5. ^ "ext4: Allow ext4 to run without a journal". Linux kernel source tree. Retrieved 12 January 2021.
  6. ^ "Linux File Systems: Ext2 vs Ext3 vs Ext4". www.thegeekstuff.com. Retrieved 2020-07-13.
  7. ^ a b Strobel, Stefan; Uhl, Thomas (1994). Linux—Unleashing the Workstation in Your PC. Springer-Verlag. p. 54.
  8. ^ linux/kernel/git/torvalds/linux-2.6.git/commitdiff:, [PATCH] 2TB 파일: add blkcnt_t, 작성자:Takashi Sato, 2006년 3월 26일 09:37:52 +0000 (01:37-0800) - 대용량 파일 허용, git.kernel.org
  9. ^ "Solid State Disk Drives". Super Talent Technology.
  10. ^ "프로그래머 저널", 제5권, 1987, 페이지 174
  11. ^ "The Second Extended File System". www.nongnu.org. Retrieved 2019-12-11.
  12. ^ "File system guide". Linux Reviews. Archived from the original on 2011-09-17. Retrieved 2008-01-24.
  13. ^ Randall, Neil (September 18, 2007). "Linux: You Can Do It!". PC Magazine. Vol. 26, no. 18. p. 76.
  14. ^ Wallen, Jack (September 17, 2012). "Enable the mounting of ext2/3 file systems on a Windows machine". TechRepublic. Retrieved January 17, 2016.
  15. ^ Kessler, Topher (June 22, 2012). "How to manage Ext2/Ext3 disks in OS X". CNET. Retrieved January 17, 2016.
  16. ^ "The Second Extended Filesystem — the Linux Kernel documentation".

메모들

추가 정보

외부 링크