Usando DD para copiar apenas a metade (parte) do dispositivo removível

2

Eu tinha um cartão SD de 32 GB com essa estrutura (ou muito próxima):

luis@Fresoncio:~$ sudo fdisk -l
Disk /dev/mmcblk0: 29.2 GiB, 31393316864 bytes, 61315072 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: 0xec4e4f57

Device         Boot    Start      End  Sectors  Size Id Type
/dev/mmcblk0p1             1   125000   125000   61M  c W95 FAT32 (LBA)
/dev/mmcblk0p2        125001 33292287 33167287 15.8G 83 Linux
/dev/mmcblk0p3      33292288 61315071 28022784 13.4G 83 Linux

E eu transferi (de outro computador, para os dispositivos em que sda e sdb ) para um (eu escolho o errado) Cartão SD de 64 GB via dd ( ddcfld , na verdade):

# ddcfld if=/dev/sda of=/dev/sdb bs=1M

Agora, meu novo cartão SD de 64 GB é:

luis@Fresoncio:~$ sudo fdisk -l
Disk /dev/mmcblk0: 59.5 GiB, 63864569856 bytes, 124735488 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: 0xec4e4f57

Device         Boot    Start      End  Sectors  Size Id Type
/dev/mmcblk0p1             1   125000   125000   61M  c W95 FAT32 (LBA)
/dev/mmcblk0p2        125001 33292287 33167287 15.8G 83 Linux
/dev/mmcblk0p3      33292288 61315071 28022784 13.4G 83 Linux

Bem, não há problema por enquanto, mas agora eu não tenho mais o cartão SD de 32 GB, apenas o cartão SD de 64GB permanece, e eu gostaria de transferi-lo para algum cartão SD vazio de 32GB novamente.
Nesse caso, suponho que não posso usar dd ou ddcfld

O que posso fazer? Posso usar dd ou ddcfld ? O que poderia acontecer quando a transferência chegasse ao limite de 32 GB no cartão SD de destino (problemas de integridade de dados)?

Mais notas :

  • Qualquer outro método para clonar os cartões SD seria OK, mas eu tenho um problema: neste caso, é alguma unidade de inicialização do cartão SD para um Raspberry Pi 2 , e a clonagem via partimage ou gparted não funcionou (o Raspberry não inicializa). Apenas dd parece fazer a clonagem sem falhas.

  • semelhante pergunta, mas acho que não é o mesmo.

  • A ferramenta ddcfld tem a mesma sintaxe e comportamento de dd . Apenas dá mais informação (progresso ... etc). Aqui está a página do manual .

por Sopalajo de Arrierez 21.10.2016 / 00:46

3 respostas

4

Assumindo que sda é seu cartão SD de origem de 64GB e sdb é seu cartão SD de destino de 32GB. Você pode limitar o dd para copiar apenas o número de setores requeridos com:

dd if=/dev/sda of=/dev/sdb bs=512 count=61315072
    
por 21.10.2016 / 01:28
1

Eu fiz isso com discos rígidos muitas vezes: Você simplesmente dd o grande para o pequeno. Ele falhará quando atingir os 32 GB, mas tudo bem.

Se você ainda tiver dúvidas, eu sugiro que você tente fazê-lo no velho USB stick / harddisk que você tem por aí.

    
por 21.10.2016 / 01:16
1

Você pode usar qualquer ferramenta para fazer a cópia, como cat ( dd não tem vantagem sobre cat , apenas desvantagens). Parará quando chegar ao final do disco de destino. A desvantagem dessa abordagem simples é que é difícil dizer se a cópia da parte em que você estava interessado foi bem-sucedida.

Para garantir que o comando copy retorne um status de sucesso, se ele copiar com êxito o que você deseja copiar e os erros de outra forma, use um comando que copie a quantidade correta de dados. Para copiar os primeiros N bytes de um arquivo, use head -c . O número de bytes a copiar é o número de setores multiplicado pelo tamanho do setor (512 bytes na sua listagem fdisk ). Não se esqueça de que os setores começam em 0 (o setor 0 contém a tabela de partições), portanto, o número total de setores a serem copiados é o maior valor "final" mais um.

head -c $((61315071*512+512)) /dev/sdSOURCE >/dev/sdDESTINTATION

Substitua sdSOURCE e sdDESTINATION pelos nomes de dispositivos apropriados. Execute fdisk -l /dev/sdDESTINATION e grep sdDESTINATION /proc/partitions e file -s /dev/sdDESTINATION e qualquer outro comando que você considere útil para garantir que o dispositivo sobrescrito seja o dispositivo que você deseja substituir.

    
por 23.10.2016 / 01:22

Tags