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
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 .
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í.
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.
Tags dd