728x90
https://velog.io/@markyang92/Filesystem
Filesystem 종류, 기타 파일 시스템, 특수 목적 파일 시스템
Filesystem 종류, 기타 파일 시스템, 특수 목적 파일 시스템
velog.io
Linux의 디스크 기반 파일시스템
- ext(ext1)
- Extended File System, 1992년 4월 리눅스 0.96c에 포함되어 발표
- 파일 시스템의 최대 크기는 2GB, 파일 이름의 길이는 255Byte까지 지원
- i-node 수정과 데이터의 수정 시간 지원이 안되고, 파일 시스템이 복잡해지고 파편화되는 문제
- 현재 리눅스에서는 ext 파일 시스템은 사용되지 않음
- ext2
- ext 파일 시스템이 가지고 있는 문제를 해결하고, 1993년 1월 발표
- ext2는 ext3 파일 시스템이 도입되기 전까지, 사실상 리눅스 표준 파일 시스템
- 이론적으로 32TB까지 사용 가능
- ext3
- 2001년 11월 공개
- 저널링(journaling) 기능을 도입 복구 기능 강화
- 블록의 크기에 따라 2~32TB까지 지원
- ext4
- 1EB(TB) 이상의 볼륨과 16TB 이상의 파일을 지원
- ext2, ext3와 호환성 유지
- 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
'리눅스 > 서버운영' 카테고리의 다른 글
xargs 명령어 (입력받아 다음 명령어의 인자로 변환) (0) | 2023.12.01 |
---|---|
[리눅스] 파티션 복사하기 (0) | 2023.11.29 |
[리눅스] 파티션(fsdisk, du, /etc/fstab, parted) (0) | 2023.11.24 |
[리눅스] SSH원격 접속하기 (0) | 2023.11.24 |
[리눅스] 네트워크 IP고정하기 (0) | 2023.11.23 |
댓글