Como posso reduzir o uso de recursos ao copiar um arquivo grande?

8

Eu preciso mover um arquivo grande (tabela MySQL corrompida ~ 40GB) para um servidor separado, a fim de repará-lo. (Ao tentar reparar no meu servidor de produção, ele rapidamente matou o servidor).

Para fazer isso, quero rsync os arquivos .frm, .MYI e .MYD do meu servidor de produção para um servidor em nuvem.

Eu estou copiando os arquivos de / var / lib / mysql / {database} / para / home / {myuser} para que eu não precise ativar o acesso root para o comando rsync e ter 100% de certeza que o arquivo de banco de dados não está em uso (não deve ser escrito ou lido, mas obviamente eu não quero desligar meu banco de dados de produção para ter certeza).

O primeiro arquivo que tentei copiar tinha cerca de 10 GB. Estou transferindo de uma parte do meu servidor de produção para a outra, ou seja, para a mesma matriz de discos.

Infelizmente, o comando copy "cp filename newfilename" levou tantos recursos que parou o servidor.

Como posso usar menos recursos ao copiar o arquivo para um diretório diferente? (Realmente não importa quanto tempo demore).

Assumindo que eu consiga fazer isso, que uso de recursos posso esperar ao rsyncing o arquivo para a nuvem?

Alguém pode sugerir uma maneira melhor de fazer isso? Estou ficando rapidamente sem espaço em disco, por isso preciso reparar e arquivar essa tabela o mais rápido possível.

    
por Jon M 11.04.2011 / 16:47

4 respostas

4

Já tentou nice -n10 prefixado ao comando?

10 é o valor padrão. O intervalo vai de -20 (prioridade mais alta) a 19 (menor).

    
por 11.04.2011 / 16:50
9

Duas opções além da limitação de largura de banda rsync:

  • ionice -c 3 cp foo bar
  • buffer -u 150 -m 16m -s 100m -p 75 -i foo -o bar

ionice irá interagir com o agendador de E / S. buffer é um buffer circular destinado a auxiliar dispositivos de caractere a serem mais eficientes, mas o -u 150 pausará 150 microssegundos entre gravações que, de acordo com o manual, podem ser suficientes para dar espaço em disco para a respiração.

Tanto o ionice quanto o buffer estão disponíveis em um repositório padrão do Ubuntu. iotop é útil se você tiver o CONFIG_TASK_DELAY_ACCT configurado no seu kernel, mas a minha caixa do Ubuntu não limitou severamente a usabilidade do comando. Eu já sei que qual comando está afogando meu disco rígido, eu só quero dar-lhe algum espaço para respirar.

Além disso, enquanto a cópia estiver em andamento, observe a saída de iostat -x 1 (geralmente no pacote sysstat) e veja se o campo% ocupado para o seu dispositivo é 90% ou menos durante a cópia. Se estiver em 99-100%, você estará privando outros processos de E / S.

    
por 12.04.2011 / 05:41
6

use rsync com o parâmetro --bwlimit = KBPS (limite de largura de banda de E / S; KBytes por segundo). brinque com um arquivo menor e tente encontrar uma mistura ideal entre a velocidade de transferência e o uso do sistema. Monitore em segundo shell com "vmstat 1"

    
por 11.04.2011 / 16:52
0

Uma alternativa é:

scp -l ${KBPS} ${src} ${dest}

Mas eu não acho que funcionará se $ {src} for um arquivo crescente ... você pode sugerir uma maneira de copiar e esperar que a fonte seja fechada ...

    
por 26.01.2013 / 23:01