오늘 나는 명령을 사용하여 ext3 파일 시스템에 저장된 50GB 파일을 삭제했습니다 rm
. rm
모든 블록을 해제하는 데 거의 40분 정도의 집중적인 I/O가 소요되었습니다 . 다른 소스에서 본 바에 따르면 파일에서 사용하는 모든 블록을 해제하는 데 걸리는 시간입니다. 누군가가 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에 먼저 적용하라고 말했습니다.) 비트맵을 업데이트하는 시간은 동일할 것으로 예상하지만 이는 블록 포인터보다 훨씬 더 컴팩트합니다.