Comment mettre hors tension lorsqu'il n'y a pas de systemd / init (par exemple en utilisant init = / bin / bash)?

9

poweroffse plaint qu'il ne peut pas se connecter à systemd via DBus (bien sûr, il n'est pas vivant). J'ai syncsuivi kill $$, pensant que la mort du pid 1 entraînerait la mise hors tension du noyau, mais cela a provoqué une panique du noyau. J'ai ensuite maintenu le bouton d'alimentation pour forcer la mise hors tension.

Quel est le moyen le plus approprié de mettre hors tension dans ce scénario?

JoL
la source
Il existe une prémisse implicite non déclarée de la question de l'installation de l'ensemble d'outils systemd. Quand "il n'y a pas de systemd" signifie en fait qu'aucun jeu d'outils systemd n'est installé, c'est ainsi que le titre peut également être lu, les réponses sont plutôt différentes; et cela vaut probablement une question distincte en soi.
JdeBP
@JdeBP Vous avez raison: lire uniquement le titre et ignorer l' init=/bin/bashindication / implication est ambigu si systemd est installé ou non. J'avais voulu dire qu'il n'y avait pas de système en cours d'exécution . Dans tous les cas, n'ayant pas de systemd en cours d'exécution, je pensais que le jeu d'outils systemd serait inutile et que les réponses utiliseraient d'autres moyens comme ceux concernant sysrq.
JoL

Réponses:

10

Démontez les systèmes de fichiers que vous avez montés. Le système de fichiers racine est un cas spécial; pour cela, vous pouvez utiliser mount / -o remount,ro. Sous Linux, umount /il arrive également de fonctionner, car il est effectivement converti en l'ancienne commande.


Cela dit, vous n'avez pas à vous soucier de trop démonter, sauf si

  1. Vous avez monté un ancien système de fichiers comme FAT - tel qu'utilisé par la partition système EFI - ou ext2, qui n'implémente pas de journalisation ou équivalent. Avec un système de fichiers moderne, cela syncdevrait suffire et le système de fichiers se réparera très rapidement au prochain démarrage.
  2. Vous avez peut-être laissé un processus en cours qui écrit sur le système de fichiers et vous aviez l'intention de l'arrêter proprement. Dans ce cas, il est utile d'essayer de démonter les systèmes de fichiers, car umount échouerait et afficherait une erreur occupée pour vous rappeler le graveur restant.

Ce qui précède est la partie importante. Après cela, vous pouvez également mettre le matériel hors tension en utilisant poweroff -f. Ou redémarrez avec reboot -f.

Il y a un systemdéquivalent de Spécifiques poweroff -f: systemctl poweroff -f -f. Fait poweroff -fla même chose et systemdprend en charge cette commande même si elle a été construite sans compatibilité SysV.


Techniquement, je me souviens que mon disque dur USB a été documenté comme nécessitant un "retrait sûr" de Windows ou équivalent. Mais cette exigence n'est pas sûre contre les pannes de courant, et Linux ne le fait pas de toute façon lors d'un arrêt normal. Il vaut mieux l'interpréter comme signifiant que vous ne devriez pas faire du jogging sur le disque dur pendant qu'il tourne, y compris en essayant de le débrancher. Une mise hors tension complète devrait arrêter le disque de tourner. Vous pouvez probablement entendre, ressentir ou voir si cela ne s'arrête pas :-).

sourcejedi
la source
Pour que vous le sachiez, je n'oublie pas d'accepter. C'est juste que j'ai vu le conseil d'attendre un certain temps avant d'accepter une réponse pour laisser les autres (peut-être dans des fuseaux horaires différents) voir la question et avoir la chance de fournir leurs propres réponses.
JoL
sync()suffit pour ext2. Il se plaindra d'être sale mais n'aura pas été réellement corrompu, à l'exception des informations résumées. Je considère généralement init = / bin / bash ou tout équivalent local comme une situation d'urgence.
Joshua
@Joshua ext2 fsck est incroyable . Mais les performances de fsck sur les grands systèmes de fichiers sont bien pires que la relecture de journal. Dans une situation d'urgence, vous ne voulez pas être retardé en raison d'un démontage impur.
sourcejedi
Vous savez fsck.mode=skipbien?
Joshua
3
@Joshua qui est pertinent pourquoi? Si vous effectuez un démontage impur, vous devrez éventuellement réparer le FS. Ne pas utiliser fsck.mode=skippour démarrer normalement après un démontage impur!
sourcejedi
5

Je vais simplement exécuter ci-dessous deux commandes:

echo s > /proc/sysrq-trigger    <= For sync
echo o > /proc/sysrq-trigger    <= For shutdown the system

En supposant que la clé magique est activée dans le noyau

SHW
la source
4

Ok, alors je viens de penser que j'avais la possibilité de le faire exec init. De là, je pourrais probablement le faire plus tard poweroff. Je me demande cependant s'il existe de meilleures alternatives.

JoL
la source
@ G-Man ne démarrera-t-il pas le processus de démarrage normal et ne vous donnera-t-il pas votre shell normal?
muru
2
@muru Vous pourriez le faire exec init 0. Cela ne fonctionnera pas avec tous les systèmes d'initialisation, mais les mêmes passeront par une séquence d'arrêt.
Austin Hemmelgarn
1
Je pense que c'est une très bonne réponse pour d'autres raisons; en particulier parce que la plupart des cas de mise hors tension ne sont pas autant souhaités que le redémarrage, ce qui évite le redémarrage une fois les dommages réparés.
Joshua
1
@Joshua C'est pratique, mais si vous voulez être le plus sûr, c'est souvent une bonne idée de vérifier que le processus de démarrage complet fonctionne :-).
sourcejedi
3

En effet, vous voulez appeler syscall reboot (2) .

Vous pouvez le faire de deux manières:

  1. Exécutez reboot -fou poweroff -f, cela devrait appeler reboot(2)directement.

  2. Si vous êtes sur le vrai terminal virtuel Linux (pas l'émulateur de terminal GUI), en appuyant sur Ctrl+ Alt+ Delete.

Notez que le raccourci clavier peut être désactivé par un programme de l'espace utilisateur (généralement init), lorsqu'il est désactivé, le raccourci enverra un signal à init à la place.

Toutes les commandes ci-dessus doivent être exécutées après avoir démonté tous les disques ou remonté en lecture seule et exécuté la synchronisation, sinon vous risquez de perdre des données non écrites. Si votre shell est le seul processus en cours d'exécution, la synchronisation peut être suffisante.

Lie Ryan
la source
1

Vous pouvez utiliser les clés Magic SysRq ( https://en.wikipedia.org/wiki/Magic_SysRq_key ) pour éteindre votre ordinateur.

Pour fermer correctement, vous pouvez utiliser ce qui suit (formulaire de devis Wikipedia):

Une utilisation courante de la clé magique SysRq consiste à effectuer un redémarrage en toute sécurité d'un ordinateur Linux qui s'est autrement verrouillé ( abréviation REISUB ). Cela peut empêcher la fscknécessité d'un redémarrage et donne à certains programmes la possibilité d'enregistrer des sauvegardes d'urgence du travail non enregistré. [5]   Le QWERTY (ou AZERTY) mnémoniques: " R Aising E lephants I s S o U tterly B oring", " R eboot E ême I f S ystème U tterly Broken "ou simplement le mot" BUSIER "lu à l'envers, sont souvent utilisés pour mémoriser la séquence de touches SysRq suivante:

  • un Raw (reprendre le contrôle du clavier depuis X),
  • t Erminate (envoyer SIGTERM à tous les processus, leur permettant de se terminer avec élégance),
  • k Ill (envoyer SIGKILL à tous les processus, les forçant à se terminer immédiatement),
  • Sync (vider les données sur le disque),
  • Unmount (remonter tous les systèmes de fichiers en lecture seule),
  • re Boot.

Mais en remplaçant le dernier B par O (pour azerty / qwerty) par "power O ff"

breversa
la source