Retomando um DD de um disco inteiro

6

Estou sobrescrevendo meu disco rígido com dados aleatórios usando o bom e velho dd :

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512

É um array de 2 TB e meu MacBook (rodando Linux, ok?) só pode gravar dados em torno de 3,7MB / s, o que é bastante patético, já que eu vi meu desktop em casa a 20MB / s. Quando eu for para casa hoje à noite, eu gostaria de parar a dd rodar aqui, levar 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 fosse retomar a passagem de dd em casa, como recomeçá-la? Estou ciente do parâmetro seek , mas para que ponto, o número do registro ou a contagem de bytes?

    
por Naftuli Kay 21.01.2015 / 19:58

3 respostas

6

Como @don_crissti já comentou, use seek= para continuar.

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512 seek=464938971

GNU dd também suporta a pesquisa em bytes, para que você possa continuar exatamente, independentemente do tamanho do bloco:

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=1M \
   seek=238048755782 oflag=seek_bytes

Um tamanho maior de blocos deve ajudar com as velocidades, mesmo para um dispositivo lento como /dev/urandom .

Se você está procurando por alternativas mais rápidas, você pode cryptsetup plainOpen com uma chave aleatória e zero isso, ele deve bater /dev/urandom por uma ordem de grandeza (sem AES-NI) ou mesmo rodar a toda velocidade (com AES -NI).

Você também pode usar shred -n 1 se os dados aleatórios forem bons o suficiente para o seu caso de uso. shred deve ser capaz de utilizar a velocidade total do disco, mesmo em uma máquina muito lenta.

    
por 21.01.2015 / 21:44
3

Apenas um lembrete para as pessoas que gostariam de copiar, em vez de apenas randomizar discos (o que não é comum): você pode usar skip=BLOCKS para iniciar leitura em a posição correta e seek=BLOCKS para iniciar escrevendo na posição correta. Ambas as opções usam blocos, não bytes. Quando quebrar / reiniciar, é aconselhável remover um monte de blocos apenas no caso. Geralmente vale a pena aumentar o valor de bs acima de 512, já que você pode alcançar um desempenho melhor se ler muitos dados em sequência.

No seu caso, é realmente um valor de bloco que você precisa passar para seek . Talvez você deva tentar ajustar bs para ver se você pode aumentar a velocidade, pois /dev/random deve ser rápido (pseudo-aleatório e não-bloqueador quando não há entropia disponível)

    
por 21.01.2015 / 21:30
0

dd com um tamanho de bloco pequeno como 512 bytes provavelmente será muito mais lento que a taxa de transferência máxima do seu disco. Use um tamanho de bloco maior (em um palpite eu diria alguns MB) para um bom desempenho. Ou use cat - no Linux Eu achei cat tão rápido quanto dd com o tamanho ideal de bloco quando um único disco estava envolvido (não sei se isso vale para OSX também).

Para saber até que ponto cat chegou, execute lsof -p1234 em que 1234 é o ID do processo cat .

Para retomar de uma posição, use

{ dd bs=1 seek=123456; cat /dev/urandom; } >/dev/disk/…

onde 123456 é o deslocamento em bytes.

    
por 22.01.2015 / 00:46

Tags