Назад | Перейти на главную страницу

Самый быстрый способ съесть все устройство (xfs)

Мне нужно перебрать 1,5 миллиона файлов на диске. Я сейчас делаю:

sudo chown -R www-data:www-data /root-of-device

но бегать нужно очень долго. Мне было интересно, есть ли какой-то сверхбыстрый низкоуровневый способ перехватить каждый файл на диске.

Использовать xargs -p или GNU parallel чтобы значительно ускорить процесс.

К сожалению, я не думаю, что такое есть, но был бы приятно удивлен, если бы он был. Вы можете написать свою собственную реализацию на C и сильно ее оптимизировать. Однако успех этого зависит от того, насколько хорошо оптимизирован Chown это для начала. Учитывая, что это одна из основных утилит, я бы сказал, что она довольно оптимизирована. Вдобавок вы, скорее всего, ограничены скоростью ввода-вывода.

Мне удалось избежать ограничений ls и rm путем передачи результатов найти к xargs, если в каталоге много файлов, то есть:

find /path/* | xargs rm

Итак, дикая догадка, может быть, это может ускорить Chown, в случае, если рекурсивное сканирование файловой системы выполняется медленнее, чем найти:

sudo find /path/* | xargs chown www-data:www-data

Я тоже использую Amazon EC2, и у меня возникла эта проблема. 2 вещи:

Исправление текущей ситуации: Вам придется иметь дело с медлительностью. Возможно, вы можете использовать «экран» или что-то подобное, чтобы процесс мог продолжаться в фоновом режиме.

Исправление будущей ситуации: Вы можете посмотреть вверх по течению и увидеть, как файлы генерируются в первую очередь. Поскольку вы упомянули www-data, я предполагаю, что потребителем файлов является Apache. Если файлы удаляются из другой программы (NFS, Samba, SSH и т. Д.), Убедитесь, что эти программы устанавливают user: group как www-data: www-data.