OS/Linux - Ubuntu

[Linux - 리눅스 / Ubuntu - 우분투] 리눅스 파일 시스템 구조 - ext4, inode, 블록 그룹, 그룹 0 패딩, 슈퍼 블록, 그룹 디스크립터, GDT 예약 블록, 데이터 블록

주누다 2015. 3. 31. 23:50
반응형

리눅스 파일 시스템

- 기본적으로 유닉스 운영체제에서 온 공통된 개념으로 구현

- 파일은 inode로 관리

- '디렉터리'는 단순히 파일의 목록을 가지고 있는 파일일 뿐

- 특수 파일을 통해 장치에 접근



ex4 파일 시스템의 구조

- 효율적으로 디스크를 사용하기 위해 저장 장치를 논리적인 블록의 집한(블록 그룹)으로 구분

- 일반적으로 블록은 4KB, 실제 크기는 설정에 따라 달라질 수 있음

- 블록 그룹의 개수는 장치의 크기를 블록 그룹의 크기로 나눈 값

* 블록 그룹 0

 => 파일 시스템의 첫 번째 블록 그룹

 => 그룹 0 패딩과 슈퍼 블록, 그룹 디스크립터를 가지고 있음.

* 블록 그룹 a

 => 파일 시스템에서 첫 번째 블록 그룹이 아닌 블록 그룹

 => 그룹 0 패딩디 없지만, 슈퍼 블록과 그룹 디스크립터에 대한 복사본을 가지고 있음.

* 블록 그룹 b

 => 파일 시스템에서 첫 번째 블록 그룹이 아닌 블록 그룹

 => 그룹 0 패딩, 슈퍼 블록, 그룹 디스크립터가 없고, 바로 데이터 블록 비트맵으로 시작

ext4 파일 시스템 구조

 블록 그룹 0

그룹 0

패딩

ext4

슈퍼 블록

그룹

디스크립터

GDT

예약 블록

 데이터 블록

비트맵

inode

비트맵

inode

테이블

데이터

블록

1,024 byte

1 블록

n 블록

n 블록

1 블록

1 블록

n 블록

n 블록

 블록 그룹 a

ext4

슈퍼 블록

그룹

디스크립터

GDT

예약 블록

데이터 블록

비트맵

inode

비트맵

inode
테이블

데이터

블록

 

1 블록

n 블록

n 블록

1 블록

1블록

n 블록

n 블록

 

 블록 그룹 b

데이터 블록

비트맵

inode

비트맵

inode

테이블

데이터

블록

 

 

 

 

1블록

1블록

n 블록

n 블록

 

 

 

 


그룹 0 패딩

- 블록 그룹 0 의 첫 1,024byte 는 특별한 용도로 사용(x86 부트 섹터와 부가 정보 저장)

 슈퍼 블록

- 파일 시스템과 관련된 다양한 정보 저장

 * 전체 inode의 개수

 * 전체 블록 개수

 * 할당되지 않은 블록(free block)의 개수

 * 할당되지 않은 inode(free inode)의 개수

 * 첫 번째 데이터 블록의 주소

 * 블록의 크기

 * 그룹당 블록의 개수

 * 마운트 시간

 * 파일 시스템의 생태

 * 그룹 디스크립터의 크기

- 슈퍼 블록에 문제가 생길 경우 전체 파일 시스템을 사용할 수 없게 됨.

- 슈퍼 블록을 다른 블록 그룹에 복사하고, 블록 그룹 0의 슈퍼 블록을 읽을 수 없을 경우

 복사본을 사용하여 복구

 그룹 디스크립터와 GDT 예약 블록

- 그룹 디스크립터도 블록 그룹0 에 위치하는 것으로 슈퍼 블록 다음에 위치

- 그룹 디스크립터에 밑에 있는 정보가 저장됨

 * 블록 비트맵의 주소

 * inode 비트맵의 주소

 * inode 테이블의 주소

 * 할당되지 않은 블록의 개수

 * 할당되지 않은 inode의 개수

 * 디렉터리의 개수

 * 블록 비트맵, inode 비트맵 체크섬

- 그룹 디스크립터도 슈퍼블록과 함께 다른 블록 그룹에 복사되어,

 블록 그룹 0에 문제가 생길 경우 이를 복구하는데 사용

- GDT 예약 블록은 그룹 디스크립터의 확장을 위한 예비 공간

 데이터 블록 비트맵과 inode 비트맵

- 데이터 블록 비트맵은 블록 그룹에 포함된 데이터 블록의 사용 여부를 확인하는데 사용

- inode 비트맵은 inode 테이블의 항목(inode)이 사용 중인지 표시

- 비트맵에서 데이터 블록과 inode 테이블 항목은 1비트로 표현

 inode 테이블과 데이터 블록

- inode에 파일 정보를 저장(일반적인 유닉스와 비슷)

- 데이터 블록에는 실제 데이터가 저장

- 일반 파일은 데이터 블록에 실제 파일 내용을 저장

- 디렉터리는 해당 디렉터리에 있는 파일이나 서브 디렉터리의 이름과 inode를 저장



 inode의 구조 

- '파일 정보를 저장하는 부분'과 '파일 내용이 실제로 저장되어 있는 데이터 블록의 주소를 저장하는 부분'으로 나누어짐

- inode가 저장하는 파일정보

 * 파일종류

 * 파일 접근 권한

 * 파일 크기

 * 소유자

 * 접근 및 수정 시간 등

 * 'ls -l' 명령으로 확인하는 정보

- 'ls -l' 명령은 inode에 저장되어 있는 파일 정보를 읽어서 출력

- inode가 데이터 블록의 주소를 저장하는 부분으로

 '직접 블록(Direct Block)'과 '간접 블록(InDirect Block)', '이중 간접 블록(Double InDirect Block'으로 구분

 * 직접 블록 : 데이터 블록에 대한 주소를 직접 가지고 있음

 * 간접 블록, 이중 간접 블록 : 데이터 블록에 대한 주소를 가지고 있는 블록에 대한 주소를 저장

- 데이터 블록의 크기는 시스템 설정에 따라 '1~8Kb' 까지 정의 가능



파일 시스템과 디렉터리 계층 구조

- 실제 파일이 저장되어 있는 파일 시스템은 디렉터리 계층 구조에 연결되어야 사용자가 접근하고 사용할 수 있음

 

한 파일 시스템으로 구성

- 하나의 파일 시스템으로 구성할 경우 '/' 디렉터리에 해당 파일 시스템을 연결



여러 파일 시스템으로 구성

- 예를 들어 파일 시스템1은 '/' 디렉터리에 파일 시스템2는 '/usr' 디렉터리, 파일 시스템3은 '/home' 디렉터리에 구성

- '/' 디렉터리에 연결된 파일 시스템을 대개 루트 파일 시스템이라고 함

- 여러 파일 시스템으로 나누어 디렉터리 계층 구조를 구성시

 일부 파일 시스템에 문제가 생기더라도 다른 파일 시스템의 파일은 안전

- 윈도우에서 디스크를 C, D 드라이브로 파티션을 나누는 것과 유사




반응형