La meilleure résistance contre la corruption sur une seule carte SD serait offerte par BTRFS en RAID1 mode avec nettoyage automatique exécuté à chaque période de temps prédéfinie.
Les avantages :
- conserver la capacité de RW au système de fichiers
- système de fichiers moderne et complet avec des options très utiles pour un RPi, comme la compression transparente et les instantanés
- conçu avec la mémoire flash à l'esprit (entre autres)
Voici comment procéder :
J'exécute mon RaspberryPi sur ArchARM Linux et ma carte est dans le lecteur SD, alors modifiez ces instructions en conséquence pour les autres distributions et interfaces /dev.
Voici un exemple de disposition de partition :
/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
Pour obtenir btrfs dans RAID1, vous créez le système de fichiers comme suit :
mkfs.btrfs -m raid1 -d raid1 /dev/mmcblk0p2 /dev/mmcblk0p3
Alors vous rsync -aAXv
à votre système précédemment sauvegardé.
Pour le faire démarrer à partir de BTRFS en raid1, vous devez modifier initramfs . Par conséquent, vous devez effectuer les opérations suivantes pendant que votre système fonctionne toujours sur votre ancien système de fichiers.
Raspberry n'utilise normalement pas mkinitcpio, vous devez donc l'installer. Ensuite, vous devez ajouter "btrfs" au tableau MODULES dans mkinitcpio.conf et recréer initramfs avec
mkinitcpio -g /boot/initrd -k YOUR_KERNEL_VERSION
Pour savoir quoi taper à la place de YOUR_KERNEL_VERSION, exécutez
ls /lib/modules
Si vous mettez à jour le noyau, vous DEVEZ recréer initramfs AVANT de redémarrer.
Ensuite, vous devez modifier les fichiers de démarrage de RPi.
Dans cmdline.txt, vous devez avoir
root=/dev/mmcblk0p2 initrd=0x01f00000 rootfstype=btrfs
et dans config.txt, vous devez ajouter
initramfs initrd 0x01f00000
Une fois que vous avez fait tout cela et que vous avez démarré avec succès votre système btrfs RAID1, il ne vous reste plus qu'à configurer un nettoyage périodique (tous les 3 à 7 jours) soit avec systemd timer (préféré), soit avec cron (dcron) comme ceci :
btrfs scrub start /
Il s'exécutera sur votre système de fichiers en comparant les sommes de contrôle de tous les fichiers et en les corrigeant (en les remplaçant par la copie correcte) s'il détecte une corruption.
La combinaison de BTRFS RAID1, d'un support unique et de Raspberry Pi en fait un truc assez mystérieux. Il a fallu du temps et du travail pour assembler toutes les pièces, mais voilà.
J'irais d'une autre manière et j'utiliserais simplement un système de fichiers en lecture seule. Je n'obtiens jamais mon raspberry pi assez stable lorsque j'utilise un système de fichiers racine en lecture-écriture sur la carte SD. Vous pouvez soit démarrer votre racine via la ligne de commande du noyau (ro), soit utiliser un initramfs avec ferroutage incluant votre système complet.
Les deux sont possibles à créer avec mon système de construction maison OpenADK.(http://www.openadk.org)
Eh bien, le stockage flash est plus souhaitable que le stockage magnétique, pour plusieurs raisons, mais pour cette application, je dirai principalement parce qu'il n'y a pas de pièces mobiles. Cela étant dit, je ne pense pas qu'il existe un système de fichiers "anti-corruption", mais il existe des systèmes de fichiers robustes (ext4 en étant un), ainsi que des tactiques pour aider à atténuer la corruption.
Disque RAM
Si l'image du RPi n'a pas à changer, et il semble que ce ne soit pas le cas, si rien n'essaie (ou ne devrait essayer) d'écrire sur le disque, essayez d'utiliser un système de fichiers racine créé pour être décompressé dans la RAM. L'idée ici est que vous avez un système de fichiers racine compressé au démarrage qui est décompressé dans la RAM. Toutes les modifications se produisent sur le disque RAM, il n'y a donc aucune écriture sur la carte SD, lecture uniquement au démarrage. cela devrait réduire les lectures/écritures sur votre disque, en préservant sa durée de vie. Ceci est similaire à ce qui se fait lorsque vous démarrez Linux à partir d'un CD, et c'est l'une des premières choses qui se produisent lorsque Linux démarre.