리눅스 파일 시스템의 구조 - ext 계열

이 글은 리눅스에서의 파일 시스템 중 ext 계열에 대해 설명한다.


1. ext2

ext2는 (ext를 개선한) 리눅스의 초기 파일 시스템이다. 개선된 버전인 ext3, ext4도 있으나, 많은 자료에서 ext2를 비중 있게 다루므로 이 글에서도 동일한 형태로 ext2를 위주로 서술한다.


ext disk layout


ext2는 디스크를 부트 섹터와 블록 그룹으로 분할한다. 블록 그룹이란, 일정한 크기의 블록의 집합을 의미한다. (정확히는 마지막 블록은 크기 제한에서 자유롭다.)

  • 파일 저장 시 동일한 블록 그룹 내에 저장하도록 스케줄링한다.

  • 블록 그룹은 아래의 필드를 갖는다. 아래의 필드 중 Super Block, Group Descriptor Table은 하나만 있어도 충분하나 백업 용도로 각 블록 그룹에 사본으로 저장된다(일관성 유지에 대한 내용은 잘 모르겠다.)

    필드명 설명
    Super Block 1KB의 크기의 자료구조로, 블록의 크기, 총 블록의 개수, 블록 그룹의 개수, i-node의 개수, 그룹 내 블록의 개수, 그룹 내 i-node의 개수 등의 정보를 저장한다.
    Group Descriptor Table Group Descriptor의 테이블이다. 각 Descriptor는 Block Bitmap(아래 필드)의 블록 번호, 그룹 내의 빈 블록 개수, 그룹 내의 i-node 개수, 그룹 안의 빈 디렉토리 개수를 저장한다.
    Block Bitmap 각 블록의 할당 여부를 bit(0,1)로 표시한다.
    i-node Bitmap i-node의 할당 여부를 bit로 표시한다.
    i-node Table 아래의 i-node를 테이블 형태로 저장한다.
    (actual) i-nodes (위의 테이블 형태로 저장된 것이다.) 128Byte의 크기를 가지며, 실제 파일/디렉토리의 위치를 저장한다. 파일의 메타 데이터를 보관한다. 각 파일/디렉토리는 i-node와 1:1로 대응되며 i-node를 알고 있다면 i-node에 저장된 블록 그룹을 확인할 수 있다. (자세한 필드는 아래 표에서 확인바란다.)
    (actual) blocks 실제로 데이터가 저장되는 블록이다.
  • i-node를 구성하는 필드는 아래와 같다.

    필드명
    Inode Number
    파일 모드
    하드 링크 개수
    소유자 정보
    파일 크기
    마지막 접근/수정 시각
    데이터 블록의 개수
    직접 블록 (대부분의 작은 파일은 직접 블록으로도 커버가 충분히 된다.)
    간접 블록 / 이중 간접 블록 / 삼중 간접 블록 (linked list 개념)

2. ext 2 vs 3,4

구조적으로 큰 차이보단 성능 개선 등에 초점이 맞춰져 있다.

features ext2 ext3 ext4
전원 문제 시 데이터 저장 손실 (저널링 파일 시스템 지원 여부) 문제 발생 저널링 지원됨 저널링 지원됨
파일 최대 크기 2TiB 2TiB 16TiB

리눅스 파일 시스템의 구조 - ext 계열

https://jsqna.com/linux-filesystem-ext/

Author

Seongbin Kim

Posted on

21-05-30

Updated on

21-05-30

Licensed under

댓글