Chapter#24 FSCK and Journaling
- Crash Consistency Problem
- File System Checker(fsck)
- Journaling
Crash Consistency Problem
Crash Consistency
file system data structure은 파워가 꺼져도 persist해야함
crash-consistency problem 발생 및 해결책
- fsck (file system checker)
- Journaling (wrire-ahead logging)
Crash Consistency Problem
open() > lseek() > write() > close() 작업을 한 경우
기존 file 크기는 1 첫 direct pointer가 4(Da)를 가리킴 나머지 3개는 null |
Data bitmap 갱신 Inode 갱신 새로운 data block 할당(Db) > 두번째 포인터가 가리킴 |
즉, 아래 3개의 갱신이 일어남
1. One each of inode I[v2]
2. Data bitmap B[v2]
3. Data block Db
3개 중 일부만 실행되고 power off되는 경우 : file system은 funny(inconsistent) state로 남게 됨
Crash Scenario (case analysisㅠㅠ)
case 1a: Just data block Db is written to disk
- data는 disk에 저장되나, inode가 없음 > 쓰인적이 없는 경우로 간주됨
- consistency면에서 큰 문제는 아니다
case 1b: Just updated inode I[v2] is written to disk
- inode가 disk address (5,Db)를 가리킴 > Db가 안쓰였기에 엉뚱한(garbage) data를 가리킴
- File-system inconsistency!
case 1c: Just the updated bitmap B[v2] is written to disk
- bitmap이 block 5가 할당되었다고 가리킴 > inode값은 없음
- File-system inconsistency! : block 5는 사용 못하는 공간이 됨
case 2a: Just inode I[v2] and bitmap B[v2] are written to disk
- metadata는 consistent, 하지만 block 5는 garbage data를 가짐
case 2b: Just inode I[v2] and data block Db are written to disk
- Inconsistency between inode and old version bitmap : 해당 block이 free로 간주되어 덮어씌워질 가능성 존재
case 2c: Just bitmap B[v2] and data block Db are written to disk
- Inconsistency between inode and data bitmap : 파일이 어디 있는지 알 수 없음
요약 :
세 작업이 atomically 완벽히 수행되거나 아예 안되어야함
하지만 쉽지는 않다!
File System Checker (fsck)
fsck : Unix tool. inconsistencies 확인 및 repair
- check : super block, free block, inode states, inode links, etc
- file system이 mounte되기 전에 실행 : fsck도는 동안 file-system activity 활동 안함 > 완료되면 consistent해짐
- 모든 문제 해결은 안됨 : ex case 2a : metadata는 consistent한데 block이 garbage data로 차있는 경우
- 즉, metadata가 internally consistent하도록 만들 뿐
Inode state
- each inode is checked for corruption or other problem e.g. type checking(regular file, directory, symbolic link, etc)
- 문제가 있다고 생각되면 fsck가 지움
Free blocks
- scans inodes, indirect blocks, double indirect blocks
- Inconsistency between bitmaps and inodes : inode 정보에 따라 resolve e.g. case 1c, 2b
Directory checks
- fsck는 user file 정보를 이해하지 못함
- 각 directory contents에 대해 additional integrity check수행
ex) . 과 .. 이 first entries인가, directory의 각 inode들이 잘 할당되어있는가 등등
아무튼 엄청 느리다!
Journaling
Journaling (WAL : Write-Ahead Logging)
overwriting 전에 little note 작성("write ahead" part. = log) > crash가 발생 시 log 확인 후 재시도
- crash 이후에 무엇을 바꿔야할지 entire disk scan하지 않고도 알 수 있다.
ext2
ext3
Journal write
TxB : Transaction begin block
- transaction identifier(TID)같은걸 가짐
- 중간의 3개 block은 exact content : physical logging
TxE : Transaction end block
- Marker of end of transaction
- TID를 가짐
Checkpoint
저널 영역에 임시적으로 기록된걸 원래 위치로 copy하는 것 : checkpointing
Scenario
case 1 : Transaction each one at a time
- (TxB, I[v2], B[v2], Db, TxE)를 순서대로 다 쓴다
- 느림
case 2 : Transaction all block writes at once
- (TxB, I[v2], B[v2], Db, TxE)를 동시에 쓴다
- disk도 스케쥴링 따라 작동하므로 TxE가 써졌는데 crash가 일어나 내용물이 안써질수도 있음
=> TxE를 빼고 동시에 쓴 후 확인하고 TxE씀 (Journal Commit)
Revised Operation :
1. Journal write : write TxB, all pending data, metadata updates
2. Journal commit : write TxE
3. Checkpoint : write pending metadata and data updates to final location
Recovery
crash가 transaction이 log에 적히기 전에 발생 : skip
crash가 transaction이 log에 적힌 후 & checkpoint 완료 전에 발생 : recover
- scan log > disk에 commit된 transaction 찾아보기 > transaction 재시행
Making the log finite
log가 가득차면 두가지 문제 발생
- the larger the log, the longer recovery will take
- no further transactions can be committed to disk = making file system useless
해결 : log data structure을 circular하게 이용
- Journal super block를 이용해서 oldest/newest transaction log를 marking
Revised Operation :
1. Journal write : write TxB, all pending data, metadata updates
2. Journal commit : write TxE
3. Checkpoint : write pending metadata and data updates to final location
4. Free : mark transaction free in journal by updating journal superblock
학교 강의를 토대로 개인 공부 목적으로 작성되어 오타가 및 오류가 있을 수 있으며, 문제가 될 시 삭제될 수 있습니다.
'Study > 운영체제' 카테고리의 다른 글
Chapter#25 Log-structured File Systems (4) | 2021.12.12 |
---|---|
Chapter# 23 Fast File System (0) | 2021.12.11 |
Chapter#22 File System Implementation (0) | 2021.12.11 |
Chapter#21 IO : File and Directory (0) | 2021.12.10 |
Chapter#20 Flash-based SSDs (0) | 2021.12.10 |