Удаление огромного количества файлов в Linux без завешивания сервера

Удаление большого количества файлов

Периодически, каждый администратор сталкивается с проблемой удаления огромного количества мелких файлов. Такие файлы могут генерироваться веб-серверами при создании сессий или другими сервисами. Дело в том, что когда удаляешь много файлов, дисковая система очень сильно загружается. При удалении мелких файлов, они удаляются быстро и происходит быстро переход на следующий файл. Как результат, сервисы операционной системы могут не успевать получать свое время – все время дисковой системы будет выделено на удаление бесконечного списка файлов ))). В интернет много различных решений удаления файлов. Большинство из которых “вешает сервер”. Для того, чтоб Ваши службы оставались работающими Вы можете воспользоваться perl-скриптом размером в 1 строчку ))). perl -e ‘$dir=”/mnt/k2bigdata/lib/php/sessions_old/”;opendir(D,$dir)||die(“Err\n”);while($f=readdir(D)){print $dir.$f.”\n”;unlink($dir.$f);select(undef, undef, undef, 0.1);}’   В скрипте я выделил жирным то, что Вам нужно поменять. /mnt/k2bigdata/_old/sessions2_old/ – это путь откуда удаляются файлы. 0.1 – это время в секундах, которое ожидает скрипт после удаления каждого файла. В данном случае, 0,1 = 100 миллисекунд или 0,1 секунды. Выставляется эта пауза экспериментальным путем. Запускаете скрипт в терминале, если службы продолжают нормально работать – можете понижать время, если нет, тогда прерываете выполнение скрипта и выставляете паузу побольше. Расчет скорости удаления файлов Выставляя паузу, расчитывайте за сколько Вы удалите файлы, чтоб их не удалять “всю жизнь” ))). Так, например, если пауза 0,1, то Вы удалите 10 файлов в секунду. 10*60*60*24=864 000 файлов в сутки. Таким образом, если у Вас несколько миллионов файлов, то Вы с такой скоростью удалите их за несколько суток.  Не заметно для пользователей. Если же Вам нужно удалить больше файлов, то возможно Вам нужно повысить скорость удаления. А […]

Read more