A melhor resistência contra a corrupção em um único cartão SD seria oferecida pelo modo BTRFS em RAID1 com execução automática em cada período predefinido de tempo.
Os benefícios:
- capacidade de retenção para o RW para o sistema de arquivos
- sistema de arquivos moderno e com todos os recursos, com opções muito úteis para um RPi, como compactação transparente e instantâneos
- projetado com memória flash em mente (entre outras coisas)
Veja como fazer isso:
Eu corro meu RaspberryPi no ArchARM linux e meu cartão está no leitor SD, então modifique essas instruções de acordo com outras distribuições e interfaces / dev.
Aqui está um exemplo de layout de partição:
/dev/mmcblk0p1: fat32 boot partition
/dev/mmcblk0p2: to be used as btrfs partition
/dev/mmcblk0p3: to be used as btrfs partition (mirrored with the above)
/dev/mmcblk0p4 (optional): swap
Para obter o btrfs no RAID1, você cria o sistema de arquivos da seguinte forma:
mkfs.btrfs -m raid1 -d raid1 /dev/mmcblk0p2 /dev/mmcblk0p3
Em seguida, você rsync -aAXv
é o sistema que você salvou anteriormente.
Para conseguir inicializar a partir do BTRFS no raid1, você precisa modificar o initramfs . Portanto, você precisa fazer o seguinte enquanto ainda tem seu sistema em execução no seu antigo sistema de arquivos.
O Raspberry normalmente não usa o mkinitcpio, portanto você deve instalá-lo. Então, você precisa adicionar “btrfs” ao array MODULES no mkinitcpio.conf e recriar o initramfs com
mkinitcpio -g /boot/initrd -k YOUR_KERNEL_VERSION
Para saber o que digitar em vez de YOUR_KERNEL_VERSION, execute
ls /lib/modules
Se você atualizar o kernel, você DEVE recriar o initramfs ANTES de reinicializar.
Depois, você precisa modificar os arquivos de inicialização do RPi.
No cmdline.txt, você precisa ter
root=/dev/mmcblk0p2 initrd=0x01f00000 rootfstype=btrfs
e no config.txt, você precisa adicionar
initramfs initrd 0x01f00000
Uma vez que você tenha feito tudo isso e inicializado com sucesso no seu sistema RAID1 btrfs, a única coisa que resta é configurar a limpeza periódica (a cada 3-7 dias) com timer systemd (preferido) ou cron (dcron) como então:
btrfs scrub start /
Ele será executado em seu sistema de arquivos comparando as somas de verificação de todos os arquivos e corrigindo-os (substituindo-os pela cópia correta) se encontrar algum dano.
A combinação de BTRFS RAID1, single medium e Raspberry Pi faz essa coisa bem misteriosa. Demorou algum tempo e trabalho para juntar todas as peças, mas aqui está.