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

12
VK
На сайте с 29.12.2011
Offline
42
#11

magazzz, для групп файлов можете дополнительно использовать xargs, он позволяет группировать файлы.

что-то типа

find /var/www/pols/data/www/data/logs -cmin +2880 -type f | xargs -I _ -n 1000 nice rm -rf _

это поможет ощутимо снизить нагрузку на систему при удалении. со значением 1000 можете поиграться, но и это должно подойти.

C
На сайте с 20.09.2007
Offline
114
#12

Положите del.php в папку с кэшем. Отработает очень быстро.

<?php
function SureRemoveDir($dir, $DeleteMe) {
if(!$dh = @opendir($dir)) return;
while (false !== ($obj = readdir($dh))) {
if($obj=='.' || $obj=='..' || $obj=='del.php') continue;
if (!@unlink($dir.'/'.$obj)) SureRemoveDir($dir.'/'.$obj, true);
}
if ($DeleteMe){
closedir($dh);
@rmdir($dir);
}
}

SureRemoveDir('.', false);
?>
ИМХО, самые лучшие VDS: https://cp.inferno.name/aff.php?aff=4048
[Удален]
#13

Если это не шаред хостинг, то рекомендую использовать утилиту tmpwatch.

Любые решения на PHP курят в сторонке.

---------- Добавлено 27.05.2014 в 23:16 ----------

Может его стоит чаще запускать и в итоге меньше файлов будет собираться?

Умный совет!

magazzz
На сайте с 26.05.2012
Offline
52
#14

Вот посоветовали, но не понимаю по английски

http://serverfault.com/questions/237981/how-do-a-slow-recursive-delete-on-linux

---------- Добавлено 28.05.2014 в 15:39 ----------

Пока что уменьшил время кеша и частоту чистки.

Вроде справляется пока что.

Попозже попробую другие методы.

Гоняю по твиту ваши ссылки. Продам раскрученные акки твита. В личку.
soko1
На сайте с 02.05.2014
Offline
3
#15

Используйте отдельную файловую систему для файлов с логами - тогда сайты тормозить не будут. Выберите какую нибудь ФС которая более всего подходит для большого кол-ва мелких файлов. Например неплохо с этим справляется reiserfs, можно ещё jfs попробовать. Ну или на крайний случай ext2 без журнала. А самый лучший вариант - tmpfs, если памяти достаточно и с электриками дружите :)

Оперативно поможем вам в решении ваших проблем: /ru/forum/814513 (/ru/forum/814513)
L7
На сайте с 23.04.2005
Offline
204
#16

Была в свое время такая проблема, в папку набилось невероятное число файлов логов (узнал об этом только из-за того, что на сервере свободное место кончилось, после удаления выяснилось, что папка с логами весила 60 гигов, при том, что 1 файл лога и 1 килобайт не всегда весил). Операции удаления через find в принципе не работали, хоть сутки жди. Помогло только вот это:

cd /put/papka ; cat . | strings | xargs rm -f

Гигабайты свободного места стали возвращаться прямо на глазах :)

Проверка добытых беклинков, мастхэв для сеошников ( https://prozavr.ru/ ) | Массовая проверка Яндекс ИКС ( https://prozavr.ru/tools/massovaya_proverka_iks.php ) | Скачивалка фото из ВК и Пинтереста ( https://prozavr.ru/tools/parser_kartinok.php ), для получения тонн картинок для ваших проектов.
pupseg
На сайте с 14.05.2010
Offline
364
#17

find _youtubecache/ | xargs rm -rf

удаляю так.

строит список пачками а не прочитывает все.

Качественная помощь в обслуживании серверов. (/ru/forum/661100) Бесплатных консультаций не даю, не помогаю, не обучаю. Минималка от 100$. Как пропатчить KDE-просьба не спрашивать. Есть форумы (http://linux.org.ru) и полезные сайты (http://www.opennet.ru/).
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#18

Поддерживаю censored!,

Все проблемы аналогичных удалений утыкаются в момент сканирования \ листинга директории в которой находится файл, таким образом происходит следующее: вы например хотите удалить 1 файл из директории в которой находится 1 миллион файлов, для того что бы получить доступ к 1 файлу система строит список файлов в директории (если использовать find или ls) таким образом ... удаляя 100 файлов вы перечитываете 100 миллионов файлов ....

Можно попробовать вот такую вот конструкцию, если таким путем считать количество файлов в в директории, то занимает около 15 секунд на моем супер производительном роутере с 600 Mgz и 256 метрами памяти и IDE винтом :) Если же удалять в папке 1 миллион файлов, то занимает несколько минут, все на том же мега производительном роутере :)


#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
struct dirent *entry;
DIR *dp;
chdir("/home/megatest/");
dp = opendir(".");
while( (entry = readdir(dp)) != NULL ) {
if ( strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")
){
unlink(entry->d_name);
}
}
}
Есть около 15.000 ipv4 !!! (http://onyx.net.ua/price.php#ipv4) Качественный хостинг с 2005 года - лучшее клиентам! (http://onyx.net.ua/)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий