2019-01-07
EXT2 파일 시스템
[아래 내용의 환경]
CentOS 6
3GB-HDD, 2GB-파티션
EXT2 Format
NewMonday.txt 파일, 10글자내용
-> poweroff -> centos의 하드디스크를 분석용 PC에 달기
EXT File System
종류
- EXT2 : 리눅스 계열의 주 파일시스템
- EXT3 : EXT2 + Journaling file system
- EXT4
- EXT2
- Block(Data Block) : 섹터의 모음 (=Cluster)
- 파티션의 처음부터 블록단위로 사용한다.
[참고] UFS의 경우: cluster == EXT의 경우 : block
EXT 2 파일 시스템의 구조 개요
- First Block(0번 Block)
- Boot Sector(0~1번 Sector)
- Super Block(2번 Sector)
- GDT(Group Descriptor Table)
- Group Descriptor Entries
- Block Groups
- Block Bitmap
- Inode Bitmap
- Inode Table
- Inodes
- 파일에 대한 정보 모두 가지고 있음 without 파일이름
- 파일 하나에 Inode 하나
- Data Blocks
- Root Directory
- Sub Directories
- Filies
- First Block(0번 Block)
[ MBR의 위치 확인 ]
0x3F = 0번 block의 상대값
- Boot Sector
파티션의 첫번째, 두번째 섹터는 Boot Strap Code가 기록되는 공간
- Super Block
[ Super Block의 구조 ]
- 파티션의 구조 정보
- Block count: 파티션의 Block의 개수
- 파티션의 크기(Byte) = Block 개수 * Block 크기
- 파티션의 크기(Byte) = Block 개수 * Block 크기
- 섹터의 모음
- 일반적으로 가장 많이 사용하는 블록의 크기는 4KB(4096 Byte, 섹터 8개)
- Inode count: 파티션의 Inode의 개수
- Reserved Block count
- 예약된 블록의 개수
- 파티션이 꽉찼을 때를 대비하여 예비공간을 확보하는 개념
- Free Block count
- 사용되지 않고 있는 블록의 개수
- Free Inode count
- 사용되지 않고 있는 inode의 개수
- Log Block Size
- Block 의 크기를 의미한다.
- 0 -> DataBlock의 크기가 1024 Bytes
- 1 -> DataBlock의 크기가 2048 Bytes
- 2 -> DataBlock의 크기가 4096 Bytes
- Block per Group : 블록 그룹이 몇개의 데이터블록으로 구성되었는지 기록되어 있다.
- Inode per Group : 블록 그룹에 몇개의 inode이 있는지 기록되어 있다.

[Super Block - Magic Signatuer ]
- GDT entry
- Starting Block Address of Block Bitmap
- Starting Block Address of Inode Bitmap
- Starting Block Address of Inode Table
0x84=132
(132*8)+63
block addr. * Sector per block + 0번 block의 섹터 절대값
- Block Group
- 데이터 블록을 관리하기 용이하게 하기 위해서 그룹으로 묶어 놓았다.
- 그룹 별로 Inode Table, Data Block 등의 구조가 따로 만들어 진다.
- GDT (Group Descriptor Table) Entry에 그룹의 위치와 구조가 기록되어 있다.
- Block Bitmap
- Block의 사용현황을 빠르게 파악할 수 있도록 표의 형태로 관리
- 예) 0번 비트가 1이면 0번 블록은 사용중임
- 1번 비트가 0이면 1번 블록은 사용중이지 않음
- 예) BitMap의 값이 0xFF07 이면 1111 1111 0000 0111
- => 1111 1111 1110 0000 으로 바이트 단위로 상위 주소에서 하위 주소로 읽는다.
- Inode Bitmap
Inode의 사용현황을 빠르게 파악할 수 있도록 표의 형태로 관리
- Inode Table
Inode를 모아놓은 공간
- Inode
[ 1개의 Inode ]
Directory Entry
- File Mode
[linux - chmod : rwx 부분 ]
[ 파일 모드 ]
0x41ED =
4000[Directory] +100[소유자:읽기] + E[소유자: 쓰기, 실행, 소유그룹: 읽기] +D[소유그룹: 쓰기, 기타: 쓰기, 실행]
예) Root Directory = 0x41ED
drwxr-xr-x
- d --> 0x4000
- 소유자 권한 rwx --> 0x100 + 0x80 + 0x40
- 소유그룹 권한 r-x --> 0x20 + 0x8
- 기타 권한 r-x --> 0x4 + 0x1
==> 0x41ED
- UID(16bit)
- Size (Byte)(32bit)
- Last Modified Time(32bit)
- 파일 내용이 변경되는 경우에 업데이트된다.
- 파일 수정, touch 명령 사용 시
- Deleted Time (32bit)
- 파일이 삭제된 시간 정보
- 파일이 삭제될 때 기록된다.
- GID(16bit)
- 이 파일의 소유그룹의 ID (GID)
- Hard Link (16bit)
- 디렉토리 엔트리는 다른 것을 사용하지만 Inode는 같은 것을 사용한다.
- Block Count (32bit)
- Flags(32bit)
- OS Description 1(32bit)
- Direct Pointer (32bit * 11=352 bit)
- 파일의 내용이 들어있는 블록의 번호가 기록되어 있다.
- 12개의 Direct Pointer가 있으므로 기록할 수 있는 파일의 크기는 최대 48KB이다.
- 12 * 4KB = 48KB
- Single Indirect Pointer (32bit)
- 추가한 Direct Pointer가 있는 블록의 번호가 기록되어 있다.
- 여기에 적혀있는 블록을 가보면 Direct Point가 1024개가 있다.
- Single Indirect Pointer를 사용하면 최대 1024개의 Direct Pointer가 추가되므로 4MB
- 1 * Single Indirect Pointer --> 1024 * Direct Pointer --> 1024 * 4KB = 4096KB =4MB
- Double Indirect Pointer (32bit * 11=352 bit)
- 추가한 Single Indirect Pointer가 있는 블록의 번호가 기록되어 있다.
- 여기에 적혀있는 블록을 가보면 Single Indirect Point가 1024개가 있다.
- Double Indirect Pointer를 사용하면 최대 1024개의 Single Indirect Pointer가 추가되고 Single Indirect Pointer 1개마다 1024개의 Direct Pointer가 있기 때문에 최대 저장할 수 있는 파일을 크기는 4GB
- 1024 * 1024 * 4KB =4GB
- Triple Indirect Pointer (32bit)
- 추가한 Double Indirect Pointer가 있는 블록의 번호가 기록되어 있다.
- 여기에 적혀있는 블록을 가보면 Double Indirect Point가 1024개가 있다
- 1024 * 1024 * 1024 * 4KB = 4TB
- Generation Number(32bit)
- File ACL(32bit)
- Directory ACL(32bit)
- Block Address of Fragmentation(32bit)
- OS Description 2(96bit)
[ 예약된 INODE ]
[ 1 섹터당 2개의 INODE TABLE ]
2번 Inode는 Root Directory
[ Directory Pointer ]
루트디렉토리의 포인터로 이동
0x268 번째 Block의 첫번째 섹터
Directory Entry
[ Directory Entry ]
2번 INODE : ROOT Directory
0x0A : lost+found directory 의 주소 (1번노드시작점부터 11번째 노드가 주소)
[참고]
lost+found --> fsck
파일이 있었는데 fsck(검사)를 했더니 사라지는 경우는!
lost+found에 넣어뒀을것임
[ Root Directory 이후의 directory 중 3번째 ]
0x3008 의 주소로

No comments:
Post a Comment