Une perte d'alimentation inattendue peut-elle endommager une installation Linux?

22

Je développe une application sur une carte embarquée Linux (tourne sous Debian) par exemple Raspberry Pi, Beagle Board / Bone ou olimex. Les cartes fonctionnent dans un environnement où l'électricité est coupée de manière inattendue (il est bien compliqué de placer le bloc d'alimentation, etc.) et cela se produirait chaque jour quelques fois. Je me demande si les coupures de courant inattendues causeraient un crash / problème sur le système d'exploitation Linux? Si c'est quelque chose que je dois inquiéter, que suggéreriez-vous pour éviter les dommages sur OS contre les coupures de courant inattendues?

PS. L'application doit écrire des données sur le support de stockage (carte SD), je pense qu'il ne serait pas approprié de les monter en lecture seule.

Percée
la source
1
Restez à l'écart de ext2 (utilisez ext3 ou supérieur) sur les systèmes de fichiers que vous modifiez beaucoup, et vous devriez être OK pour la plupart.
LawrenceC
Sauf si vous faites très attention à spécifier vos cartes SD, les cartes ne garantissent rien si vous coupez l'alimentation de manière inattendue. La carte pourrait être au milieu d'un mouvement de mise à niveau d'usure, conduisant à une corruption étrange et inattendue, qui pourrait même être dans une partition différente!
derobert
Je ne sais pas exactement comment le faire, mais vous voudrez peut-être envisager de baser vos transactions sur les applications clés. De cette façon, vous pouvez avoir votre fichier actuel et une sauvegarde. Vous appliquez les transactions à votre fichier actuel et si cela échoue, vous pouvez restaurer le fichier actuel à partir de la sauvegarde et réappliquer les transactions. Si vous basculez entre l'actuel et la sauvegarde à l'aide de liens symboliques ou de permutation de noms de fichiers, cela peut se produire très rapidement avec beaucoup moins de risques d'erreur qu'avec la copie. Après une mise à jour réussie, votre fichier actuel devient votre sauvegarde et la sauvegarde devient l'actuelle.
Joe
A continué. Cela fonctionne presque. Le nouveau fichier actuel nécessiterait également que les transactions lui soient appliquées, ce qui nécessiterait de les traiter deux fois, donc je suis sûr qu'il existe un meilleur moyen. Dans tous les cas, cela peut être beaucoup plus rapide et plus sûr que de copier le fichier entier s'il est volumineux.
Joe

Réponses:

14

Des coupures de courant inattendues peuvent endommager les données du système de fichiers - par exemple, si un processus a commencé à écrire dans un fichier, mais pas encore fini de l'écrire, le fichier peut ne finir qu'à moitié écrit. Imaginez maintenant si la coupure de courant se produit lorsque vous êtes à mi-chemin d'une mise à niveau du noyau ...

Comme l'a écrit l0b0, l'utilisation d'un système de fichiers de journalisation sera utile, car il pourra suivre ce qui a réellement été fait. En plus de l'info wikipedia qui l0b0 lié, vous pouvez être intéressé par /unix/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure aussi bien .

En tant que programmeur, vous devez évidemment réfléchir soigneusement à la façon de gérer l'écriture dans des fichiers afin que cela devienne un processus atomique (c'est-à-dire qu'il soit entièrement terminé ou pas du tout, mais jamais à moitié fait). C'est une question assez complexe.

Jenny D
la source
10
Le processus général dans le code de protection contre les interruptions d'écriture qui corrompent un fichier est qu'au lieu de modifier directement file.name, vous écrivez à la place un tout nouveau fichier file.name.newversion, puis utilisez les commandes delete / rename pour remplacer l'ancienne version par le nouveau. Vous devez ajouter du code de nettoyage pour récupérer d'une interruption à chaque étape; mais cette approche laisse toujours une bonne copie du fichier sur le disque. Cela peut avoir un impact sur votre conception, car il effectue une mise à jour médiocre de fichiers volumineux uniques ou des modifications fréquentes d'un fichier unique.
Dan Neely
11

Pour aider à minimiser la possibilité de corruption du système d'exploitation, il est probablement préférable d'avoir des partitions "système" et "données" séparées sur la carte SD. De cette façon, vous pouvez monter la partition "système" en lecture seule et utiliser un FS hautement résilient sur la partition "données".

De plus, la plupart de ces cartes ont des besoins en énergie très faibles, donc une batterie de secours est possible. La carte «LiPo rider» pour le Raspberry Pi peut être utilisée comme onduleur de base pour fournir un arrêt net en cas de coupure de courant.

Stu
la source
5

Cela dépendrait de

  1. si vous utilisez un système de fichiers de journalisation et
  2. la capacité des applications à gérer le traitement interrompu.

Considérons par exemple une application qui traite un fichier et écrit les résultats au fur et à mesure qu'ils sont calculés (une ligne de sortie par ligne d'entrée) dans un autre fichier. Si l'alimentation est coupée pendant le traitement et que la même application est exécutée après le redémarrage, elle ne peut pas simplement redémarrer le traitement depuis le début du fichier d'entrée - cela signifierait que le fichier de sortie contiendrait des informations en double.

Il pourrait être très difficile de dire quoi que ce soit de définitif sur un système complexe hypothétique, mais la plupart des logiciels Linux stables semblent être capables de gérer très bien les plantages.

l0b0
la source
1

Étant donné que personne n'a mentionné de systèmes de fichiers spécifiques: les systèmes de fichiers plus modernes (ext3, ext4, ntfs) sont capables de gérer les plantages bien mieux que les anciens systèmes de fichiers (ext2, ext, fat32) en raison de la journalisation .

En supposant que le disque dur ne plante pas et ne ment pas , une panne de courant complète ne devrait pas corrompre le système de fichiers. Les fichiers individuels qui étaient en cours d'écriture peuvent cependant être corrompus, donc si vous étiez en train de mettre à jour le système d'exploitation lorsque la panne de courant s'est produite, il est toujours possible de le faire.

BlueRaja - Danny Pflughoeft
la source