본문 바로가기

Ext 파일시스템

File System - Ext (13) 계속해서 Ext 파일시스템의 데이터 구조체들을 알아보자. [해시 트리] Ext 파일시스템에서 디렉토리의 엔트리들을 정렬하기 위해 사용하는 알고리즘으로, 각 노드는 디렉토리의 각 블록이다. 노드에는 노드 기술자라는 데이터 구조체가 있는데 노드 기술자는 다음 계층의 블록을 알려주는 역할을 한다. 노드 기술자는 헤더와 엔트리로 나누어 지는데 헤더는 디렉토리 엔트리 다음에 위치한다. [그림 1 - 노드 기술자 헤더 오프셋] 노드 기술자 엔트리는 노드의 최소 해시 값과 노드의 디렉토리 블록을 저장하고 있다. [그림 2 - 노드 기술자 엔트리 오프셋] 첫 번째 노드 기술자 엔트리의 경우 최소 해시 값이 0이어야만 해서 해시 값이 설정되지 않는다. 이러한 이유로 첫 번째 노드 기술자 엔트리의 구조는 [그림 2]와 조.. 더보기
File System - Ext (12) 이번에는 디렉토리 엔트리에 대해서 알아 볼 것이다. [디렉토리 엔트리] 디렉토리 엔트리는 파일이나 디렉토리의 이름을 저장하고, 파일이나 디렉토리에 할당 된 inode의 주소를 저장한다. 또 디렉토리 엔트리는 자신과 맵핑 관계인 디렉토리에 할당 된 블록에 위치한다. 디렉토리 엔트리 데이터 구조에는 두 가지 유형이 존재한다. 하지만 이 두 유형의 크기는 같다. 다른 점이라면, 파일 타입이 있고 없고 이다. 디렉토리 엔트리에 어떤 유형이 사용되는지는 슈퍼블록에서 정의된다. 현재로서는 파일 타입 필드가 포함된 디렉토리 엔트리 유형을 사용하고 있다. 일단 파일 타입이 없는 데이터 구조를 확인하여 보자. [그림 1 - 예전에 사용되었던 디렉토리 엔트리 구조] - inode 값 : inode 번호이다. 따로 모두 설.. 더보기
File System - Ext (11) 이번 글에서는 Ext 파일시스템의 파일이나 디렉토리의 확장 속성 데이터 구조체에 대해서 알아 볼 것이다. 확장 속성에는 3가지 구역이 존재한다. - 헤더 영역 - 이름 엔트리 영역 - 값 영역 헤더 영역 다음에 이름 엔트리 영역이 오는데 일반적으로 영역들은 붙어 있기 마련이지만, 값 영역은 나머지 두 영역과 다르게 블록 마지막에 존재 해 두 영역과 붙어 있지 않다. 더군다나 값 영역은 블록 마지막에서 블록 처음을 향하여 값이 점차 쌓인다. 값 영역에 있는 값들은 속성에 이름 엔트리와 대응되는 값들이지만, 이름 엔트리 순서와 값 순서에 따라 대응되는 것은 아니다. 일단 헤더 영역부터 알아보자. * 참고 : 현재 필자가 가지고 있는 샘플 이미지에는 확장 속성을 가진 디렉토리나 파일이 존재 하지 않아 오프셋 .. 더보기
File System - Ext (10) 계속해서 Ext 파일시스템의 데이터 구조체를 알아보자. [그룹 기술자 테이블] 그룹 기술자 테이블은 파일시스템 블록에 위치하는 그룹 기술자 그룹의 목록을 뜻하며, 슈퍼 블록 다음 블록에 위치 한다. 그룹 기술자 테이블의 엔트리는 각 블록 그룹의 정보를 가지고 있으며, 테이블의 크기는 32byte이다. [그림 1 - 그룹 기술자 테이블 오프셋] * 참고 : 파일시스템 블록의 크기가 4096byte 일때는 슈퍼 블록이 0에 위치하고, 그룹 기술자 테이블은 블록 1에 위치한다. 또 파일시스템 블록의 크기가 1024byte 일때는 슈퍼 블록이 1에 위치하고, 그룹 기술자 테이블은 블록 2에 위치한다. - 블록 비트맵의 시작 블록 주소 : 해당 오프셋의 값은 오프셋이 아니라 단순히 블록 번호에 불과하다. 위 이미.. 더보기
File System - Ext (9) 이번 글부터는 Ext 파일시스템의 데이터 구조체들을 알아 볼 것이다. [슈퍼 블록] 슈퍼 블록의 파일시스템에서 1024byte offset에 위치하고, 그 크기 또한 1024byte 이다. * 참고 : 크기가 너무 커 오프셋 별로 분석을 하지 않고 표로 대체 하였다. 아래는 슈퍼 블록의 오프셋 부분이다. [그림 1 - 슈퍼 블록 위치] 이제 슈퍼 블록의 오프셋 별 의미를 알아보자. [그림 2 - 슈퍼 블록 오프셋] - 블록 크기 : 이 값은 직접적인 값이 아닌 간접적인 값으로, 1024를 해당 오프셋의 값만 큼 왼쪽으로 쉬프트 연산하여 블록 크기를 구해야 한다. - 단편 크기 : 이 값 또한 블록 크기와 동일한 방법으로 구한다. - 시그니처 : 슈퍼 블록은 "0xEF53" 시그니처를 가지며, 슈퍼 블록의.. 더보기