У вас есть 30 миллионов записей в несортированном списке. Вы сканируете список на предмет записи, которую хотите удалить, и удаляете ее. Теперь в вашем несортированном списке есть только 29 999 999 записей. Если они все находятся в / tmp, почему бы просто не перезагрузиться?
Отредактировано, чтобы отразить информацию в комментариях: Формулировка проблемы: удаление большинства, но не всех , неправильно созданных 30M + файлов в / tmp занимает много времени.
Проблема 1) Лучший способ удалить большое количество нежелательных файлов из / tmp.
Проблема 2) Понимание, почему это так медленно, чтобы удалить файлы.
Решение 1) - / tmp сбрасывается в пустую при загрузке большинством * nix-дистрибутивов. FreeBSD, однако, не является одним из них.
Шаг 1 - скопируйте интересные файлы в другое место.
Шаг 2 - как root
$ grep -i tmp /etc/rc.conf
clear_tmp_enable="YES" # Clear /tmp at startup.
Шаг 3 - перезагрузка.
Шаг 4 - измените clear_tmp_enable обратно на «Нет».
Нежелательные файлы теперь исчезли, так как ZFS во FreeBSD имеет функцию, заключающуюся в том, что «Уничтожение набора данных происходит гораздо быстрее, чем удаление всех файлов, которые находятся в наборе данных, так как не включает сканирование всех файлов и обновление всех соответствующих метаданных. " поэтому все, что нужно сделать во время загрузки, - сбросить метаданные для набора данных / tmp. Это очень быстро.
Решение 2) Почему это так медленно? ZFS - замечательная файловая система, которая включает в себя такие функции, как постоянный доступ к каталогам. Это хорошо работает, если вы знаете, что делаете, но факты свидетельствуют о том, что ОП не является экспертом ZFS. ОП не указал, как они пытались удалить файлы, но я бы сказал, что они использовали вариант «find regex -exec rm {} \;». Это хорошо работает с небольшими числами, но не масштабируется, потому что выполняются три последовательные операции: 1) получить список доступных файлов (возвращает 30 миллионов файлов в порядке хеширования), 2) использовать regex, чтобы выбрать следующий файл, который нужно удалить, 3 ) скажите ОС найти и удалить этот файл из списка 30 миллионов. Даже если ZFS возвращает список из памяти и если 'find' кэширует его, регулярное выражение все равно должно идентифицировать следующий файл, который будет обработан из списка, а затем сказать ОС обновить свои метаданные, чтобы отразить это изменение, а затем обновить список, чтобы он не обрабатывался снова.