Clonagem do cartão SD usando o comando dd

49

Estou tentando clonar um cartão SD que pode conter várias partições, algumas das quais o Ubuntu não pode reconhecer. Geralmente, eu quero clonar todo o volume, não apenas uma partição. Então, montei o cartão SD e vejo algo assim no visualizador de logs:

kernel: [  262.025221]  sdc: sdc1 sdc2

alex@u120432:~$ ls /dev/sdc*
/dev/sdc  /dev/sdc1  /dev/sdc2

Desde que eu quero copiar o disco inteiro, eu executo:

dd if=/dev/sdc of=sdimage.img bs=4M

O arquivo sdimage.img, 7,9 GB (7.944.011.776 bytes) é criado (o cartão SD é de 8 GB). Agora montei outro cartão SD e executei:

dd if=sdimage.img of=/dev/sdc bs=4M

O problema é que o segundo comando dd trava em algum estágio e nunca é bem-sucedido. Depois disso, não consigo reiniciar ou desligar o computador e preciso apenas desligar.

Essa é a abordagem correta? Talvez haja outra maneira de clonar um cartão SD?

SO: Ubuntu 12.04 (Precise Pangolin), 32 bits.

Alex F
fonte
Você pode montar o arquivo img criado e ver se ele foi criado corretamente?
Milan Todorovic
@MilanTodorovic - como posso fazer isso?
Alex F
Se bem me lembro: monte -o loop sdimage.img / path / to / mount. Em seguida, verifique se você pode procurar o arquivo img corretamente.
Milan Todorovic
@MilanTodorovic: Tentei o sudo mount -o sdimage.img / dev / mydisk e obtive: mount: não é possível encontrar o / dev / mydisk em / etc / fstab ou / etc / mtab Possivelmente eu preciso criar alguma entrada de desenvolvimento antes. Você pode postar isso como resposta com alguns detalhes? Obrigado.
Alex F
1
você não deve usar o dd em dispositivos montados. desmonte todas as partições primeiro, seu comando deverá funcionar.
ubfan1

Respostas:

30

Você não deve usar o dd em dispositivos montados. desmonte todas as partições primeiro, seu comando deverá funcionar.

ubfan1
fonte
2
porque é o oposto para mim? Eu tenho Ubuntu 12.10 e o comando tem só funciona com partições monted ...
Luca Davanzo
1
@ Velthune Você tem certeza disso? Nesse caso, sugiro fazer sua própria pergunta.
Vreality
26

Insira o cartão SD original e verifique o nome do dispositivo (normalmente mmcblkXou sdcX):

sudo fdisk -l

Você pode ver:

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1 *       2048  2099199  2097152    1G  c W95 FAT32 (LBA)
/dev/mmcblk0p2      2099200 31116287 29017088 13.9G 83 Linux

No meu caso, o cartão SD é /dev/mmcblk0( *p1e *p2são as partições).

Agora você precisa desmontar o dispositivo:

sudo umount /dev/mmcblk0

Agora, para criar uma imagem do dispositivo:

sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img

Isso vai demorar um pouco.

Quando terminar, insira o cartão SD vazio. Se o dispositivo for diferente (USB ou outro tipo de leitor de cartão SD), verifique seu nome e desmonte-o:

sudo fdisk -l
sudo umount /dev/mmcblk0

Escreva a imagem no dispositivo:

sudo dd if=~/sd-card-copy.img of=/dev/mmcblk0

A operação de gravação é muito mais lenta que antes.

Alon Fleider
fonte
4
ao copiar grandes quantidades de dados, você deve definir um tamanho de bloco maior que o padrão; caso contrário, pode ser necessário esperar muito tempo. sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img bs=4M
Xaedes
13

Estou usando a ferramenta dd para clonar pendrives com várias partições, aqui está o meu comando:

sudo dd if=/dev/sdb of=/dev/sdc bs=4096 conv=notrunc,noerror

notrunc - não trunca o arquivo de saída
noerror - continua após erros de leitura

tommyk
fonte
Isso não requer dois leitores de cartão SD?
Peter Marcel
1
@PeterMortensen sim, muitos de nós usam esses adaptadores do tipo 4 em 1.
Teque5
9

dd está bom, mas eu prefiro cat /dev/sdc/ > ~/backup.iso Se você quiser colocá-lo em um cartão SD novamente, basta executarcat ~/backup.iso > /dev/sdc

Vrealidade
fonte
Ambos os SD são 8 GB. cat pode ser usado para criar imagem SD, mas para criar outro SD eu devo usar dd, certo?
Alex F
0

Aqui estão as etapas que funcionaram para mim no Ubuntu para restaurar o arquivo de imagem ( ~/raspberrypi2.imgno meu caso) de volta para um novo cartão SD (inspirado fortemente na resposta de Alon acima):

  1. Insira o cartão micro SD através do leitor de cartão.
  2. Abra o aplicativo Disks.
  3. Formate rapidamente o cartão inteiro (não uma partição específica).
  4. Feche os discos.
  5. Abra o terminal e execute:

    sudo fdisk -l
    

Saída relevante (que mostrou que não havia partições devido ao formato rápido de todo o cartão):

Disk /dev/sdb: 7.4 GiB, 7948206080 bytes, 15523840 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disklabel type: dos 
Disk identifier: 0x6957f2f2

sudo dd if=~/raspberrypi2.img of=/dev/sdb

Esta etapa leva alguns bons minutos (mesmo no USB3). Certifique-se de não interrompê-lo por qualquer operação que invoque a montagem (abrindo os aplicativos Arquivos ou Discos).

Obrigado pelas respostas de todos.

BoazC
fonte