본문 바로가기

Ext 파일시스템

File System - Ext (7) 이전 글까지 해서 Ext의 참조 모델 별로 어떤 데이터가 있는지 알아 보았다. 이번 글에서는 이러한 참조 모델 데이터들이 어떻게 혼합되어 파일이 생성되고 삭제 되는지 알아 볼 것이다. [파일 생성] 이 과정에서는 dir 이라는 디렉토리가 있다고 가정하며, File.txt 파일을 생성한다는 가정 상황을 시나리오로 할 것이다. 1. 일단 파일시스템 1024byte 오프셋에 위치 하는 슈퍼 블록의 참조하여 블록의 크기와 블록 그룹의 블록 개수, 블록 그룹 내의 inode 개수를 파악한다. * 참고 : 해당 시나리오에서 블록의 크기는 1024byte, 블록 그룹의 블록 개수는 8192개, 블록 그룹 별 inode의 개수는 2016개라고 하겠다. 2. 슈퍼 블록의 분석이 끝나면 그룹 기술자 테이블을 참조한다. 이.. 더보기
File System - Ext (6) 이번 글에서는 파일시스템 마지막 참조 모델인 응용 프로그램 참조 모델에 대해서 알아 보도록 하겠다. Ext 파일시스템에서는 응용 프로그램 참조 모델에 속하는 기능이 저널링 기능 밖에는 없다. [저널링] 저널링 기능은 파일시스템의 손상을 대비하여 복구를 위해 파일시스템의 변경사항을 기록 해두는 기능으로 설명을 할 수 있다. Ext에서 저널은 슈퍼블록에서 그 위치를 지정하여 주기 때문에 파일시스템 어느 곳이든 위치 할 수 있지만 보통 inode 8을 사용한다. 슈퍼 블록에는 저널을 위한 호환 설정 필드가 있는데 이 값을 어떻게 설정 하는가에 따라 로컬 저널 기능의 활성 여부를 결정 할 수 있다. 만약 로컬 저널 기능을 비 활성화로 설정하면 외부 저널을 사용 할 수 있다. 하지만, 이 저널의 데이터는 로컬에 .. 더보기
File System - Ext (5) 이번 글에서는 파일 이름 참조 모델에 해당하는 데이터에 대해서 알아 보도록 하겠다. [디렉토리 엔트리] Ext 파일시스템에서는 파일과 디렉토리의 구분을 Inode에 있는 특별한 타입 값으로 구분 짓는다. 디렉토리들은 디렉토리 엔트리 데이터 구조체의 목록을 포함하는 블록들을 할당 받게 되는데, 디렉토리 엔트리는 파일 이름과 메타데이터가 어디 있는지 설명하는 데이터 구조체이다. * 참고 : 디렉토리 크기는 디렉토리 엔트리 구조체 목록을 포함하는 블록의 크기와 관련이 있다. 모든 디렉토리는 자신과 부모를 나타내는 ".', ".." 디렉토리 엔트리를 포함하고 또 이 두개를 엔트리 시작으로 삼는다. ".", ".." 다음으로는 디렉토리 내의 파일과 하위 디렉토리의 엔트리들이다. * 참고 : 루트 디렉토리는 항상 .. 더보기
File System - Ext (4) 이번 글에서는 메타데이터 참조 모델에 해당하는 것을 알아 볼 것이다. [Inode] Ext 파일시스템의 메타데이터들은 모두 Inode에 저장이 된다. Ext 파일시스템에서 Inode는 모두 동일한 크기를 가지며, 슈퍼 블록에 정의되어 있다. Inode는 Inode Table이라는 집합체에 저장되어 있으며 이 테이블은 각 블록 그룹에 존재하며 크기는 슈퍼블록에 정의되어 있다. Inode 테이블의 위치는 그룹 기술자 테이블에서 정해준다. 보통 Inode의 1~10번은 예약되어 있고, 할당 된 상태이다. 슈퍼 블록은 이런 예약 Inode들을 제외한 첫 번째 Inode를 값으로 가지고 있다. 각 Inode 필드 중에는 고정된 번호를 가지는 필드가 있고 추가 정보로는 확장 속성과 간접 블록 포인터가 있다. 또 I.. 더보기
File System - Ext (3) 이번 글에서는 파일시스템 참조 모델 중 내용 참조 모델에 해당 하는 것들에 대해서 알아 보도록 하겠다. [블록] Ext 파일시스템의 블록은 NTFS와 FAT 파일시스템의 클러스터와 아주 유사한 개념으로, 보통 1024, 2048, 4096 byte의 크기를 가진다. 모든 블록에는 주소가 주어지며, 모든 블록들은 블록 그룹에 속해야만 한다. * 참고 : 예약 영역(부트 섹터와 부트코드가 있는 영역)의 블록들 블록 그룹에 속하지 않는다. 어떤 그룹에 속한 블록인지를 결정 하기 위해서는 아래와 같은 계산을 수행해야 한다. - 그룹 = (해당 블록 - 첫번째 데이터 블록) / 그룹 별 블록 수 * 참고 : 그룹 별 블록 수는 슈퍼블록에 정의되어 있다. [할당 상태] 블록의 할당 상태는 각 블록 그룹에 존재하는 .. 더보기