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

markyang92·2021년 9월 15일
0
post-thumbnail

파일 시스템

  • 계층 구조도
  • VFS 레이어: Linux에서는 갖가지 파일 시스템을 전체적으로 이용하기 위한 Virtual Filesystem Layer
    • ext3/4 등도 VFS의 일부이다.
  • 블록 레이어: 디바이스 드라이버를 사용해 물리 디스크에 데이터의 R/W를 담당
    • 파일 시스템의 블록 사이즈: 블록 레이어에 따른 디바이스 드라이버가 물리 디스크에 데이터를 R/W 하는 최소 단위
      • 물리디스크 설계상 512Byte의 섹터 단위로 하는 것이 많음(블록 사이즈)

블록 사이즈

  • Linux에서는 파일 시스템의 블록 사이즈로 1024Byte, 2048Byte, 4096Byte를 선택할 수 있다.
  • 디폴트 블록 사이즈: /etc/mke2fs.conf
    • 이는 mke2fs -b 옵션으로 바꿀 수 있다.
  • 이미 생성된 파일 시스템에 설정되어 있는 블록사이즈 확인
    • tune2fs
  • 링크(https://velog.io/@markyang92/disk#-fdisk--lu-devfile) 처럼 확인해, 블록 사이즈와 섹터사이즈를 맞추는 것이(혹은 정수배) 좋다.
    • 참고로 정수배가 맞지 않아, 마지막 블록이 파티션에서 삐져나오는 경우가 발생한다. 이럴 때 마지막 블록은 파일시스템에서 사용하지 않는다.

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

  1. ext(ext1)

    • Extended File System, 1992년 4월 리눅스 0.96c에 포함되어 발표
    • 파일 시스템의 최대 크기는 2GB, 파일 이름의 길이는 255Byte까지 지원
    • inode 수정과 데이터의 수정 시간 지원이 안되고, 파일 시스템이 복잡해지고 파편화되는 문제
    • 현재 리눅스에서는 ext 파일 시스템은 사용되지 않음
  2. ext2

    • ext 파일 시스템이 가지고 있는 문제를 해결하고, 1993년 1월 발표
    • ext2는 ext3 파일 시스템이 도입되기 전까지, 사실상 리눅스 표준 파일 시스템
    • 이론적으로 32TB까지 사용 가능
  3. ext3

    • 2001년 11월 공개
    • 저널링(journaling) 기능을 도입 복구 기능 강화
    • 블록의 크기에 따라 2~32TB까지 지원
  4. ext4

    • 1EB(=10241024=1024*1024TB) 이상의 볼륨과 16TB 이상의 파일을 지원
    • ext2, ext3호환성 유지
  5. XFS

    • eXtended File System의 약자
    • 1993년 실리콘 그래픽스가 가밸한 고성능 저널링 파일 시스템
    • 2000년 5월 GNU GPL로 공개
    • 2001년 리눅스에 이식되었고 현재 대부분의 리눅스 배포판에서 지원
    • 64bit 파일 시스템으로 최대 16EB까지 지원

기타 파일 시스템

  • $ blkid -o list
파일 시스템   기능
msdosMS-DOS 파티션을 사용하기 위한 파일 시스템
iso9660CD-ROM, DVD의 표준 파일 시스템으로 읽기 전용으로 사용
nfsnetwork filesystem으로 원격 서버의 디스크를 연결할 때 사용한다.
ufsUnix File System으로 유닉스의 표준 파일 시스템이다.
vfatWindows 95, 98, NT를 지원하기 위한 파일 시스템, 리눅스에서 windows 파일 시스템인 FAT에 대해 전체 접근권한을 가지려면 vfat을 사용해야한다.
hpfsHPFS를 지원하기 위한 파일 시스템
ntfsWindows NTFS를 지원하기 위한 파일 시스템
sysv유닉스 시스템V를 지원하기 위한 파일 시스템
hfs맥 컴퓨터의 hfs 파일 시스템을 지원하기 위한 파일 시스템

특수 용도 가상 파일 시스템


파일 시스템   기능
swap- 스왑 영역을 관리하기 위한 스왑 파일 시스템
- Ubuntu 17.04 이후는 스왑 파일 시스템 대신, 스왑 파일을 사용한다.
tmpfs- temporary file system으로 메모리에 임시 파일을 저장하기 위한 파일 시스템, 시스템이 재시작할 때마다 기존 내용 사라진다.
- /run 디렉토리를 예로 들 수 있다.
proc- proc 파일 시스템으로 /proc 디렉토리
- 커널의 현재 상태를 나타내는 파일을 가지고 있다.
- /proc/번호 디렉토리는 실제 PID이다.
- /proc/self는 현재 프로세스를 나타낸다.
ramfs- 램디스크를 지원하는 파일 시스템
rootfs- rootfs/ 디렉토리
- 시스템 초기화 및 관리에 필요한 내용 관리

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과정에서 읽어들이는 단위

  • 부트 섹터를 제외하면 모두 블록 그룹들의 나열로 되어 있다.

  • 마지막 블록그룹을 제외한 모든 블록 그룹들은 같은 블록 개수를 가진다.

  1. block group
    블록 그룹은 블록들의 모임. 블록들을 여러 그룹으로 나누어서 파일시스템의 정보 및 데이터를 저장한다. OS 커널에서 같은 파일에 속하는 데이터 블록은 같은 블록에 저장하려 하므로 블록 그룹은 파일의 단편화를 줄인다.
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글