1/15 16 기 장영일 Ext File System
2/15 처음에 Minix 가 사용되었다 ( 제약사항 ) 최대로 저장할 수 있는 파일의 크기 – 64M : 16bit 정수로 블록 주소 지정 -> 1024( 블록 기본 사이즈 ) * (2^16) = 64M Ext ( Extended FileSystem ) Minix 의 문제점 개선 ( 여전히 문제는 있음 ) Inode 수정 불가 비어있는 블록이나 Inode 를 다루는 자료구조로 연결 리스트를 사용하여 낮은 성능을 초래 -> 정렬 불가, 노드가 흩어지는 결과 초래 Linux 의 파일 시스템
3/15 Ext 의 문제점 보완 XIA 긴 파일명 사용 가능 2GB 의 File System 이 사용 가능 Ext2 Ext 에 기반, 상당 부분 재구성 여러 가지 기능 추가 결국 Ext2 가 매우 안정적인 File System 으로 알려짐
4/15 UFS & Ext Ext 는 UFS( Unix FileSystem ) 에서 기본 개념을 가져왔다 단순한 USF 의 클론이 아니라 UFS 에서 사용 되지 않는 부분이나 구조적으로 명료하다고 생각 되지 않는 부분들은 모두 제외
5/15 Ext2 FileSystm 구조
6/15 Ext2 FileSystem Layout Block – Ext2 filesystem 에서 기본적으로 데이터를 저장 하는 단위를 나타내며, 저장장치에서 한 번의 I/O 과정에 읽어 들이는 단위 가장 마지막 블록 그룹을 제외한 모든 블록 그룹들은 같은 블록 개수를 가진다. 파일명, meta data, file data 등이 기록된다.
7/15 Block group layout OS kernel 에서는 가능하면 같은 파일에 속하는 데이터 블록은 같은 블록에 저장하려 하므로 블록 그룹은 결국 파일의 단편화를 줄일 수 있다. 블록 그룹의 개수와 크기는 디스크의 해당 파티션과 블록의 크기에 따라서 달라진다.
8/15 Block group layout 블록 그룹의 개수와 크기는 디스크의 해당 파티션과 블록의 크기에 따라서 달라진다. - block bitmap 이 표시할 수 있는 최대 블록의 개수 : 4KB 일 경우 : 8 bit * 4096 = 32, Block 이 4KB 인 경우 하나의 블록 그룹이 가질 수 있는 최대 블록 개수 : 32KB * 4KB = 128MB 개 - 예로 10GB 의 파티션에 생성되는 블록 그룹의 개수 : 10240MB / 128MB = 80 개
9/15 Super Block 주요 설정 정보들이 기록되는 영역 반드시 블록 그룹의 시작부터 1024Byte 내에 기록되어야 하면, 1024Byte 의 크기여야 한다. ( 블록 크기가 4KB 이면 3KB 는 비는 걸로 한다. 슈퍼 블록의 물리적 위치가 변경된다면 여러 가지로 신경 써야 할 부분이 늘어나므로 블록의 시작부터 1024Byte 내에 기록되어야 한다. ) 슈퍼 블록의 사본은 모든 블록 그룹들의 첫 번째 블록에 저장된다.
10/15 Super Block 슈퍼 블록에 저장되는 주요 데이터 : 1. block 의 크기 ( 1KB, 2KB, 4KB ) 2. 총 블록의 개수 3. 블록 그룹의 개수 4. Inode 의 개수 5. 그룹 내의 블록 / Inode 의 개수 Boot code 와 Super Block 사이에 1024Byte 의 예약된 영역이 있다. ( boot sector 를 위해 예약 ) 따라서 MBR 내의 파티션 테이블에서 파티션의 시작 위치를 가져온 뒤 1024Byte 의 offset 을 두어야 한다. Magic Number – 56(0x38) 번지가 0xEF53 이면 이는 슈퍼블록이다.
11/15 Group Discriptor Table 모든 블록 그룹에 대한 Descriptor 를 가짐 모든 블록 그룹들이 GDT 의 사본을 가짐 32 Byte 로 구성 주요 데이터 1. Block Bitmap 의 블록 번호 2. Inode Bitmap 의 블록 번호 3. 첫 번째 Inode Table Block 의 블록 번호 4. 그룹 안에 있는 빈 블록 수 5. 그룹 안에 있는 Inode 수 6. 그룹 안에 있는 빈 디렉토리 수
12/15 Inode 파일 객체가 저장되는 곳은 Inode 데이터 구조 Inode Table 의 위치는 GDT 에 기록되어 있다. Block Group = ( Inode – 1 ) / INODES_PER_GROUP Count of Inode Table = INODES_PER_GROUP / INODES_PER_BLOCK N 번째 Inode 가 담겨 있는 Block Group = ( n – 1 ) / INODES_PER_GROUP * INODES_PER_GROUP : super block 에 정의되어 있음 * N – 1 : 인덱스가 1 로 시작
13/15 Inode 파일시스템의 모든 파일이나 Directory 는 각기 하나의 Inode 가 할당되어 있다. Inode 의 할당 여부를 Inode Bitmap, Inode Table 로 확인한다. Inode 크기는 Super Block 의 inode structure size 항목 에 기록된 값으로 파악한다. Inode 구조체의 크기 : 128 Byte Super Block 의 inode per group 항목의 개수만큼 연속 적으로 기록되어 있으므로 Inode Table 의 전체적인 크 기를 계산해 블록 데이터 영역을 찾아간다. 파일 크기, 시간 정보, 권한 등의 내용 저장
14/15 Inode block pointers ( i_block 변수 ) 데이터 블록을 가리키는 포인터 배열 ( int 형 15 개 ) 0 ~ 11 : 직접 블록을 가리킴 ( Direct ) 12 ~ 15 : 위치 블록을 가리킴 ( Indirect ) 이중 간접 포인터인 i_block[13] 의 경우 256 * 256 만큼의 파일을 저장할 수 있다. 삼중 간접인 경우 64MB * 256 이므로 16,384(16G) 를 저장할 수 있다. 결국 12KB + 256KB + 64M + 16GB 가 블록의 크기가 1KB 일 때 Inode 에서 저장할 수 있는 파일의 크기
15/15 Data 영역 Directory 와 File 은 동일하다. 단지 Inode 의 파일 모드 플래그가 다르다. Group Descriptor 에서부터 디렉토리 엔트리를 찾아가 는 경로