오늘 나는 명령을 사용하여 ext3 파일 시스템에 저장된 50GB 파일을 삭제했습니다 rm
. rm
모든 블록을 해제하는 데 집중적인 I/O 작업이 거의 40분 정도 걸렸습니다 . 다른 소스에서 본 바에 따르면 파일에 사용된 모든 블록을 해제하는 데 걸리는 시간입니다. 누군가가 중간에 프로세스를 종료하면 rm
어떻게 될까요 ? 이로 인해 일부 블록을 더 이상 여유 공간으로 회수할 수 없는 파일 시스템 손상이 발생할 수 있습니까?
답변1
(즉, 요구 사항 fsck
). 파일 시스템 불일치는 불필요합니다.
예, 연결 해제 후 블록 해제가 발생합니다. 그러나 프로세스는 중단되지 않습니다.
__ext2_truncate_blocks ->
ext2_free_branches -> (for loop)
sb_bread ->
wait_on_buffer ->
wait_on_bit_io(&bh->b_state, BH_Lock, TASK_UNINTERRUPTIBLE);
위의 예는 에 대한 것입니다 ext2
. 이렇게 하면 더 간단해 보일 것 같습니다. ext3
별 다를게 없을텐데...
ext4
하지만 더 빨라야 합니다. 사용 범위는 다음의 필요성을 피해야 합니다.삼중 간접 블록. (이 기사에서는 ext3에 범위를 추가하는 방법을 설명했지만 Linus는 버전 번호를 먼저 ext4로 변경하라고 말했습니다.) 비트맵을 업데이트하는 시간은 동일할 것으로 예상하지만 블록 포인터보다 훨씬 더 컴팩트합니다.