Quando se faz necessário a cópia de um cartão com sistema operacional (com boot) é necessário realizar um processo de clonagem; este processo somente pode ser realizado para cartões de mesmo tamanho ou superior.
Abaixo descrevo os passos para adequar um arquivo de imagem clonado para tamanhos menores. Fonte de pesquisa: canal do youtube – Dušan Ogrizović
Passo 1: Clonar o cartão no HD
Criar um diretório para os arquivos de imagem
mkdir sd-image
Entrar no diretório
cd sd-image
Verificar o nome do cartão com o comando lsblk, a saída deverá ser algo do tipo:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931,5G 0 disk ├─sda4 8:4 0 9,3G 0 part [SWAP] ├─sda2 8:2 0 37G 0 part / ├─sda3 8:3 0 884,8G 0 part /home └─sda1 8:1 0 512M 0 part /boot/efi mmcblk0 179:0 0 7,4G 0 disk ├─mmcblk0p2 179:2 0 1K 0 part ├─mmcblk0p7 179:7 0 6G 0 part /media/xxx ├─mmcblk0p5 179:5 0 32M 0 part /media/yyyy ├─mmcblk0p1 179:1 0 1,2G 0 part └─mmcblk0p6 179:6 0 63M 0 part /media/boot
Gravar a imagem do SD no HD, utilizando o comando dd
sudo dd bs=4M if=/dev/mmcblk0 of=SD-image.img
Este processo poderá levar horas, dependendo da velocidade do cartão.
Passo 2: Editar a imagem do SD
Para ser possível editar o tamanho das partições da imagem será necessário associar o arquivo a um dispositivo do tipo loop (pseudo-dispositivo, usado em sistemas linux para permitir acesso como um dispositivo de bloco).
Associar o arquivo ao dispositivo /dev/loop0
sudo losetup /dev/loop0 SD-image.img
Informar ao sistema operacional a mudança na tabela de partições:
sudo partprobe /dev/loop0
Editar a imagem
Poderá ser feito por quaisquer meios, como sugestão o gparted.
sudo gparted /dev/loop0
Desmontar o dispositivo /dev/loop0:
sudo losetup -d /dev/loop0
Listar a tabela de partições da imagem
sudo fdisk -l SD-image.img
Disk SD-image.img: 15 GiB, 16156459008 bytes, 31555584 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: 0x0000d60b
Dispositivo Inicializar Start Fim Setores Size Id Tipo SD-image.img1 8192 2427734 2419543 1,2G e FAT16 W95 (LBA) SD-image.img2 2430976 15261695 12830720 6,1G 5 Estendida SD-image.img5 2433024 2498557 65534 32M 83 Linux SD-image.img6 2498560 2627583 129024 63M c W95 FAT32 (LBA) SD-image.img7 2629632 15258453 12628822 6G 83 Linux
Localizar o maior número do final de bloco
Neste exemplo: 15261695.
Redimensione a imagem
sudo truncate --size=$[(15261695+1)*512] rasp-dd.img
Como a contagem dos blocos começa com 0 é necessário adicionar 1.
Verifique o tamanho da nova imagem
ls -lh
Passo 3: Clonar o arquivo imagem no cartão SD
Copiar a imagem em um cartão SD de tamanho compatível
sudo dd bs=4M if=SD-image.img of=/dev/mmcblk0
Este processo poderá levar horas, dependendo da velocidade do cartão.
Passo 4: Redimensionar as partições no cartão SD
Finalmente, é possível usar o gparted para redimensionar diretamente no cartão as partições para otimizar o espaço.
Espero que seja útil!
Republicou isso em Convergência Tecnológicae comentado:
Dica muito útil para quem precisa redimensionar a imagem do SD da Raspberry!
Muito util foi seu artigo. Só nao entendi para que abrir o gparted se nao diz para fazer anda. mas eu fiz: redimencionei a particiao. Seria isso?
Para redimensionar e aproveitar o cartão por completo.
O comando para clonar a imagem para o SD é sudo dd bs=4M if=SD-image.img of=/dev/mmcblk0 (faltou o zero).
Obrigado, já está Ok.
O que seria esse bs=4M???
Block size.