Сегодня я удалил файл размером 50 ГБ, хранящийся в файловой системе ext3, с помощью rm
команды. Потребовалось rm
почти 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, но Линус воспротивился и сказал сначала поднять номер версии до ext4). Я ожидаю, что время обновления битовых карт будет таким же, но они гораздо компактнее указателей блоков.