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

Как я могу * медленно * удалить большую иерархию каталогов, чтобы уменьшить количество операций ввода-вывода и нагрузку на диск?

У меня есть система Ubuntu Linux. У меня есть каталог с большим количеством файлов. я могу использовать rm -rf $NAME чтобы удалить все это. Однако это может использовать много дискового ввода-вывода и вызвать увеличение нагрузки из-за дискового ввода-вывода. Даже если я использую ionice -c 3 он по-прежнему может вызывать много операций ввода-вывода на диск и, следовательно, нагрузку.

Есть ли slowrmrf команда, которая будет похожа на rm -rf, но будет идти "медленно" (FSVO медленно) и удалять все файлы, но будет смотреть на загрузку системы и иногда делать паузу, чтобы позволить нагрузке снова снизиться?

Вы можете использовать ionice чтобы ограничить использование io любого процесса.

Например, вы можете использовать следующее:

ionice -c3 rm -rf $ ИМЯ

Чтобы разрешить rm использовать io только тогда, когда ни один другой процесс не требует io, так как -c3 означает, что класс планирования простаивает.

find "$NAME" -type f -exec bash -c 'rm -f "$1";sleep 0.1;' _ {} \;

Вы можете трубить find вывод в цикл, который иногда приостанавливается.

У меня есть сценарий, который делает это в основном, к которому у меня сейчас нет доступа, но он будет примерно таким:

i=0
find $ORIGIN_PATH -type f -print | \
IFS="" while read filename; do
    i=$(($i + 1))
    rm "$filename" &>/dev/null
    if test "$i" -gt 100; then 
        sleep 15
        i=0
    fi
done

Вышеупомянутое приведет к удалению 100 файлов (рекурсивный поиск по заданному пути источника), затем в спящем режиме на 15 секунд, затем удалит еще 100 файлов, затем снова в спящий режим и т. Отрегулируйте счетчик и продолжительность сна по желанию.

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