Manual

do

Maker

.

com

Como proteger o micro SD do Raspberry Pi

Como proteger o micro SD do Raspberry Pi

Tem uma frase que diz que "mais importante do que saber fazer é ter o telefone de quem saiba". Bem, eu tenho telefone, whatsapp, messenger e endereço de vários especialistas em áreas específicas, assim monto um time forte pra quando preciso desenvolver alguma tarefa complexa.

Dessa vez estou passando essa dica generosa que é experiência do Leonardo Lontra. Se você usa OpenCV, deve ter visto o nome dele em algum patch já. Essa dica é fundamental para quem quer preservar o cartão de sistema que, pra quem usa Raspberry a algum tempo, sabe que inevitavelmente o sistema de arquivos se corrompe.

O Leonardo Lontra tem algumas centenas (mais de 700) Raspberry Pi rodando 24x7 fazendo processamento continuo. Obviamente que nessa intensidade o sistema precisava ser reinstalado em poucos meses. Mas para toda a solução, primeiro vem a necessidade. E após cansar de ser escravo do sistema, desenvolveu uma solução fantástica para proteger o sistema do Raspberry Pi, que já há mais de 2 anos não tem apresentando 1 problema sequer. Quer proteger a sua também? Então vamos à solução.

Atenção

Essa solução só funciona em sistemas que tenham o systemd. Se, por exemplo,  estiver usando o Raspbian baseado no Wheezy ou Jessie, não vai funcionar.

Protegendo o sistema de arquivos

O que acaba com o cartão é o I/O. Tudo bem, você pode dizer que "o cartão foi feito para X centenas de milhares de leituras e escritas", mas existem muitas variáveis para gerar problemas. Por exemplo, aquecimento do cartão - quanto maior o I/O, maior será o aquecimento, que também reduz a vida útil do cartão. E claro, isso é quase inevitável. Mas quanto menos escrita tiver, melhor. E para evitar essas escritas, alguns parâmetros podem ser adicionados à tabela de  sistemas de arquivos, que faz a montagem das partições do sistema e dos sistemas de arquivos virtuais. Isso você já pode estar fazendo provavelmente, ainda mais se tem intimidade com Linux. Porém, já pensou se a raiz do sistema fosse read-only? Bem, amiguinho, pois será.

Modificando o fstab

Primeira coisa importante a citar:

Não reinicie o Raspberry até o final do processo.

Segunda coisa importante a citar:

Essa solução está modelada para funcionar no Raspbian baseado na versão Stetch do Debian.

Tendo exclarecido, siga por sua conta e risco, porque se você errar o processo, com certeza vai ficar triste.

Edite o fstab e modifique os parâmetros opcionais da montagem da raíz do sistema. Deixe-me fazer uma breve introdução sobre o fstab primeiro, porque talvez você não tenha intimidade com Linux mas ainda assim pode pretender utilizar essa solução.

fstab-rpi.webp

Esse é o meu fstab no Raspberry Pi 2 rodando a última versão do Raspbian. Esse arquivo fica em /etc e é fundamental para a inicialização do sistema. O formato dele é o seguinte:

dispositivo de blocoPARTUUID=0fd336de-02
ponto de montagem/
sistema de arquivosext4
opçõesdefaults,commit=5,ro,noatime,nodiratime,errors=continue
dump0
ordem 1

Dispositivos de bloco

O primeiro campo é a partição. Dispositivos de bloco são dispositivos de armazenamento. Dispositivos de caractere são dispositivos de entrada como mouse e teclado.

Para identificar essa diferença, podemos digitar o comando 'ls -l /dev'. A primeira letra que aparece no começo da linha identifica o tipo do arquivo descritor (porque em Linux tudo é arquivo). Por exemplo:

deviceType.webp
O dispositivo random é um dispositivo de caractere e a ram9 é do tipo de dispositivo de bloco. Em azul, um diretório.

No meu caso, estou utilizando UUID para identificar a partição relacionada ao sistema, mas não haveria problema algum se estivesse apontando diretamente para o dispositivo real que está em /dev.

Ponto de montagem

O ponto de montage é o local onde os arquivos estarão acessíveis para leitura e/ou escrita. Como é a raíz do sistema, ele é identificado por /.

Sistema de arquivos

O kernel precisa saber qual sistema de arquivos ele deverá utilizar para fazer a montagem da partição. Como o padrão é ext4 para a raiz, lá está ela. porém, se você estiver utilizando outras partições para propósitos específicos, você pode adicionar até sistemas de arquivos da Microsoft ou ainda, sistemas de arquivos de rede, como SAMBA e NFS. Mas isso fica pra outro artigo.

Opções de montagem

Algumas opções já estarão lá por padrão, como defaults. Aqui estão adicionadas algumas outras opções importantíssimas para evitar escrita no cartão, como noatimenodirtime. Com isso não serão escritos no disco as modificações de cada arquivo nas informações do sistema de arquivos e ganhasse tanto em desempenho quanto em redução de escrita. Em contrapartida, isso é extremamente danoso para um processo pericial, mas isso também é coisa para outro artigo. O mais importante a se notar aqui é a ousadia de passar a raiz do sistema para read-only com a opção ro. Porém para fazer isso é necessário permitir a escrita em alguns pontos específicos do sistema, como veremos mais adiante.

Dump

Essa opção é utilizada para saber os sitemas de arquivos que precisam ser limpos. 0 é 'no dump'.

Ordem de inicialização

Esse campo define a ordem em que os sistemas de arquivos devem ser montados. Por exemplo, você pode montar um sistema de arquivos em rede dentro de um diretório que dá acesso a m HD externo para compartilhar mídia. Obviamente o dispositivo de midia deve existir previamente para só então disponibilizá-lo na rede. No caso da raíz do sistema (que é onde está todo o sistema, com excessão de /boot), ele é o primeiro a ser montado. Se você reparar, /proc está com o valor 0, que significa que não deve ser passado o fsck. Faz todo o sentido, porque /proc é um sistema de arquivos virtual de processos do sistema, gerenciado pelo kernel.

Resumindo, modifique apenas os parâmetros do seu arquivo fstab para que possamos continuar a mágica.

Especificando os sistemas de arquivos que devem ser RW

Como citando anteriormente, alguns sistemas de arquivos precisarão de permissão de escrita. Dá pra fazer manualmente, caso você esqueça ou caso precise modificar depois durante o uso, mas crie esse padrão inicial:

DIRS="/var /etc /root"

Basta criar um arquivo chamado dirrw.conf em /etc/defaults/. Esse diretório é utilizado para especificar o comportamento padrão de alguns serviços. Mas ainda não acabou.

Serviço de conversão RW/RO

Agora vamos criar um serviço no systemd. Para isso, crie o arquivo /lib/systemd/system/makepartro.service com o seguinte conteúdo:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it                                                                                                                                                                        
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Make read-only fs
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c "source /etc/default/dirrw.conf ; for d in $DIRS; do mount $d $d -o bind,ro && mount $d -o remount,rw ; done"
RemainAfterExit=yes

[Install]
WantedBy=local-fs.target

Então habilite seu novo serviço de sistema:

systemctl enable makepartro

Pronto, agora mesmo com queda de energia o sistema de arquivos do cartão estará protegido.

Reinicie o sistema e, 'vida longa ao Rei spberry'!

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.