리눅스 파일 시스템
- 기본적으로 유닉스 운영체제에서 온 공통된 개념으로 구현
- 파일은 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 드라이브로 파티션을 나누는 것과 유사 |