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 dd
corrida 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 dd
passe em casa, como o reiniciaria? Estou ciente do seek
parâ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 dd
també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 plainOpen
com uma chave aleatória e zerar isso, ele deveria bater /dev/urandom
em uma ordem de grandeza (sem AES-NI) ou até mesmo rodar a toda velocidade (com AES-NI).
Você também pode usar shred -n 1
se os dados pseudoaleatórios forem bons o suficiente para o seu caso de uso. shred
deve 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=BLOCKS
para começarleiturana posição adequada e seek=BLOCKS
para 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 bs
valor 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 bs
para ver se consegue aumentar a velocidade, pois /dev/random
deve 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. gdd
representa 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 59011
e not 59012
, é porque 59011
quantos 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.