'Ext2 파일시스템'에 해당되는 글 1건

반응형

Boot Sector의 크기는 2 Sector = 1KB(0x400)이므로 Super Block의 위치는 0x400부터 시작한다.

해당위치로 이동하면,

Log Block Size( 블록 크기 ) = 0x2000, Inode Per Group( 각 블록그룹에 속한 inode ) = 0xef53, Block Per Group( 각 블록 그룹에 속한 block ) = 0x8000을 얻을 수 있다.

Ext2에서 Root inode number2이다. 따라서 (inode number – 1)/block per group을 하면 Rootinode가 속한 그룹은 0번임을 알 수 있다. 그리고 (inode number -1)%block per group을 하여 Root index1임을 알 수 있다.

그리고 Root안의 데이터를 보기위해 Group Descriptor Table을 보아 Group 0 inode Table 시작위치를 얻는다.

 

첫 번째 Group Descriptor Tableramdisk1블록(4KB = 0x1000) 이후부터 시작하므로 해당 위치로 이동하면

각 그룹의 inode Table을 구하면

(단위 : block)

Group 0 = 0x23

Group 1 = 0x8023

Group 2 = 0x10002

Group 3 = 0x18023

이다.

 

Root가 속한 Group 0inode Table에서 1번째 inode를 찾는다. ( Inode의 크기는 0x100byte, index = 1 )

첫번째 블록 포인터인 0x223000을 찾아서 데이터 영역으로 이동을 한다.

Record len으로 디렉토리 엔트리의 크기를 알아내고, file type으로 디렉토리를 찾고, 이름을 얻는다. 그중 32153”6/82”에 해당하는 6번 디렉토리의 inode를 찾는다.

6번 디렉토리 inode number = 0x6066

속한 Block Group = (0x6066 – 1)/0x2000 = 3

Inode Table Index = (0x6066 – 1)%0x2000 = 101

 

6번 디렉토리가 Block Group 3 inode Table101번째에 있음을 알 수 있다.

 

Block Group 3inode Table에서 101번째 inode로 이동을 한다.

=>0x18029600

Block pointer 0번을 얻고 이동을 한다.

=>0x8458000

6번 디렉토리가 있음을 확인할 수 있다.

 

학번의 끝이 682이므로 0x18029600에서 82번 뒤로 이동을 한다.

=>0x1802e800

Block Pointer 0 = 0x84aa000

Block Pointer 1 = 0x107ba000

Block Pointer 2 = 0x107d2000

 

Indirect Block Pointer 0 = 0x10204000

을 얻을 수 있다.

 

해당 블록의 위치로 이동을 하면 다음의 그림과 같이 데이터를 찾을 수 잇다.

 

 

마지막 indirect block pointer13번째 blockinode를 찾아내고 이동하여 데이터를 찾았다.

728x90
반응형

'공부 > 운영체제&시스템프로그래밍' 카테고리의 다른 글

New Architectural state structure  (0) 2021.06.21
myshell  (0) 2020.07.16
mycp  (0) 2020.07.16
블로그 이미지

아상관없어

,