web-dev-qa-db-fra.com

Système de fichiers de carte SD à la corruption anti-corruption pour Linux incorporé?

Récemment, nous avions une situation plutôt désagréable avec notre client - Raspberry Pi basé sur le "kiosque" utilisé pour afficher des données de télédétection (rien de plus de fantaisie qu'un navigateur en mode kiosque affichant une page Web à mise à jour automatique du serveur de collecte de données) n'a pas pu démarrer en raison de corruption du système de fichiers. EXT4, FSCK manuel requis, le système fera partie de la présentation importante de demain, le service requis immédiatement. Bien sûr, nous ne pouvons pas exiger que le client fermait bien le système lors de la mise hors tension de la nuit; Le système doit simplement résister à ce mauvais traitement.

J'aimerais éviter de telles situations à l'avenir, et j'aimerais déplacer le système d'exploitation vers un système de fichiers qui l'empêcherait. Il existe un groupe de systèmes de fichiers destinés aux périphériques MTD, où les amener à exécuter sur la carte SD (un dispositif de bloc standard) nécessite un obstacle de cerceau grave. Il existe également d'autres systèmes de fichiers (journalistes, etc.) qui offrent une bonne résistance à la corruption. J'ai encore besoin de voir une comparaison raisonnable de leurs avantages et de leurs inconvénients.

Quel système de fichiers disponible sous Linux fournirait la meilleure résistance à la corruption sur les défaillances de puissance inattendues et ne nécessite pas de sauter à travers des cerceaux impossibles tels que Yaffs2 afin d'installer sur SD.

L'équilibrage d'usure est un avantage, mais pas une exigence - les cartes SD ont généralement leurs propres mécanismes, si moins que parfaitement parfait, le système devrait être "doux pour Flash" (des systèmes tels que NTFS peuvent assassiner une carte SD dans un mois).

38
SF.

La meilleure résistance à la corruption sur une seule carte SD serait offerte par Btrfs in raid1 Mode avec gommage automatique à chaque période prédéfinie.

Les avantages:

  1. conserver la capacité de RW au système de fichiers
  2. système de fichiers modernes et entièrement présentés avec des options très utiles pour un RPI, comme une compression transparente et des instantanés
  3. conçu avec une mémoire flash dans l'esprit (entre autres choses)

Voici comment le faire :

J'exécute mon RamberrencePi sur Archam Linux et ma carte est dans le lecteur SD, modifiez donc ces instructions en conséquence pour d'autres distros et/dev interfaces.

Voici un exemple de layouche 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 si:

mkfs.btrfs -m raid1 -d raid1 /dev/mmcblk0p2 /dev/mmcblk0p3

Alors vous rsync -aAXv Pour informer votre système précédemment sauvegardé.

Pour l'obtenir pour démarrer de BTRFS dans RAID1, vous devez modifier initramfs. Par conséquent, vous devez effectuer ce qui suit pendant que vous avez toujours votre système sur votre ancien système de fichiers.

La framboise n'utilise pas normalement MKINITCPIO, vous devez donc l'installer. Ensuite, vous devez ajouter "BTRFS" au tableau de modules dans MKINITCPIO.CONF et recréez Initiramfs avec

mkinitcpio -g /boot/initrd -k YOUR_KERNEL_VERSION

Savoir quoi de taper au lieu de votre_kernel_version, courez

ls /lib/modules

(( Si vous mettez à jour le noyau, vous devez recréer InitiRAMFS 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 terminé tout cela et que vous avez démarré avec succès dans votre système BTRFS RAID1, la seule chose qui reste est de configurer un gommage périodique (tous les 3-7 jours), que ce soit avec la minuterie SystemD (préféré) ou Cron (DCRON), comme:

btrfs scrub start /

Il fonctionnera sur votre système de fichiers comparant les checksums de tous les fichiers et les fixera (remplacement par la copie correcte) s'il trouve une corruption.

La combinaison de BTRFS RAID1, à un moyen simple et de la framboise Pi rend cette jolie arcanique. Il a fallu du temps et travaille pour mettre toutes les morceaux ensemble, mais ici c'est.

17
lockheed

Stockage et flash est plus souhaitable que le stockage magnétique, pour de multiples raisons, mais pour cette application, je vais le dire 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 y a des systèmes de fichiers robustes (EXT4 étant une) là-bas, ainsi que certaines tactiques pour aider à atténuer la corruption.

Disque RAM

Si l'image du RPI ne le fait pas avez Pour changer, et ça sonne comme ça ne le fait pas, si rien ne tentera de (ou devrait essayer de) écrire sur le disque, essayez d'utiliser une racine. Système de fichiers créé pour être déballé dans la RAM . L'idée ici est que vous avez un système de fichiers racine compressé au démarrage qui obtient décompressé en RAM. Tous les changements se produisent sur RAM Disk, il existe donc une écriture efficace de zéro sur la carte SD, seulement la lecture au démarrage. Cela devrait réduire les lectures/écrit à votre lecteur, préservant la durée de vie de C'est similaire à ce qui est fait lorsque vous démarrez Linux d'un CD et est l'une des premières choses qui se produisent lorsque Linux bottes .

10
MDMoore313

J'irais un autre moyen et j'utiliserais simplement un système de fichiers en lecture seule. Je ne reçois jamais ma framboise Pi stable suffisamment stable lors de l'utilisation d'un système de fichiers racine en lecture-écriture sur la carte SDCARD. Vous pouvez simplement démarrer votre racine via le noyau cmdline (RO) ou utiliser un InitiRAMFS avec PIGGYBACK, y compris votre système complet.

Les deux sont possibles à créer avec mon système de construction maison openadk. ( http://www.openadk.org )

10
wbx

Eh bien, le problème que vous rencontrez ici est que l'utilisation d'un système de fichiers "moderne" tel que l'ext * est susceptible de porter votre carte SD en panne; De mon expérience qui se passe dans un an, ou l'année suivante si vous prenez le plus haut de gamme.

Le problème étant que les systèmes de fichiers modernes se déplacent toujours des blocs pour empêcher la fragmentation des données. Ce qui est une bonne chose sur les disques de filature, où vous souhaitez que toutes vos données soient rassemblées lors du chargement du cache. L'inconvénient est que cela fait plus d'écrit qui ne peut pas être mis en cache car le rangement est manipulé quand il n'y a pas beaucoup d'E/S qui se passe.

Il se passe également lorsque vous gérez beaucoup de journalisation, que vous voudrez peut-être faire lors du débogage de votre appareil intégré. Les écritures de journalisation sont les pires écritures, car il s'agit de beaucoup de minuscules écrivies se déroulant régulièrement, ce qui génère beaucoup de fragmentation.

Comme vous dites que votre système traite également les données du capteur, il est très probable que vous les stockiez sur le flash comme ils viennent. Et ils sont aussi mauvais que les données du journal.

Je suis allé dans le même problème que vous rencontrez, et voici mes conclusions. J'ai essayé de chercher des cartes SD qui seraient vendues comme étant "plus robustes", c'est-à-dire pouvoir gérer plus d'écritures que les autres, mais je n'ai trouvé aucun point de référence sur le marché qui se concentre sur cela, contrairement aux points de repère sur le SSD. Comme ils se concentrent tous sur la vitesse uniquement, il est impossible de connaître le nombre d'écritures par bloc de mémoire et la technologie utilisée dans la carte SDCard.

Cependant, j'ai remarqué que les sourdis "industriels" avaient une durée de vie plus longue qui no-noms. Ce qui n'est pas surprenant, quand vous payez plus, vous en avez plus.

Mais à la fin, avec une exploitation forestière intensive activée, je n'ai trouvé aucune carte SD ayant une durée de vie de plus de deux ans, une année étant où la mort se produit.

La solution que j'ai proposée est des solutions @ bighomie et @wbx ': utilisez un système de fichiers Extx en lecture seule (comme la journalisation n'est plus nécessaire, vous pouvez même revenir au bon vieux ext2). Et si vous souhaitez conserver des journaux dans la session ou écrire des fichiers temporaires, vous pouvez toujours utiliser un RAMDISK.

Il existe des tutoriels et des scripts uniquement qui permettent à peupler le ramdisk avec des données de l'intérieur des parties en lecture seule afin que vous puissiez les modifier pour la session.

N.B: Mon expérience utilise Angstrom Linux sur une BeagleBone, parmi une analyse d'essai de 20 périphériques de capteurs. La journalisation de ce système était très verbeuse, utilisant le système de journal de SystemD.

7
zmo

Linux offre de nombreux systèmes de fichiers. ext4 est celui que j'ai plus de confiance. En cas de doute, EXT4 doit être utilisé pour toute partition qui sera montée en lecture-écriture.

Le système de fichiers ext2 est beaucoup plus fragile. C'est un système de fichiers parfaitement bon pour les systèmes capables de la monter uniquement en lecture seule ou de la démonter correctement. Mais la corruption est extrêmement probable avec une panne de courant sur ext2.

L'autre option pourrait être envisagée JFS même si le système de fichiers JFS n'est pas fiable dans certaines versions Linux. La corruption est moins probable avec JFS qu'avec ext4. JFS est également doté d'une heure de montage rapide et d'un système de contrôle de fichier.

4
gbudan