Você mencionou em um comentário ao RooTer que A) reduziu o tamanho da partição inicial gparted
, mas dd
ainda copia o cartão inteiro e B) que deseja incluir as duas partições na imagem.
É fácil explicar o problema "A": você ainda está copiando o cartão inteiro porque é isso que /dev/mmcblk0
se refere. As partições individuais são obviamente /dev/mmcblk0p1
e /dev/mmcblk0p2
. Essa é a complicação do problema "B", mas você não pode simplesmente dd
cada partição e concatenar os dois arquivos juntos, porque a tabela de partições no início /dev/mmcblk0
indexa o início e o comprimento de cada partição. Sem isso, a imagem será inutilizável.
No entanto, você pode obter o comprimento de cada partição fdisk -l
e usá-lo para determinar alguns parâmetros para dd
. Por exemplo:
> fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 16.1 GB, 16138633216 bytes
4 heads, 16 sectors/track, 492512 cylinders, total 31520768 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
Disk identifier: 0x00017b69
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 26746879 13312000 83 Linux
As unidades "Iniciar" e "Final" são setores e observe o tamanho do setor, 512 bytes. Para /dev/mmcblk0p2
, 26746879 (o último setor) - 122880 (o primeiro setor) = 26623999/2 (para 2 setores por kB) / 1024 (kB por MB) / 1024 (MB por GB) = 12,69, que eu ampliei a partição usando gparted para 12 GB, então isso parece correto (realmente eu deveria estar usando 1000 e não 1024 como o divisor com armazenamento, o que resulta em 13,31 GB, mas eu suspeito que o gparted e algumas outras ferramentas também usam 1024).
Portanto, a primeira coisa que você deseja verificar é que sua segunda partição é realmente o tamanho menor que você a configurou. Em seguida, basta usar esses números com dd
; para mim seria:
dd if=/dev/mmcblk0 of=rpi.img bs=512 count=26746880
Eu tenho um setor extra lá para evitar qualquer tipo de desentendimento por um mal-entendido de como dd
funciona. Existe uma maneira simples de verificar se isso funcionou:
> fdisk -l rpi.img
Disk rpi.img: 102 MB, 102400000 bytes
255 heads, 63 sectors/track, 12 cylinders, total 200000 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
Disk identifier: 0x00017b69
Device Boot Start End Blocks Id System
rpi.img1 8192 122879 57344 c W95 FAT32 (LBA)
rpi.img2 122880 26746879 13312000 83 Linux
Observe que há uma discrepância aqui: os setores "Iniciar" e "Final" correspondem à tabela de partição original, mas o tamanho total das estatísticas no topo é de apenas 102 MB! Isso porque eu realmente usei count=200000
o parâmetro dd
porque realmente não queria me preocupar com uma cópia de 12 GB (observe também "total de 200000 setores"). A razão pela qual a tabela na parte inferior não reflete isso é porque o fdisk está obtendo suas informações dos dados da partição copiados literalmente no início da imagem desde o início do cartão SD, o que, como mencionei no segundo parágrafo, é vital manter. Se eu tivesse (adequadamente) copiado o resto, os números seriam copacéticos e a imagem seria viável.
Faça uma tentativa. :)