Je courais un petit uClibc
et busybox
système embarqué basé sur un dispositif x86. J'utilise un initramfs mais je monte également un ext3
répertoire personnalisé sur un périphérique compact flash en mode IDE que j'utilise pour stocker des données d'enregistrement de mesure persistantes créées par une application c ++ écrite personnalisée. J'ai choisi le ext3
système de fichiers car il est recommandé pour la sécurité contre les pertes de puissance lors de l'utilisation de lecteurs CF en mode IDE dans quelques livres que j'ai lus ( Building Embedded Linux Systems par Karim Yaghmour et Embedded Linux Primer par Christopher Hallinan). Ceci est particulièrement important et les données sont essentielles.
Cependant, en raison de certains des commentaires de ma question précédente Confusion avec la façon de restaurer des fichiers ext3 corrompus en cas de panne de courant pendant l'écriture d'un fichier, il semblerait qu'en fait, ce système de fichiers n'offre pas la garantie de sécurité contre la corruption de données due à l'alimentation perte. Je voudrais donc savoir si
- Est-ce
ext3
réellement le meilleur choix pour cette configuration? - La perte de puissance pendant une opération d'écriture de disque ne corrompe-t-elle que périodiquement la partie des données que j'ajoute au fichier ou peut-elle corrompre l' intégralité du fichier?
- Les données qui ne sont pas écrites au moment de la coupure de courant sont-elles totalement sûres? En particulier, y a-t-il un risque que mon
initramfs.cpio
fichier soit également corrompu? - Existe-t-il une méthode que je peux utiliser dans mon code d'application pour protéger les données (c'est-à-dire créer une partition supplémentaire et écrire mes données pour refléter les images afin qu'il y ait toujours 2 copies) - la vitesse n'est pas un vrai problème pour mon application, des opérations de copie si coûteuses sont acceptables.
J'ai vu et lu les réponses à cette question connexe: les systèmes de fichiers de journalisation garantissent-ils contre la corruption après une panne de courant? , mais cela ne couvre pas tout à fait certaines des choses qui me déroutent.
Je me rends compte que je pose beaucoup de questions, mais il semble qu'en dépit de la lecture de beaucoup de documents, j'ai eu un échec fondamental à comprendre les risques pour mes données en cas de panne de courant.
la source
Il me semble que ce qu'une implémentation de système de fichiers peut réaliser en cas de coupure de courant soudaine est limité - après tout, il s'agit en fait d'une interface avec le matériel, alors que se passe-t-il entre le moment où il envoie des données / instructions au matériel et le moment où il obtient une réponse est hors de son contrôle. S'il y avait un système de fichiers qui pourrait contourner ce problème, vous en auriez entendu parler.
De ce fait, une stratégie de protection des données critiques bénéficiera le plus des décisions prises au niveau matériel , par exemple en utilisant une alimentation sans coupure. Ce n'est probablement pas si faisable dans votre situation.
Vous avez dit que les performances n'étaient pas vraiment un gros problème, alors utilisez-les judicieusement
fsync()
.J'utilise des systèmes de fichiers extN personnellement et sur des serveurs Internet à faible trafic depuis des années, et comme Alexios, je n'ai pas vu beaucoup de corruption due à une panne de courant (bien que pour être juste, les serveurs ont UPS et je ne me souviens pas l'un d'eux descend en fait de cette façon). Un problème beaucoup plus grave est la corruption due à une défaillance matérielle, qui différents systèmes de fichiers peuvent (encore) être de plus en moins capables de traiter le problème, mais (encore une fois) cela est fondamentalement indépendant de leur volonté et ils ne peuvent pas l'empêcher.
J'ai parfois vu des fichiers perdus ou tronqués à zéro. Je présume qu'il y a de fortes chances que ceux-ci soient récupérables d'une manière ou d'une autre; ce n'était pas nécessaire pour moi car ils étaient sauvegardés. La plupart du temps, s'il y a quelque chose qui ne va pas, cela
fsck
semble régler le problème.Je pense que le risque est vraiment très faible à cause d'une simple panne de courant, sauf que le type de stockage flash de corruption peut être sujet à cause de la surtension qui peut accompagner les pannes de courant - avec lesquelles je n'ai aucune expérience, mais j'espère que vous y avez pensé et fait des recherches sur cela.
Il vaut la peine de répéter le point sur fsync () . Les objets C ++ / iostream n'ont pas de méthode pour cela (:: flush et :: sync ne sont pas fsync), mais tout ce dont vous avez besoin est un descripteur de fichier.
la source
sync
option dans le/etc/fstab
fichier car je comprends que cela force l'écriture à se produire de manière synchrone. Je suppose que cela signifie que lorsque mon code d'écriture de fichier revient, les données ont été physiquement écrites sur le disque. J'ai compris que le montage avec faitsync
essentiellement la même chose que d'appelerfsync(my_filedescriptor)
après une écriture. Ma compréhension de cela est-elle correcte?fsync()
à des points que vous jugez appropriés ne nuira pas de toute façon et rend le système plus robuste (par exemple, si l'appareil est monté de manière décontractée sans jeu de synchronisation, etc.).ZFS est définitivement un système de fichiers protégé contre la corruption par sa conception et peut-être le seul. Cependant, je ne suis pas sûr de la disponibilité des implémentations ZFS (basées sur des fusibles ou natives) pour les plates-formes basées sur uClinux.
la source
Il existe au moins un système de fichiers commercial qui fait un travail formidable en s'assurant que le système de fichiers ne peut presque pas être corrompu en raison de pannes de courant et que les seules données que vous risquez de perdre sont des données qui ont été ajoutées lors de la coupure de courant.
L'inconvénient est qu'il est très cher, ils offrent un excellent soutien. En raison des dépenses, ce n'est vraiment qu'une option pour les produits à enjeux élevés et / ou à volume élevé. Tout comme les équipements embarqués critiques dans la production de pétrole et de gaz, par exemple, qui doivent garantir l'intégrité du système dans des conditions de fonctionnement "incertaines" (par exemple, coupures de courant fréquentes, etc.).
Découvrez DataLight (société) et / ou le produit " Reliance NITRO ". (Reliance est leur solution héritée et sûre mais pas très efficace, remplacée par Reliance NITRO ). Même si vous n'avez pas d'argent pour utiliser ce système, ils ont de très bons articles expliquant comment leur système fonctionne, pourquoi il est plus fiable que par exemple ext3 et ext4.
Je m'excuse si cela se lit comme une annonce, je voulais simplement souligner les options.
la source