{"id":1048,"date":"2011-08-05T11:00:21","date_gmt":"2011-08-05T10:00:21","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=1048"},"modified":"2017-06-05T03:19:12","modified_gmt":"2017-06-05T02:19:12","slug":"crash-systeme-et-recuperation","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2011\/08\/05\/crash-systeme-et-recuperation\/","title":{"rendered":"Crash syst\u00e8me et r\u00e9cup\u00e9ration"},"content":{"rendered":"<p style=\"text-align: center;\"><em><strong>Kernel panic &#8211; not syncing: No init found<\/strong>.<\/em><\/p>\n<p style=\"text-align: justify;\">J&rsquo;indiquais dans un article pr\u00e9c\u00e9dent (\u00e0 la fin de \u00ab\u00a0<a title=\"Construire son syst\u00e8me personnel sur une carte Pandaboard (1)\" href=\"http:\/\/www.blaess.fr\/christophe\/2011\/05\/06\/construire-son-systeme-personnel-sur-une-carte-pandaboard\/\">Construire son syst\u00e8me personnel pour Pandaboard &#8211; 1<\/a>\u00ab\u00a0)\u00a0 que ce message \u00e9tait pour moi une excellente nouvelle, car il indiquait que le noyau avait correctement d\u00e9marr\u00e9, identifi\u00e9 les p\u00e9riph\u00e9riques et trouv\u00e9 son syst\u00e8me de fichiers initial. Une excellente nouvelle lorsqu&rsquo;on construit un syst\u00e8me embarqu\u00e9. Pas lorsque le message se pr\u00e9sente sur <strong>mon poste de travail principal<\/strong> ! Voici donc une m\u00e9saventure qui m&rsquo;est arriv\u00e9 cette semaine.<\/p>\n<p>\n<!--more-->\n<\/p>\n<h1>Circonstances<\/h1>\n<p style=\"text-align: justify;\">Apr\u00e8s une longue journ\u00e9e de d\u00e9veloppement logiciel, de r\u00e9daction d&rsquo;un chapitre de mon prochain livre, et de configuration d&rsquo;un syst\u00e8me <em>live<\/em> Gnu\/Linux dont je vous reparlerai prochainement, j&rsquo;allais lancer la sauvegarde quotidienne de mon r\u00e9pertoire personnel sur le serveur lorsqu&rsquo;un <em>popup<\/em> attire mon regard, indiquant que des mises \u00e0 jour \u00e9taient disponibles pour quelques dizaines de <em>packages<\/em> de la Fedora 15 que j&rsquo;utilise. Je valide alors naturellement le t\u00e9l\u00e9chargement et la mise \u00e0 jour de ces packages, tout en fermant mes derni\u00e8res applications. Le syst\u00e8me de mise \u00e0 jour m&rsquo;a demand\u00e9 la confirmation pour l&rsquo;installation d&rsquo;une nouvelle version du kernel Linux, ce que j&rsquo;ai accept\u00e9.<\/p>\n<p style=\"text-align: justify;\">Puis, j&rsquo;ai quitt\u00e9 l&rsquo;\u00e9cran des yeux pendant quelques instants, pour pr\u00e9parer la synchronisation de mon r\u00e9pertoire personnel sur un ordinateur portable. J&rsquo;ignore quelle \u00e9tait exactement la t\u00e2che de mise \u00e0 jour en cours lorsque j&rsquo;ai aper\u00e7u l&rsquo;\u00e9cran de mon poste de travail s&rsquo;\u00e9teindre. Ce dernier allait apparemment red\u00e9marrer tout seul, ce qui m&rsquo;a l\u00e9g\u00e8rement surpris, mais la mise \u00e0 jour du noyau n\u00e9cessite \u00e9videmment un <em>reboot<\/em> du syst\u00e8me.<\/p>\n<p style=\"text-align: justify;\">\u00a0Sauf que ce <em>reboot<\/em> s&rsquo;est mal termin\u00e9&nbsp;! Le message classique du \u00ab\u00a0kernel panic\u00a0\u00bb indiquant qu&rsquo;il ne pouvait charger le programme <em>init<\/em> est apparu. J&rsquo;ai donc essay\u00e9 successivement un <em>reboot<\/em> \u00e0 froid &#8211; ordinateur totalement \u00e9teint puis rallum\u00e9 &#8211; puis un red\u00e9marrage sur les versions pr\u00e9c\u00e9dentes du noyau (dans le menu de choix de Grub), rien n&rsquo;y fit le syst\u00e8me restait incapable de trouver son programme <em>init<\/em>. J&rsquo;ai tent\u00e9 de red\u00e9marrer en mode mono-utilisateur en ajoutant (avec le menu Grub) sur la ligne de commande du kernel l&rsquo;option \u00ab\u00a0<code>single<\/code>\u00ab\u00a0.<\/p>\n<p style=\"text-align: justify;\">Le fichier <code>\/sbin\/init<\/code> (qui correspond sur les Fedora 15 \u00e0 un lien symbolique vers <code>\/bin\/systemd<\/code>) aurait pu \u00eatre endommag\u00e9, aussi ai-je tent\u00e9 sans grande conviction d&rsquo;ajouter l&rsquo;option <code>init=\/bin\/sh<\/code> sur la ligne de d\u00e9marrage du kernel. En vain.<\/p>\n<h1>Diagnostic<\/h1>\n<p style=\"text-align: justify;\">Arriv\u00e9 \u00e0 ce point, une touche d&rsquo;angoisse commen\u00e7ait \u00e0 poindre. Ce poste de travail ne comporte que deux partitions&nbsp;: la premi\u00e8re contient le syst\u00e8me Linux Fedora proprement dit et la seconde mon r\u00e9pertoire de travail personnel. Je ne pouvais m&#8217;emp\u00eacher d&rsquo;imaginer la sauvegarde p\u00e9nible du contenu de cette partition \u00e0 l&rsquo;aide d&rsquo;un outil de r\u00e9cup\u00e9ration plus ou moins convivial, suivi d&rsquo;une r\u00e9installation du syst\u00e8me.<\/p>\n<p style=\"text-align: justify;\">En analysant la situation, on peut quand m\u00eame d\u00e9duire quelques \u00e9l\u00e9ments&nbsp;:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Le bootloader fonctionne correctement et charge le noyau, ce n&rsquo;est donc pas un probl\u00e8me de disque ou de partition.<\/li>\n<li style=\"text-align: justify;\">Le noyau d\u00e9marre <em>a priori<\/em> normalement et ne panique qu&rsquo;au moment de lancer le processus <em>init<\/em>. Le comportement est le m\u00eame pour les deux versions pr\u00e9c\u00e9centes du kernel, ce n&rsquo;est donc pas li\u00e9 au noyau Linux lui-m\u00eame.<\/li>\n<li style=\"text-align: justify;\">Le processus <code>\/sbin\/init<\/code> ne d\u00e9marre pas, non plus que <code>\/bin\/sh<\/code>. Il y a tr\u00e8s peu de chances que ces deux ex\u00e9cutables aient \u00e9t\u00e9 endommag\u00e9s simultan\u00e9ment. Dans le doute je pourrais toujours essayer ult\u00e9rieurement avec d&rsquo;autres commandes comme <code>\/bin\/ls<\/code>, etc.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Mes soup\u00e7ons se port\u00e8rent alors sur les biblioth\u00e8ques. Il suffit que la biblioth\u00e8que C par exemple soit endommag\u00e9e pour qu&rsquo;aucun ex\u00e9cutable ne fonctionnent hormis ceux dont l&rsquo;\u00e9dition des liens a \u00e9t\u00e9 r\u00e9alis\u00e9e de mani\u00e8re statique, mais il n&rsquo;y en a pratiquement plus dans les distributions classiques actuelles. Pour v\u00e9rifier cela, il faut d\u00e9j\u00e0 acc\u00e9der \u00e0 la partition syst\u00e8me incrimin\u00e9e.<\/p>\n<p style=\"text-align: justify;\">J&rsquo;ai d\u00e9marr\u00e9 sur un CD-Rom Fedora 15 <em>live<\/em> que j&rsquo;avais grav\u00e9 il y a quelques temps pour mettre mon syst\u00e8me \u00e0 jour. Je conseille vivement de toujours disposer d&rsquo;un CD <em>live<\/em> relativement r\u00e9cent pour ce genre de situation o\u00f9 la tension nerveuse aidant on n&rsquo;a aucune envie de devoir t\u00e9l\u00e9charger et graver une nouvelle image dans l&rsquo;urgence.<\/p>\n<p style=\"text-align: justify;\">Une fois le syst\u00e8me <em>live<\/em> en fonctionnement, j&rsquo;ai mont\u00e9 manuellement les deux partitions de mon disque dur sur deux r\u00e9pertoires temporaires. J&rsquo;ai examin\u00e9 rapidement le contenu des r\u00e9pertoires <code>\/bin<\/code>,\u00a0 <code>\/sbin<\/code>, <code>\/etc<\/code>, et <code>\/lib<\/code> avec la commande \u00ab\u00a0<code>ls -lrt<\/code>\u00a0\u00bb qui pr\u00e9sente le contenu des r\u00e9pertoires class\u00e9 par ordre chronologique. Les derniers fichiers list\u00e9s sont les plus r\u00e9cemment modifi\u00e9s. L&rsquo;erreur est apparue rapidement&nbsp;:<\/p>\n<p>&nbsp;<\/p>\n<pre># <strong>cd \/mnt\/sda1\/lib<\/strong>\n# <strong>ls -lrt<\/strong>\n[...]\n-rwxr-xr-x.  1 root root     <strong>0<\/strong>  3  juin 16:52 libgcc_s-4.6.0-20110603.so.1\nlrwxrwxrwx.  1 root root    28  4  ao\u00fbt 05:25 libgcc_s.so.1 -&gt; libgcc_s-4.6.0-20110603.so.1\n# <strong> ls -l libgcc*<\/strong>\n-rwxr-xr-x.  1 root root 115328 30 mai  20:48 libgcc_s-4.6.0-20110530.so.1\n-rwxr-xr-x.  1 root root      0  3 juin 16:52 libgcc_s-4.6.0-20110603.so.1\nlrwxrwxrwx.  1 root root     28  4 ao\u00fbt 05:25 libgcc_s.so.1 -&gt; libgcc_s-4.6.0-20110603.so.1\n#<\/pre>\n<p style=\"text-align: justify;\">Visiblement la mise \u00e0 jour de la bibioth\u00e8que <em>libgcc<\/em> ayant \u00e9chou\u00e9, le fichier vis\u00e9 par le lien symbolique est vide.\u00a0 Ceci explique que le d\u00e9marrage des ex\u00e9cutables soit impossible.<\/p>\n<h1>R\u00e9cup\u00e9ration<\/h1>\n<p>On peut d\u00e9j\u00e0 corriger partiellement le probl\u00e8me en redirigeant le lien symbolique vers la version pr\u00e9c\u00e9dente.<\/p>\n<pre>#<strong> ln -sf libgcc_s-4.6.0-20110530.so.1 libgcc_s.so.1<\/strong><\/pre>\n<p style=\"text-align: justify;\">Puis, pour v\u00e9rifier le fonctionnement, je tentai un d\u00e9placement <em>chroot<\/em> vers ma partition syst\u00e8me.<\/p>\n<pre># <strong>chroot \/mnt\/sda1<\/strong>\n#<\/pre>\n<p style=\"text-align: justify;\">Ceci fonctionna et les utilitaires classique (<code>ls<\/code>, <code>df<\/code>, <code>rpm<\/code>) march\u00e8rent correctement.<\/p>\n<p style=\"text-align: justify;\">Toutefois, le probl\u00e8me \u00e9tant survenu lors d&rsquo;une mise \u00e0 jour du syst\u00e8me, la base de donn\u00e9es des packages devait probablement \u00eatre en mauvais \u00e9tat. J&rsquo;ai d\u00fb ex\u00e9cuter successivement (de m\u00e9moire, je n&rsquo;ai pas pu faire de capture d&rsquo;\u00e9cran).<\/p>\n<pre># <strong>yum check<\/strong><\/pre>\n<p style=\"text-align: justify;\">qui m&rsquo;indiqua qu&rsquo;il restait une transaction de mise \u00e0 jour non termin\u00e9e. Je la compl\u00e9tai donc avec<\/p>\n<pre># <strong>yum-complete-transaction<\/strong><\/pre>\n<p style=\"text-align: justify;\">toutefois, des erreurs persistaient et je dus effectuer les op\u00e9rations suivantes (chacune m&rsquo;indiquant la suivante \u00e0 lancer)<\/p>\n<pre># <strong>package-cleanup --problems<\/strong>\n# <strong>package-cleanup --dupes<\/strong>\n# <strong>rpm -Va --nofiles --nodigest<\/strong><\/pre>\n<p style=\"text-align: justify;\">Enfin, certains conflits persistant entre packages de m\u00eame nom et de num\u00e9ros de version diff\u00e9rents, je dus terminer le nettoyage avec une s\u00e9rie de&nbsp;:<\/p>\n<pre># <strong>yum erase <\/strong><em>nom-du-package<\/em><\/pre>\n<p style=\"text-align: justify;\">Apr\u00e8s retrait du CD <em>live<\/em> et red\u00e9marrage, tout fonctionna \u00e0 nouveau comme avant. Ouf&nbsp;!<\/p>\n<h1>Conclusion<\/h1>\n<p style=\"text-align: justify;\">Cette petite m\u00e9saventure, heureusement sans cons\u00e9quences autres qu&rsquo;un peu de temps perdu, m&rsquo;a permis de tirer quelques remarques que je pr\u00e9senterai sous forme de conseils&nbsp;:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Ne jamais paniquer, ne jamais se pr\u00e9cipiter et surtout ne jamais tenter de r\u00e9installer quoique ce soit avant d&rsquo;avoir tout essay\u00e9. Il est extr\u00e8mement rare qu&rsquo;un incident logiciel (je ne parle pas de la mort physique d&rsquo;un disque) bloque irr\u00e9m\u00e9diablement un syst\u00e8me Linux. Tant qu&rsquo;il n&rsquo;y a pas de fum\u00e9e ou d&rsquo;odeur bizarre, il y a un bon espoir de pouvoir remettre tout le syst\u00e8me en marche comme pr\u00e9c\u00e9demment.<\/li>\n<li style=\"text-align: justify;\">Disposer d&rsquo;un CD-Rom bootable <em>live<\/em> de pr\u00e9f\u00e9rence de la m\u00eame distribution (m\u00eame version majeure) que votre poste de travail. Il n&rsquo;est pas tr\u00e8s agr\u00e9able de devoir courir apr\u00e8s un CD vierge et un poste libre pour t\u00e9l\u00e9charger et graver la version de sauvetage alors que votre poste de travail est apparemment moribond.<\/li>\n<li style=\"text-align: justify;\">\u00c9viter les mises \u00e0 jour du syst\u00e8me en \u00e9tant connect\u00e9 en mode graphique avec plusieurs applications en cours d&rsquo;utilisation. Et \u00e9viter avant-tout de faire une mise \u00e0 jour du syst\u00e8me si les donn\u00e9es utilisateur qu&rsquo;il contient n&rsquo;ont pas \u00e9t\u00e9 enti\u00e8rement sauvegard\u00e9es. C&rsquo;est une r\u00e8gle simple, mais rarement respect\u00e9e d&rsquo;autant que bon nombre d&rsquo;environnements de travail nous pr\u00e9sentent une fen\u00eatre \u00ab\u00a050 mises \u00e0 jour disponibles\u00a0\u00bb alors que nous venons de commencer notre travail depuis quelques dizaines de minutes&#8230;<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">En respectant ces conseils, et avec un peu de patience et de r\u00e9flexion, on doit pouvoir red\u00e9marrer un syst\u00e8me Linux quelque soit le plantage survenu.<\/p>\n<p style=\"text-align: justify;\">","protected":false},"excerpt":{"rendered":"<p>Kernel panic &ndash; not syncing: No init found. J&rsquo;indiquais dans un article pr&eacute;c&eacute;dent (&agrave; la fin de &laquo;&nbsp;Construire son syst&egrave;me personnel pour Pandaboard &ndash; 1&laquo;&nbsp;)&nbsp; que ce message &eacute;tait pour moi une excellente nouvelle, car il indiquait que le noyau avait correctement d&eacute;marr&eacute;, identifi&eacute; les p&eacute;riph&eacute;riques et trouv&eacute; son syst&egrave;me de fichiers initial. Une excellente [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-1048","post","type-post","status-publish","format-standard","hentry","category-linux-2"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=1048"}],"version-history":[{"count":1,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1048\/revisions"}],"predecessor-version":[{"id":5054,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1048\/revisions\/5054"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=1048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=1048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=1048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}