Я прочитал в посте stackoveflow, что в Linux, когда мы удаляем файл, он на самом деле не удаляется, удаляется только ссылка из таблицы inode на этот файл. Если это так, то почему удаление не является операцией постоянного времени?
Я также попробовал провести эксперимент: я создал папку с 1500 изображениями и создал объект tar этих изображений. И каталог, и файл tar имеют одинаковый размер. Время удаления объекта tar и каталога с 1500 изображениями следующее
Удаление tar-файла time rm test.tar
:
real 0m0.024s
user 0m0.001s
sys 0m0.024s
Удаление каталога:time rm -r test
real 0m0.219s
user 0m0.024s
sys 0m0.191s
Насколько я понимаю, эта разница во времени возникает из-за
удаления 1 файла по сравнению с удалением 1500 файлов. Но разве удаление объекта tar не должно быть в 1500 раз быстрее?
решение1
Потому что этонетпростая операция «отметить один инод как удаленный»:https://www.slashroot.in/how-does-file-deletion-work-linux
По крайней мере, на ext4 удаление файлов происходит намного быстрее, чем на разделах ext2/ext3, благодаря использованию экстентов.
В случае SSD удаление файлов может быть медленнее, чем необходимо, из-за использования опции «отбросить», которая сообщает вашему SSD о необходимости физически отбросить все блоки, принадлежащие файлу, чтобы продлить срок службы вашего SSD. Это оченьнетжелательно отключить.