Мы используем rsnapshot для резервного копирования. Он хранит множество снимков резервной копии файла, но удаляет старые. Это хорошо. Однако rm -rf
на массивное дерево каталогов уходит около 7 часов . Файловая система XFS. Я не уверен, сколько там файлов, но это, наверное, исчисляется миллионами.
Есть ли способ ускорить его? Есть ли команда, которая делает то же самое, что rm -rf
и не занимает несколько часов?
find . -delete -name directory
и это гораздо быстрее, чемrm -rf
.Ответы:
Нет.
rm -rf
выполняет рекурсивный обход вашей файловой системы в глубину, вызываяunlink()
каждый файл. Две операции, которые заставляют процесс идти медленно, этоopendir()
/readdir()
иunlink()
.opendir()
иreaddir()
зависят от количества файлов в каталоге.unlink()
зависит от размера удаляемого файла. Единственный способ сделать это быстрее - это уменьшить размер и количество файлов (что, я подозреваю, маловероятно) или изменить файловую систему на систему с лучшими характеристиками для этих операций. Я считаю, что XFS хорош для unlink () для больших файлов, но не так хорош для больших структур каталогов. Вы можете обнаружить, что ext3 + dirindex или reiserfs быстрее. Я не уверен, насколько хороши тарифы JFS, но я уверен, что существует множество тестов производительности различных файловых систем.Редактировать: Кажется, что XFS ужасно удаляет деревья , поэтому определенно измените свою файловую систему.
источник
unlink
что ничего не делает с реальным содержимым, кроме выполненияunlink
системного вызова, код файловой системы, тем не менее, должен проделать большую работу, если удаленная ссылка является последней для файла и если она в данный момент не открыта. Это, конечно, зависит от файловой системы, но тогда может быть очень заметная разница, когда удаленный файл огромен.В качестве альтернативы отодвиньте каталог в сторону, заново создайте его с тем же именем, разрешениями и владельцем и перезапустите все приложения / службы, которые заботятся об этом каталоге.
После этого вы можете "приятно создать" исходный каталог в фоновом режиме, не беспокоясь о длительных сбоях.
источник
Убедитесь, что у вас установлены правильные параметры монтирования для XFS.
Используя -ologbufs = 8, logbsize = 256k с XFS, вероятно, утроит вашу производительность удаления.
источник
Если вы эффективно выполняете команду rm на уровне файлов, это займет много времени. Вот почему снимки на основе блоков так хороши :).
Вы можете попытаться разделить rm на отдельные области и попытаться сделать это параллельно, однако я не ожидаю, что это улучшится. Известно, что в XFS есть проблемы с удалением файлов, и если это большая часть того, что вы делаете, возможно, вам подойдет другая файловая система.
источник
Хорошо использовать ionice для операций с интенсивным вводом-выводом, подобных этим, независимо от используемой файловой системы.
Я предлагаю эту команду:
Он отлично подойдет для фоновых операций на сервере с большой нагрузкой ввода-вывода.
источник
Я знаю, что это старый, но я подумал, что я могу предложить. Вы удаляете эти файлы последовательно, выполнение параллельных операций rm может ускорить процесс.
http://savannah.nongnu.org/projects/parallel/rallel может обычно использоваться вместо xargs
так что если вы удаляете все файлы в deltedir
Это оставило бы вам только пустые структуры каталогов для удаления.
Примечание. Скорее всего, вы все равно столкнетесь с ограничениями файловой системы, как указано выше.
источник
Может ли альтернативный вариант здесь разделить данные таким образом, чтобы вы могли мусор и восстановить действительную файловую систему вместо выполнения команды rm?
источник
Как насчет уменьшения милости команды? Подобно:
источник