Manual
do
Maker
.
com
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.
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.
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á.
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.
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 bloco | PARTUUID=0fd336de-02 |
ponto de montagem | / |
sistema de arquivos | ext4 |
opções | defaults,commit=5,ro,noatime,nodiratime,errors=continue |
dump | 0 |
ordem | 1 |
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:
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.
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 /.
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.
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 noatime e nodirtime. 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.
Essa opção é utilizada para saber os sitemas de arquivos que precisam ser limpos. 0 é 'no dump'.
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.
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.
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.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.