컴퓨터를 사용하다보면 시스템이 출돌하거나 전원이 차단될수도 있다.
디 때 다시 정상적으로 유지하기 위해서 어떻게 할지에 대한 내용이다.
파일을 작성할 때에는 3가지에 정보가 업데이트된다.
1. Data bitmap
2. inode
3. data block
이 정보를 업데이트하다가 오류가 났고 세개 중 하나만 업데이트 되었을 때 무슨일이 일어나는지 봐보자.
1) 데이터 블록에만 적혔을 때
이 때는 파일은 존재하지만 그 파일에 대한 정보는 존재하지 않는다.
inode와 data bitmap의 정보 불일치는 일어나지 않아 그나마 괜찮다.
2) inode 만 업데이트 됐을 때
데이터가 유효하다고 적혀있는데 입력이 되어있지 않아 디스크에서 쓰레기 값을 읽게 된다.
inode와 data bitmap의 정보 불일치가 일어난다
3) data bitmap만 업데이트 됐을때
데이터가 없는데 사용되고 있다고 되어있어서 낭비된다.
inode와 data bitmap의 정보 불일치가 일어난다
이번에는 세개 중 두개만 업데이트 되었을 때 무슨일이 일어나는지 봐보자.
1) 데이터 블록,data bitmap에만 적혔을 때
inode와 data bitmap의 정보 불일치는 일어나지 않아 그나마 괜찮다.
2)데이터 블록, inode 만 업데이트 됐을 때
inode와 data bitmap의 정보 불일치가 일어난다
3) inode,data bitmap만 업데이트 됐을때
정보 불일치는 일어나지 않지만 쓰레기 값이 들어있다.
1. File System Checker
불일치 발생을 허용한 후 재부팅 시 나중에 수정한다.
• 목표는 파일 시스템 메타데이터가 일치하는지 확인하는 것
1.1 fsck 동작 방식
먼저 fsck 는 슈퍼블록이 합리적인지 확인한다.
그러고 inode과 indirext 블록을 확인하여 파일 시스템 내에 현재 할당되어있는 블록을 판단한다.
비트맵과 inode 사이에 불일치가 있는 경우 inode의 정보를 중심적으로 해결한다.
inode에 정상적인 데이터가 있는지 확인한다 (ex. 일반파일, 디렉터리 등)
inode에 문제가 있는경우 해결하지 힘들기때문에 그냥 삭제한다.
또, inode에 참조 수를 확인해야한다.
서로 다른 두 inode가 동일한 블록을 참조하는경우 inode를 지우거나 블록을 복사한다.
블록 포인터가 유효한 범위를 벗어났을 때는 불량으로 간주하여 지운다.
디렉토리를 검사할 때는 . 및 .. 이 첫 항목인지 inode가 잘 할당 되어있는지 확인한다.
fsck 은 두가지 문제점을 갖고있다.
첫번 째는 디스크가 굉장히 큰 경우 전체 디스크를 검색하는데 몇 분 또는 몇 시간이 걸릴 수 있다.
두번 째는 비용이 많이 든다는 것이다. 몇개의 블록을 위해 전체 디스크를 검색하는것은 비용 낭비라고 할 수 있다.
2. Journaling
Journaling은 디스크를 업데이트할 때 덮어 쓰기 전에 먼저 수행할 작업의 설명을 기록한다.
Checkpointing는 보류 중인 데이터들을 업데이트하는것을 의미한다.
디스크는 block group으로 이루어져 있다.
한 그룹에는 inode bitmap, data bitmap, inodes, and data blocks들이 들어있다.
지금까지 우리는 block group이 하나인 경우만 봤다.
3. Ordered journaling (= Metadata journaling)
journal 블록에 데이터가 어떻게 들어가는지르 보겠다.
업데이트 될 데이터는 TxB와 TxE 사이에 들어가게된다.
이들을 순서대로 넣기에는 disk가 너무 느리고 동시에 넣기에는 중간에 꺼졌을 때 순서 가 꼬일 수 있어
step1과 step2로 나눠서 작성한다.
step1이 모두 작성되면 step2가 작성된다.
TxE가 잘 쓰여졌는지 확실하게 하기 위해서는 512바이트 sector을 사용해야한다.
디스크는 512 바이트를 쓴다 혹은 안쓴다만 될 수 있게 보장해준다.
'학부 내용 정리 > [ 2-1 ] 운영체제' 카테고리의 다른 글
[ OS ] File System Implementation (0) | 2022.06.14 |
---|---|
[ OS ] Files and Directories (0) | 2022.06.14 |
[ OS ] I/O Devices and HDD (0) | 2022.06.13 |
[ OS ] Common Concurrency Problems (0) | 2022.06.13 |
[ OS ] Semaphores (0) | 2022.06.13 |