Manual

do

Maker

.

com

Como reduzir o sistema do Raspberry já instalado?

Como reduzir o sistema do Raspberry já instalado?

Você vai lá no site, baixa um sistema com menos de 2GB, instala o Raspbian no SD e pronto. Se for um SD de 32GB, o sistema do Raspberry vai ficar com 32GB. Daí você quererá replicá-lo para outros Raspberry após ter configurado tudo e lá se vão 32GB do seu HD para o espaço. Por essa razão resolvi escrever sobre como reduzir o sistema do Raspberry já instalado.

Onde comprar Raspberry?

O Raspberry é o mesmo, de um só fabricante, mas diversas pessoas vendem. Minha recomendação é comprar com nosso parceiro CurtoCircuito, que proporcionou esse e outros artigos relacionados ao Raspberry. Assim você ajuda a fortalecer a parceria, retribuindo pela informação disponibilizada aqui, ok?

Dê uma chegada no site.

Porque reduzir o sistema do Raspberry?

Normalmente utilizo o Raspbian, baseado no Debian, que é um ótimo sistema operacional para quem vai usar o Raspberry para fins profissionais. O problema é que após instalarmos o sistema no SD, o sistema de arquivos é redimensionado no boot para ocupar todo o cartão. Claro que é útil. De outro modo, o redimensionamento seria uma tarefa manual, que muita gente não gostaria de fazer.

Quando temos um sistema de arquivo que queremos manipulá-lo, podemos utilizar ferramentas nativas do sistema de arquivos em questão. Permita-me deixar claro que estou referenciando o Linux.

Quando copiamos o sistema do SD para o HD, ainda que não houvesse o redimensionamento do sistema de arquivos, teriamos um arquivo resultante do tamanho do cartão SD. Já pensou instalar um sistema de 1.6GB e fazer um dump de 32GB para instalar depois em outro cartão? E tem outra questão;  a imagem gerada com um cartão maior não pode ser comportada por um cartão menor. Logo, se você tiver apenas um cartão de 32GB, quando for replicar precisará de um cartão igual ou maior que 32G.

Mas tem como resolver esse problema, como veremos agora.

Requisitos

Será necessário ter um Linux instalado, ainda que em dual boot com seu Windows. Não tem como escapar disso e não caia no mito de que Linux é difícil, porque não é. Aliás, é mais fácil que Windows, tanto para configurar dispositivos (onde a maioria deles tem suporte nativo) como para instalar programas (através dos repositórios, sem a necessidade de fazer downloads manuais).

Utilizaremos também o programa de manipulação de partições, o GParted. Mas não pule a leitura, os passos descritos a seguir são todos necessários.

Copiar o sistema já instalado do Raspberry

Coloque o cartão micro SD em um adaptador, seja USB ou slot de cartão e conecte-o ao seu computador com o sistema Linux. O Linux tem um recurso de auto-montagem de sistemas de arquivos. Isso significa que as duas partições existentes no micro SD serão disponibilizadas em /media/seu_usuario/boot/media/seu_usuario/rootfs. Será necessário "desmontar" ambos os sistemas de arquivos:

sudo umount /media/djames/rootfs
sudo umount /media/djames/boot

Para identificar o dispositivo do cartão micro SD, existem vários métodos. Use o comando dmesg para ver no log do sistema o evento do cartão:

dmesg | grep sd

Utilizando-o em conjunção ao comando grep, filtramos o conteúdo do log àquilo que nos interessa; o dispositivo e armazenamento:

dmesg.webp

 

Agora já identificado como sdb, podemos fazer o dump do cartão micro SD:

cd /tmp
mkdir SHRINK
cd SHRINK
sudo su
dd if=/dev/sdb of=original.img

Deve levar um longo tempo para copiar, não haverá mensagem nenhuma até o final do processo e não se preocupe; por mais que pareça, o processo não está travado. Vai demorar muito. Muito.

Quando essa parte do processo finalizar, o retorno será algo como:

dump-rpi.webp

Se obteve resultado similar ao tamanho do seu cartão micro SD, siga para o próximo passo.

Dispositivo de loopback

No Linux, os dispositivos são arquivos descritores. Isto é, se temos um SATA, encontraremos um arquivo no diretório /dev com o nome de sda. Se tivermos 2 SATAs, estarão lá em /dev/ os arquivos sdasdb. Já as partições são identificadas por números. Se temos apenas 1 partição em /dev/sda, então existirá o arquivo descritor /dev/sda1. O problema é que quando utilizamos uma imagem, teremos um único arquivo que no sistema operacional não será nada além disso; um arquivo. Para manipular um arquivo de imagem de sistema do Raspbian, precisaremos criar um dispositivo de loopback.

Carregar o módulo do kernel

Pode até ser que já esteja carregado, mas chamá-lo novamente não causará problemas e reduzirá o número de comandos necessários para verificar se ele está carregado, portanto, o primeiro passo é ganhar acesso de root e em seguida carregar o driver.

sudo su
modprobe loop

Ao digitar sudo su, será solicitada a senha de usuário. Entre com a mesma senha que usou como usuário comum.

Algumas pessoas estranham o comportamento de alguns comandos do Linux. Por exemplo, ao carregar o módulo loop nenhuma mensagem será retornada, exceto ocorra algum erro.

Requisitar um novo dispositivo de loopback

Supondo que tudo aconteceu como deveria até aqui, hora de requisitar um novo dispositivo de loopback:

losetup -f

Esse comando retornará o dispositivo de loopback disponibilizado. Algo como:

rpi-loop.webp

Aí estão todos os comandos utilizados até agora. A antepenúltima linha contém o comando supracitado, a penúltima é o retorno do comando, indicando o dispositivo de loop criado e a última linha não é nada apenas o shell, onde estou dentro do diretório menuConfig, que é parte de um projeto que estou trabalhando.

Criar o dispositivo da imagem

Agora vamos criar a representação do dispositivo, de modo que a imagem de dump se pareça com um HD/SSD:

losetup /dev/loop31 original.img

Atente-se aos detalhes; /dev/loop31 é o dispositivo que foi criado para mim, lembre-se de trocar pelo dispositivo de loop criado para você. Do mesmo modo, o arquivo de dump eu chamei de original.img e estou executando o comando acima no mesmo nível de diretório em que se encontra o arquivo. Basta que você execute o comando no mesmo lugar em que executou o comando de dump.

Avisar ao kernel sobre novos dispositivos

Como criamos manualmente o acesso ao dispositivo, precisamos informar ao kernel que existem novos dispositivos a serem gerenciados. Para isso:

partprobe /dev/loop31

Mais uma vez, troque o dispositivo de loop criado para o número que corresponda ao seu dispositivo. Não se espante se seu dispositivo de loop criado for loop0.

Redimensionar partição com GParted

Hora de começar. O primeiro passo é redimensionar a partição utilizando o gparted, mas isso ainda não vai reduzir o sistema, chegaremos lá. Provavelmente o GParted não está instalado no sistema, então execute os seguintes comandos:

apt-get update
apt-get install gparted

Após a instalação, execute-o sobre o dispositivo de loop criado por você. Ex.:

gparted /dev/loop31

A imagem desse meu cartão já é uma cópia de um sistema que estava em um cartão de 8GB. Após fazer uma cópia do sistema para o novo cartão, não fiz o redimensionamento. Assim sendo, tenho a partição de boot, a partição raiz e o espaço não alocado de 8GB, que é o espaço restante do cartão de 16GB:

partitions-rpi.webp

Saia do programa e agora aponte diretamente para a partição raiz.

gparted /dev/loop31p2

 

Clique com o botão direito sobre o sistema de arquivos raiz (a maior partição usada) e clique em Resize/Move. redimensione o máximo possível, depois deixe alguns MB sobrando.

resizing-rpi.webp

Após confirmar a mudança, teremos a seguinte tela:

before-apply-rpi.webp

Agora clique no "Check" verde para aplicar as modificações. Uma mensagem será mostrada, clique em Apply e aguarde o processo. Se der um erro, expanda a caixa de mensagens e veja se é algo relacionado ao tamanho mínimo. Vá aumentando a partição até que comporte o mínimo necessário.

Já podemos sair do programa.

Truncando a imagem (reduzir o sistema)

Vamos primeiramente reduzir a imagem para o tamanho original. No meu caso, era 8GB. Para isso, pegamos a informação de tamanho com o programa fdisk:

fdisk-partitions.webp

Dispense o dispositivo de loop, primeiramente:

losetup -d /dev/loop31

E agora, a partir das informações fornecidas pelo programa fdisk, pegamos o fim da partição e o tamanho do setor, então utilizando o programa truncate:

truncate --size=$[(15523839+1)*512] original.img

Note que a tabela de partições está marcando 7.4GB, é o que faremos agora; reduzir a imagem para o tamanho original:

truncate-shorter.webp

Mas a intenção é deixar apenas a área alocada. Não faz sentido deixar um monte de espaço vazio após o sistema de arquivos, certo? Vamos reduzir o sistema mais ainda. Então, remonte o dispositivo de loop seguindo os passos citados anteriormente e dessa vez, abra o dispositivo principal, /dev/loop31 no meu caso:

gparted-loop31.webp

Clique com o botão direito sobre a partição raiz (a maior) e redimensione-a para o mínimo possível. Clique novamente em Apply, ajuste até que o tamanho mínimo seja o suficiente e a operação seja concluída com sucesso. Agora saia do programa e repita o processo do fdisktruncate. Não esqueça de dispensar o dispositivo de loop também.

fdisk-shorter.webp

E o truncate:

truncate-shorter.webp

Humm, depois de tudo instalado no sistema, a imagem ficou com apenas 2.6GB. Incrível ou não?

Gravar Raspbian em um novo SD

Agora que você já tem a imagem pronta, pode seguir o procedimento padrão para instalar sua imagem em um novo cartão micro SD.

Pelo Linux, basta utilizar o dd:

dd if=imagem_nova.img of=/dev/sdb #supondo que sdb seja o cartão

Fui fazendo enquanto escrevia o artigo, aproveitando que havia a real necessidade de fazer esse redimensionamento.

dd-original.webp

Depois fiz o boot para testar a imagem.

Resize do sistema de arquivos

Após reduzir o sistema, será necessário expandí-lo. Depois de colocá-lo em um novo cartão, devemos  redimensionar o sistema de arquivos. Conectado ao Raspbian, utilize:

sudo raspi-config --expand-rootfs
sudo reboot

Não se preocupe com a mensagem que aparecerá na tela relacionado ao resize, vai funcionar.

resized.webp

Outras dicas importantes para Raspberry

No blog tem outro artigo importante de dúvidas corriqueiras, muito importante que sejam supridas. Esse artigo também tem dúvidas e erros comuns, recomendo fortemente a leitura.

Projetos para sua empresa

Manual do Maker é mais do que um blog. Somos uma empresa de serviços, cuja principal atividade é desenvolvimento e implementação de projetos embarcados e IoT. Trabalhamos dentro da legalidade, emitindo nota fiscal de serviço, elaboração de requisitos de sistema e documentação do código. Não importa onde você esteja, montamos a prova de conceito e gravamos vídeo do projeto antes de entregar o código e/ou hardware configurado.

Em parceria com a AFEletrônica, projetamos e produzimos hardware industrial (também com nota), para lhe entregar a melhor experiência para seu projeto. Entre em contato: vendas@afeletronica.com.br Ou direto comigo: djames.suhanko@gmail.com

Será um prazer tê-lo como nosso cliente!

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.