본문 바로가기
리눅스/서버운영

[리눅스] 파일시스템의 종류

by 상달군 2023. 11. 24.
728x90

https://velog.io/@markyang92/Filesystem

 

Filesystem 종류, 기타 파일 시스템, 특수 목적 파일 시스템

Filesystem 종류, 기타 파일 시스템, 특수 목적 파일 시스템

velog.io

 

Linux의 디스크 기반 파일시스템

  1. ext(ext1)
    • Extended File System, 1992년 4월 리눅스 0.96c에 포함되어 발표
    • 파일 시스템의 최대 크기는 2GB, 파일 이름의 길이는 255Byte까지 지원
    • i-node 수정데이터의 수정 시간 지원이 안되고, 파일 시스템이 복잡해지고 파편화되는 문제
    • 현재 리눅스에서는 ext 파일 시스템은 사용되지 않음
  2. ext2
    • ext 파일 시스템이 가지고 있는 문제를 해결하고, 1993년 1월 발표
    • ext2는 ext3 파일 시스템이 도입되기 전까지, 사실상 리눅스 표준 파일 시스템
    • 이론적으로 32TB까지 사용 가능
  3. ext3
    • 2001년 11월 공개
    • 저널링(journaling) 기능을 도입 복구 기능 강화
    • 블록의 크기에 따라 2~32TB까지 지원
  4. ext4
    • 1EB(TB) 이상의 볼륨과 16TB 이상의 파일을 지원
    • ext2, ext3 호환성 유지
  5. XFS
    • eXtended File System의 약자
    • 1993년 실리콘 그래픽스가 가밸한 고성능 저널링 파일 시스템
    • 2000년 5월 GNU GPL로 공개
    • 2001년 리눅스에 이식되었고 현재 대부분의 리눅스 배포판에서 지원
    • 64bit 파일 시스템으로 최대 16EB까지 지원

ext4 Journaling

  • 파일시스템이 정상적으로 종료(unmount) 되지 않았다면, 저장장치 내에 있는 모든 i-node와 bitmap 등의 metadata를 검사하여 일관성 문제를 해결한다.
    • 하지만 시간이 너무 많이든다!!
  • 이를 해결하기위해 ext3부터 journaling 방식을 사용한다.
  • File에 Write 하는 작업을 할 때, 파일시스템의 '특정 영역 저널'이라 불리는 로그를 기록한 뒤 -> 작업이 정상적으로 완료되면 Commit 후, 실제 사용되는 영역에 기록한다.
  • 이 방법을 사용하면 시스템이 중간에 종료되어도, 종료된 위치를 보고 바로 알 수 있기 때문에 파일 시스템 전체를 검사할 필요가 없다
  • 저널링 방식에는 로그를 기록하는 옵션에 따라 크게 3가지로 분류된다.

Journaling 방식특징

Journal 모드 모든 파일 시스템 데이터 및 메타데이터 변경사항을 기록한다.
파일시스템에서 변경된 내용의 손실 가능성을 최소화한다.
데이터가 1)저널에 한번 2)파일 시스템에 한번 두 번 써지기 때문에 가장 느리다
Ordered 모드 파일 시스템의 메타데이터(i-node)에 대한 변경 사항만 기록하되,
관련 파일 시스템이 메타 데이터를 변경하기 전에 업데이트를 디스크에 flush 하여
저널이 데이터 write와 동기화 되도록한다. (default)
Write-back 파일시스템의 메타데이터에 대한 변경사항만 기록하되,
표준 파일 시스템 write process를 사용하여 파일 데이터 변경사항을 디스크에 write한다.
제일 빠르지만, 파일 손실 가능성이 제일 크다.

journal 기능

  • 저널 로그를 기록하는 영역은 저널링을 위한 영역에 따로 저장된다.
  • Superblock의 journal inode number가 저널링을 위한, 아이노드 번호를 나타내며 일반적으로 8번이다. 저널링을 사용하지 않는 경우 Padding 되어 있다.
  • 파일시스템 저널링은 디스크에 데이터를 Write 하기 전에 모든 파일시스템 변화의 로그를 보관할 수 있도록 하는 파일시스템 타입이다.
  • 이 로그를 저널이라고 하며 보통 파일시스템의 할당된 공간에 있는 순환로그이다.

  • 저널의 첫번째 구조를 Journal Superblock이라고 하며, 저널의 블록 크기, 저널이 스토리지에 사용 가능한 총 블록 수, 저널의 시작위치, 첫 번째 트랜잭션의 시퀀스 번호, 첫번째 저널에 대한 정보를 가지고 있다.
  • 그 다음 트랜잭션이 있고 저널에대한 일반 구조정보가 있다.
  • 저널의 매커니즘은 트랜잭션의 순서를 사용하여 파일시스템의 변경 사항을 추적한다.
  • 트랜잭션 순서는 다음과 같이 구성된다.
  • Descriptor block: 모든 트랜잭션의 시작 부분에 있는 블록
  • Metadata block: 각 트랜잭션마다 하나 이상의 메타데이터 블록이 있으며, 변경 사항이 메타데이터 블록에 기록된다.
  • commit block: 저널 모드에 따라 성공적인 트랜잭션의 끝을 나타낸다.
  • revoke block: 작업 중 비정상적인 오류가 발생하면 revoke block이 생성되고 일관성 검사 중에 복원해야 하는 파일 시스템 목록이 유지된다.
    저널링 메커니즘은 블록 level에서 작동하며 파일시스템의 메타데이터(inode)가 약간이라도 수정되면 그 inode가 있는 전체 블록이 저널에 복사된다.
  • 저널은 파일 시스템이 해제되고 다시 마운트 될 때마다 다시 시작되거나 저널이 가득 찰 때마다 순환 list처럼 첫 번째 블록을 재사용하여 다시 시작한다.
  • 파일 시스템이 마운트될 때, 저널 블록 1에서 시퀀스 번호가 증가하였고 일련의 파일이 파일 시스템에 복사되었다.
  • 파일을 복사 한 후, 시퀀스 번호가 순차적으로 증가한다.
  • 마운트가 해지되면 다시 저널 블록 1부터 트랜잭션이 쌓아진다. 저널을 덮어 쓰면, 이전 마운트에 사용된 이전 마운트의 나머지 트랜잭션이 사라지므로 주의한다. 이미지를 마운트 할 때는 읽기전용 옵션을 사용해야 해시값이 변하지 않는다.
  • ext4 파일 시스템은 부트섹터와 블록 그룹으로 이루어져 있다.
  • 블록: ext4 파일 시스템에서 기본적으로 데이터를 저장하는 단위 + 저장장치에서 한 번의 I/O과정에서 읽어들이는 단위
  • 부트 섹터를 제외하면 모두 블록 그룹들의 나열로 되어 있다.
  • 마지막 블록그룹을 제외한 모든 블록 그룹들은 같은 블록 개수를 가진다.
728x90

댓글