Como posso * lentamente * apagar um histórico de um diretório grande para reduzir o i / o & load do disco?

1

Eu tenho um sistema Linux Ubuntu. Eu tenho um diretório que tem uma grande quantidade de arquivos. Eu posso usar rm -rf $NAME para deletar tudo. No entanto, isso pode usar um monte de E / S de disco e fazer com que a carga aumente devido à E / S do disco. Mesmo se eu usar ionice -c 3 , ainda pode causar muita E / S de disco e, portanto, carregar.

Existe um comando slowrmrf que será como rm -rf , mas irá "devagar" (FSVO lento) e excluirá todos os arquivos, mas olhará a carga do sistema e fará uma pausa às vezes para permitir que o carga volta para baixo?

    
por Rory 09.11.2016 / 17:34

3 respostas

2

Você pode usar ionice para limitar a utilização de qualquer processo.

Por exemplo, você pode usar o seguinte:

ionice -c3 rm -rf $NAME

Permitir somente que o rm use o io quando nenhum outro processo requer o io, já que -c3 significa o agendamento da classe ocioso.

    
por 09.11.2016 / 20:08
0

Você pode canalizar find de saída em um loop que faz uma pausa ocasionalmente.

Eu tenho um script que basicamente faz isso que eu não tenho acesso no momento, mas seria algo semelhante a:

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

O texto acima excluirá 100 arquivos (buscando recursivamente a partir do caminho de origem fornecido), depois suspenderá por 15 segundos, depois excluirá outros 100 arquivos, depois dormirá novamente e assim por diante. Ajuste a contagem e o período de sono conforme desejado.

Como indicado, o acima não é provavelmente exótico-nome do arquivo-safe. No entanto, deve dar-lhe a idéia geral de uma possível abordagem para uma exclusão lenta sem precisar recorrer a um software especializado.

    
por 09.11.2016 / 17:50
0
find "$NAME" -type f -exec bash -c 'rm -f "$1";sleep 0.1;' _ {} \;
    
por 09.11.2016 / 17:50