기타/운영체제

Lab3 : [Analyze Ext2 file system internal]

stonesy 2022. 6. 6. 13:33
728x90

목표: 2번 directory의 89파일과 98파일 찾기

1. Root Directory에서 찾을 File이 속한 Directory의 Inode Number를 찾는다.

1단계에서 이루어진 내용 정리: 찾고자하는 파일이 속한 directory의 위치를 알 수 없다. Root directory에서 찾고자 하는 파일이 속한 directory이 Inode number를 찾는다. Inode number를 찾으면 Inode table에서 Inode의 위치를 찾을 수 있다.
Superblock을 분석하여 Inode table의 위치를 찾을 수 있다.(Supberblock은 file system에 대한 Meta-data를 관리한다.)
Inode table에서 Root directory의 Inode number를 통해서 Inode의 위치를 찾을 수 있었고, Inode가 가리키는 block pointer로 이동하여 User data를 읽을 수 있었다. 이 과정을 통해서 2 Directory Inode 1 Block Group Inode Table에서 0번째(index=0)에 위치함을 알 수 있었다.

1. make a ramdisk and insmod it

ls 명령어로 모든 파일이 있는지 확인한 후, sudo su root 권한으로 변경한다. make한 후, ramdisk.ko 파일이 존재하지는지 확인한다.

모듈 적재 후 확인한다.

 

2. mkfs and mount

mnt 디렉토리를 만들고, mnt에 마운트한다.

 

3. make the file hierarchy by running script

./create.sh 스크립트 실행 후 mnt0~9번 디렉터리가 생성된 것을 확인할 수 있다. 각 디렉터리 안에는 파일이 0~99번까지 생성되어 있다. 파일에 한 블록을 추가한다.

 

4. Explore file system layout

파일의 superblock을 분석한 결과는 다음과 같다.

-inode count: 0x8000
-block count: 0x20000
-log block size: 0x2
-blocks per group: 0x8000
-inode per group: 0x2000
-block group number: 0x0

 

Group Descriptor Table영역을 분석한 결과는 다음과 같다.

첫번째 Group Descriptor Table은 램디스크의 1블록 이후부터 시작한다.

-Group 0

             -block bitmap: 0x21블록부터 시작

             -Inode bitmap: 0x22블록부터 시작

             -Inode table: 0x23블록부터 시작

             이때 단위는 블록이다.

-inode가 속한 그룹은 (inode number-1)/inodes per group Block Group이다.

-Ext2에서 Root inode number2이다.

 

예시에서 inodes per group0x2000이므로

-root’s block group: (2-1)/0x2000=0

-root’s index: (2-1)%0x2000=1

-0 Block GroupInode Table1번째(index=1)에 위치한다.

 


※이해가 안된다면 다음의 게시글 참고

https://stonesy927.tistory.com/193

 

[운영체제]File System

4. Interlude: Files and Directories 4-1. File and Directories File 정의: 문자열인데 영속적으로 저장된다. 각각의 파일은 자신의 고유한 구조를 가지고 있다. 하지만 OS입장에서는 이런 format을 신경쓰지 않..

stonesy927.tistory.com

 

위 게시글에서 inode number는 inode table에서 원하는 inode를 찾아가기 위한 index로 사용된다고 하였다. 이 과정을 거쳐 inode를 찾으면, 아래와 같은 과정으로 data를 찾을 수 있다. 

User data를 찾아가기 위한 과정은 다음과 같다.

1. 현재 inode를 찾는다

2. 파일의 현재 offset을 disk size로 나눈다.

3. 몫은 inode를 찾기 위한 pointer로 사용된다.

4. 나머지는 disk block에서의 offset으로 사용된다.


Inode Table 영역을 분석한 결과는 다음과 같다.

-Inode의 크기는 0x100 byte이다.(inode+padding)

-Root가 속한 Block Group0번이고 Index 1이다.

-0 Block GroupInode Table0x100부터가 Root Inode이다.

mode: 0x41ed=drwxr-xr-x

block pointer: 0x223 block

 

Data 영역을 분석한 결과는 다음과 같다.

2Directory

-Inode number: 0x2001

-file type: 0x2=directory

-속한 Block group: (0x2001-1)/2000=1Block Group

-Inode Table Index: (0x6=2001-1)%2000=0

-2DirectoryInode1Block GroupInode Table에서 0번째(index=0)에 위치함을 알 수 있다.

 

2. Directory가 속한 Block GroupInode Table에서 Inode를 찾는다.

Group Descriptor Table영역에서 1번 Block Group의 Inode table의 시작 위치를 알아내었다.

앞서 2번 Directory의 Inode는 1번 Block Group의 Inode Table에서 0번째에 위치함을 알았다. 1번 Block Group의 Inode table의 시작 위치를 알아내야 한다.

Group Descriptor Table영역에서 Group 1 Inode table0x8023부터 시작함으로 알 수 있고, 이때 단위는 블럭(4KB)임을 감안해야 한다.

Block pointer: 0x8223

 

3. 찾은 Directory Entry에서 FileInode Number를 찾는다.

Directory Entry에는 <File name, Inode number>의 쌍을 저장하고 있다. 파일의 inode number를 찾자.

89파일의 Inode number0x205a이고, 98파일의 Inode number0x2063이다.

*89파일
-block group: (0x205a-1)/2000=1
-Index: (0x205a-1)%2000=16*5+10-1=89
-1번째 Block group89번째에 위치한다.
*98파일
-block group: (0x2063-1)/2000=1
-Index: (0x2063-1)%2000=16*6+3-1=98
-1번째 Block group98번째에 위치한다.

 

4. File이 속한 Block GroupInode Table에서 Inode를 찾는다.

2단계에서 Group 1 Inode table 0x8023부터 시작함을 알아내었다. 3단계에서 파일의 Inode number를 알아내었다. Inode table과 Inode number를 통해서 파일의 Inode를 찾을 수 있다.

 

*89파일

학번의 끝이 298이므로 0x8023000에서 Index만큼 뒤로 이동을 한다.

1번째 Block group89번째에 위치한다.

 

89파일의 Inode를 찾았다.

위에서 2/89-1, 2/89-2, 2/89-3, 2/89-4direct pointer, 2/89-13single indirect pointer로 접근할 수 있음을 확인할 수 있다.

2/89-13single indirect pointer로 접근할 수 있으므로, 다음과 같이 2단계를 거쳐서 접근할 수 있다.

*98파일

학번의 끝이 298이므로 0x8023000에서 Index만큼 뒤로 이동을 한다.

1번째 Block group98번째에 위치한다.

98파일의 Inode를 찾았다.

위에서 2/98-1, 2/98-2, 2/98-3, 2/98-4direct pointer, 2/98-13single indirect pointer로 접근할 수 있음을 확인할 수 있다.

2/98-13single indirect pointer로 접근할 수 있으므로, 다음과 같이 2단계를 거쳐서 접근할 수 있다.

728x90

'기타 > 운영체제' 카테고리의 다른 글

[운영체제]Advanced File System  (0) 2022.06.04
[운영체제]Paging  (0) 2022.06.03
[운영체제]Memory Virtualization  (0) 2022.05.23
[운영체제]File System  (0) 2022.05.23
[운영체제]Hard Disk Drives  (0) 2022.05.23