web-dev-qa-db-fra.com

comment déboguer une mise à jour si elle se bloque alors que root est en lecture seule?

J'essaye de déboguer un démarrage de système inutile (suspendu) le 14.04.2 LTS. root est un système de fichiers ext4 dans un conteneur luks. les systèmes de fichiers sont à l'état propre.

Le processus de démarrage s’arrête après le pont upstart-socket-bridge (pas nécessairement après ce service spécifique, par exemple, lorsque cups-daemon a été installé, il s’est arrêté par la suite). init -v n'est pas très utile non plus. La seule entrée de journal qui ne se contente pas de consigner le démarrage/l’arrêt de divers services est celle concernant udev juste avant init.

Begin: Running /scripts/init-bottom ... done.
udev exit failed --rc=2

(Éditer) Le remontage de la racine rw semblait initialement toujours conduire à un démarrage en mode minimal, mais le fait est que c'est un peu imprévisible et que j'avais échoué et que les bottes avaient réussi. wut?

Observation: tout semble aller pour le mieux, le système ne remonte tout simplement pas la racine accessible en écriture ou ne continue le démarrage.

Q: Comment puis-je déterminer le service responsable du blocage du processus de démarrage?


Mise à jour: La création d'un deuxième shell via getty permet d'exécuter initctl list après le raccrochage. Ce sont les travaux en cours.

mountnfs-bootclean.sh start/running
udev start/running, process 438
upstart-udev-bridge start/running, process 432
plymouth start/running, process 122
resolvconf start/running
ssh start/running, process 767 <-- this one was manually started
mountall start/running, process 337
mountkernfs.sh start/running
mountnfs.sh start/running
bootmisc.sh start/running
upstart-socket-bridge start/running, process 745**
cryptdisks start/running
mountdevsubfs.sh start/running
mtab.sh start/running
network-interface (lo) start/running
network-interface (eth0) start/running
plymouth-ready (startup) start/running, process 315
plymouth-upstart-bridge start/running, process 316
mountall-bootclean.sh start/running
network-interface-security (network-interface/eth0) start/running
network-interface-security (network-interface/lo) start/running

Mise à jour 2:

  • La réintégration de Upstart et de tous ses paquets dépendants (est pénible et) n’a aucun effet.
  • En utilisant la deuxième console, je peux simplement utiliser init 5 pour que le système bloqué continue à démarrer normalement.
  • le système était maintenant bloqué même si je remontais manuellement la racine rw (ou utilisais le paramètre du noyau rw) - mon observation initiale selon laquelle forcer la racine en écriture à résoudre le problème est incorrecte

Solution de contournement:

Il semble s'agir de la faute ureadaheads. La purge a abouti à 5 bottes propres sans aucun problème. Je laisserai simplement la question (et les 100 représentants supplémentaires) ouverte à toute personne intéressée ou connaissant la réponse à la question initiale: comment, si ce n’était par un essai au hasard, j’aurais pu comprendre cela.

5
anx

Pour référence, les étapes de débogage (infructueuses) que j’ai essayées, qui peuvent toutefois être utiles aux autres:

  • obtenez un autre système de type Debian qui démarre (par exemple, un Ubuntu en direct sur une clé USB amorçable) et modifiez la configuration ou les logiciels du système examiné à l’aide de chroot. Utilisez qemu-static pour pouvoir le faire sur un système d'architecture différente.
  • installez un shell autonome comme sash, puis modifiez la ligne de commande de votre noyau (utilisez la clé e dans grub ou modifiez grub.cfg/cmdline.txt) et ajoutez init=/bin/sash, redémarrez, examinez la situation de ce shell. et seulement ensuite utilisez exec init pour continuer à démarrer
  • utilisez init avec le commutateur -v pour augmenter la journalisation
  • montez le système de fichiers racine en écriture tôt (par exemple, ajoutez 'rw' à la ligne de commande du noyau, mount -o remount,rw / avant d'exécuter init) - ceci permet davantage de journalisation
  • examiner /var/log/upstart
  • démarrez un terminal supplémentaire sur tty2 avant d'exécuter init, par ex. getty -n -l /bin/bash 38400 tty2 & - cela aide à examiner l'état du système (par exemple, ps -Af, iotop)
  • utiliser initctl list pour déterminer quels services sont dans quel état
1
anx