Estou substituindo meu disco rígido por dados aleatórios usando o bom e velho dd
:
dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512
É uma matriz de 2 TB e meu MacBook (executando Linux, ok?) Só pode gravar dados em torno de 3,7 MB / s, o que é bastante patético, já que eu vi minha área de trabalho em casa fazer 20 MB / s. Quando vou para casa hoje à noite, gostaria de parar a dd
corrida aqui, levá-la para casa e ver que tipo de progresso pode ser feito da noite para o dia com uma máquina mais poderosa.
Eu tenho monitorado o progresso usando um loop simples:
while true; do kill -USR1 $PID ; sleep 10 ; done
A saída é assim:
464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s
Se eu retomasse o dd
passe em casa, como o reiniciaria? Estou ciente do seek
parâmetro, mas para o que aponto, o número do registro ou a contagem de bytes?
seek=464938960
Respostas:
Como o @don_crissti já comentou, use
seek=
para continuar.GNU dd
também suporta busca em bytes, para que você possa retomar exatamente, independentemente do tamanho do bloco:Um tamanho de bloco maior deve ajudar nas velocidades, mesmo em dispositivos lentos
/dev/urandom
.Se você estiver procurando por alternativas mais rápidas, poderá
cryptsetup plainOpen
com uma chave aleatória e zerá-la, ela deve bater/dev/urandom
por uma ordem de magnitude (sem AES-NI) ou até rodar a toda velocidade (com AES-NI).Você também pode usar
shred -n 1
se os dados pseudo-aleatórios forem bons o suficiente para o seu caso de uso.shred
deve poder utilizar a velocidade total do disco, mesmo em uma máquina muito lenta.fonte
plainOpen
até agora. Ótimo! Terminei minha luta de uma unidade de 2 TB em cerca de 4 horas, em vez de 256 GB em mais de 12 usando/dev/urandom
.Apenas um lembrete para as pessoas que gostariam de copiar em vez de discos apenas randomizing (que não é que comum): você pode usar
skip=BLOCKS
para começar a leitura na posição adequada, eseek=BLOCKS
para começar a escrever na posição correta. Ambas as opções usam blocos, não bytes. Ao interromper / reiniciar, é recomendável remover vários blocos, por precaução. Geralmente, vale a pena aumentar obs
valor acima de 512, pois você pode obter melhor desempenho se ler muitos dados seguidos.No seu caso, é realmente um valor de bloco para o qual você precisa passar
seek
. Talvez você deva tentar ajustarbs
para ver se consegue aumentar a velocidade, como/dev/random
deve ser rápido (pseudo-aleatório e sem bloqueio, quando não houver entropia disponível)fonte
dd
com um tamanho minúsculo de bloco, como 512 bytes, provavelmente será muito mais lento que o rendimento máximo do seu disco. Use um tamanho de bloco mais alto (em um palpite, eu diria que alguns MB) para obter um bom desempenho. Ou usecat
- no Linux , acheicat
tão rápido quantodd
com o tamanho ideal de bloco quando um único disco estava envolvido (não sei se isso também vale para o OSX).Para descobrir até onde
cat
chegou, executelsof -p1234
onde 1234 é o ID docat
processo.Para retomar de uma posição, use
onde 123456 é o deslocamento em bytes.
fonte
Clonando um disco:
Expandindo esta resposta a partir deste thread, é assim que se pode clonar um disco inteiro e continuar:
Este exemplo é otimizado para copiar de uma unidade rotativa de 5400 rpm para um SSD em um sistema específico.
gdd
representaGNU dd
:Posso retomar isso de duas maneiras:
Ou:
No primeiro exemplo, a razão pela qual usamos
59011
e não59012
é porque59011
é quantos registros de tamanho de bloco foram totalmente copiados antes de serem interrompidos. (registros gravados).fonte