Raspberry

Como reduzir o sistema do Raspberry já instalado?

Selecionar modo de boot por GPIO Raspberry 3BT| ext to speech com Raspberry | Gerar binário a partir do script Python | resolvendo nomes | iniciar programa no boot | Multithread no Raspberry | Compilar programas escritos em Python

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:

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:

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

reduzir o sistema

 

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

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:

reduzir o sistema - dd

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.

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:

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

reduzir o sistema - loop

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:

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:

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:

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

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:

reduzir o sistema - gparted

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

 

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.

reduzir o sistema - partição

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

reduzir o sistema - novo tamanho

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:

reduzir o sistema - coletar informações

Dispense o dispositivo de loop, primeiramente:

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:

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

reduzir o sistema - truncate

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:

reduzir o sistema - partição do dispositivo

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.

reduzir o sistema - redimensionado

E o truncate:

reduzir o sistema - truncado

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:

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

reduzir o sistema - gravando sistema reduzido no sd

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:

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

reduzir o sistema - prova de conceito

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

Do bit Ao Byte é 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!

2 comments

Comments are closed.

%d blogueiros gostam disto: