Retomando um DD de um disco inteiro

Retomando um DD de um disco inteiro

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,7 MB/s, o que é bastante patético, já que vi meu desktop em casa fazer 20 MB/s. Quando eu for para casa hoje à noite, gostaria de parar a ddcorrida aqui, levar para casa e ver que tipo de progresso pode ser feito durante a noite com uma máquina mais potente.

Tenho monitorado o progresso usando um loop simples:

while true; do kill -USR1 $PID ; sleep 10 ; done

A saída é semelhante a esta:

464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s

Se eu fosse retomar o ddpasse em casa, como o reiniciaria? Estou ciente do seekparâmetro, mas para onde aponto, o número do registro ou a contagem de bytes?

Responder1

Como o @don_crissti já comentou, é só usar seek=para retomar.

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

GNU ddtambém suporta busca em bytes, para que você possa retomar com exatidão, independentemente do tamanho do bloco:

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

Um tamanho de bloco maior deve ajudar nas velocidades, mesmo para um dispositivo lento como o /dev/urandom.

Se você está procurando alternativas mais rápidas, você poderia cryptsetup plainOpencom uma chave aleatória e zerar isso, ele deveria bater /dev/urandomem uma ordem de grandeza (sem AES-NI) ou até mesmo rodar a toda velocidade (com AES-NI).

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

Responder2

Apenas um lembrete para as pessoas que gostariam de copiar em vez de apenas randomizar os discos (o que não équecomum): você pode usar skip=BLOCKSpara começarleiturana posição adequada e seek=BLOCKSpara começarescritana posição correta. Ambas as opções usam blocos, não bytes. Ao interromper/reiniciar, é aconselhável remover vários blocos para garantir. Geralmente vale a pena aumentar o bsvalor acima de 512, pois você pode alcançar um melhor desempenho se ler muitos dados seguidos.

No seu caso, é de fato um valor de bloco para o qual você precisa passar seek. Talvez você deva tentar ajustar bspara ver se consegue aumentar a velocidade, pois /dev/randomdeve ser rápido (pseudo-aleatório e sem bloqueio quando não há entropia disponível)

Responder3

Clonando um disco:

Expandindoesseresposta deste tópico, é assim que se pode clonar um disco inteiro e retomar:

Este exemplo é otimizado para cópia de uma unidade rotativa de 5.400 rpm para um SSD em um sistema específico. gddrepresenta GNU dd:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' bs=4M status=progress
247426187264 bytes (247 GB, 230 GiB) copied, 2082 s, 119 MB/s
59012+0 records in
59011+0 records out
247510073344 bytes (248 GB, 231 GiB) copied, 2082.92 s, 119 MB/s

Posso retomar isso de duas maneiras:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=59011 skip=59011 \
status=progress

Ou:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=247510073344 skip=247510073344 \
oflag=seek_bytes iflag=skip_bytes \
status=progress

No primeiro exemplo, a razão pela qual usamos 59011e not 59012, é porque 59011quantos registros de tamanho de bloco foram totalmente copiados antes de serem interrompidos. (regista).

Responder4

Se você puder, use

#ddrescue from to logfile
ddrescue /dev/sda /dev/sdb logfile

Mantenha o arquivo de log desativado de ou para ... e se você precisar pressionar ctrl-c ou algo assim, o ddrescue lerá seu próprio arquivo de log e reiniciará automaticamente. Ele também copia tudo que é fácil primeiro e, como pode ser retomado a partir do arquivo de log, você pode dizer para ele "voltar e tentar mais" para os outros.

informação relacionada