Trabalhando no Linux e no OS X (10.10.5), estou usando a ferramenta de linha de comando dd para copiar o conteúdo de uma unidade flash USB de e para um arquivo compactado. Para criar o arquivo, eu uso o seguinte em uma unidade desmontada (no Linux o formato é algo como /dev/sdb
; no OS X é algo como /dev/disk2
):
sudo dd if=/dev/disk1 bs=1m | gzip -c > disk.image.gz
que copia o conteúdo da unidade inteira, compacta e grava em disk.image.gz
. Para descompactar a imagem em uma nova unidade, eu uso:
cat disk.image.gz | gunzip -c | sudo dd of=/dev/disk1 bs=1m
que pega a imagem de disco compactada, descompacta e grava na unidade. (Você pode verificar o progresso de qualquer comando executando o seguinte em uma janela separada no Linux:
sudo killall -USR1 dd
ou no OS X:
sudo killall -INFO dd
que, em ambos os casos, sinaliza dd
para a saída de duas linhas na quantidade de dados transferidos.)
Ambos os processos funcionam bem no Linux. No entanto, embora a leitura e a compactação funcionem bem no OS X, a descompactação e gravação nunca terminam. dd
mantém a gravação de dados e mais dados, mesmo que o arquivo de origem (descompactado) tenha terminado e a unidade de disco esteja cheia. Se eu esperar até que mais dados sejam gravados do que deveriam caber na unidade flash e, em seguida, ^C
encerrar o comando, a unidade resultante parecerá montar e operar perfeitamente. Mas, me preocupa que o comportamento não seja o que eu espero.
Alguma idéia de por que dd
a gravação nunca termina, mesmo que não esteja mais recebendo dados?
(BTW: se você estiver usando isso como instruções para gravar seus próprios discos, TENHA CERTEZA você tem os identificadores de dispositivo correto (por exemplo, o /dev/sdb
ou /dev/disk2
mencionado acima). dd
Faz exatamente o que você diga a ele para fazer, por isso, se você pegar o identificador errado e peça para ele sobrescrever sua unidade de inicialização; isso será feito com prazer. Procure em outro lugar como determinar o dispositivo certo.)
fonte
/dev/disk1
,/dev/disk2
etc./dev/disk2
(checando três vezes para não danificar minha unidade de inicialização). Vou esclarecer na pergunta.cp
vez dedd
não ter necessidades especiais e apenas desejar copiar o conteúdo de um dispositivo de bloco.cat
se você quiser colocá-lo em algum lugar.Respostas:
Isso pode realmente não responder à pergunta, mas pode fornecer uma solução.
Em vez de usar o
dd
que parece se comportar de maneira estranha para você, usecat
oucp
. Pelo menos no OS X, eles funcionam muito bem em dispositivos de bloco. Assim:torna-se
Se você quiser o inverso, apenas redirecione
gunzip
a saída:torna-se
Se você deseja apenas copiar um dispositivo de bloco
torna-se
Se você deseja apenas copiar uma imagem para um dispositivo de bloco (por exemplo, Raspbian para cartão SD)
torna-se
Isso também evita problemas com tamanhos de bloco.
fonte
gunzip -c disk.image.gz | sudo tee /dev/disk1 > /dev/null
duas vezes. Ele falhou uma vez (continuando muito mais tempo do que o esperado; não pude medir os dados transferidos porque não estava usandodd
) e foi bem-sucedido uma vez. Parece que algo mais está acontecendo.progress
anteriormentecv
que exibe o progresso de muitos utilitários. Você pode tentar isso.