Noyau Linux

Table of contents

  1. Noyau Linux
    1. Astuces
      1. Magic keys : éteindre son système proprement lorsque son ordinateur est bloqué
      2. Réinitialiser un mot de passe root oublié (sans Live CD)
      3. Vider le cache système
      4. Libérer l'espace occupé par un fichier utilisé par un processus

Astuces

Magic keys : éteindre son système proprement lorsque son ordinateur est bloqué

Si par malheur votre système GNU/Linux venait à "freezer" (plus rien ne bouge et le clavier ne répond plus) et alors que vous vous dirigez résigné vers le bouton Power de votre ordinateur, sachez qu'il existe une méthode pour arrêter proprement un système bloqué — attention, pas planté (kernel panic) — et ainsi éviter de devoir ramasser son système de fichiers à la petite cuillère au prochain reboot. Dans une telle situation, tape la séquence de caractères suivante en maintenant les touches <alt> et <Print screen> (SysRq) enfoncées :
reisub
En pressant les touches <alt> et <SysRq>, vous activez une option particulière du noyau appelée "Magic keys" qui vous permet de demander directement au noyau d'effectuer certaines opérations. Ici, chaque lettre de la séquence correspond à une de ces actions, qui sont à entrer scrupuleusement dans l'ordre annoncé :
   1. r (pour Raw) : passe le clavier en mode "brut"
   2. e (pour tErm) : envoie le signal SIGTERM à tous les processus en cours (sauf init)
   3. i (pour kIll) : envoie le signal SIGKILL à tous les processus qui tourneraient encore malgré le précédent SIGTERM (sauf init)
   4. s (pour Sync) : vide le cache des disques durs et force l'écriture des données
   5. u (pour Umount) : démonte tous les systèmes de fichiers et les remonte en lecture seule pour éviter une vérification au prochain démarrage
   6. b (pour reBoot) : reboote l'ordinateur ;)

Réinitialiser un mot de passe root oublié (sans Live CD)

Sur la plupart des distributions récentes, même le mode single vous demande le mot de pass root. Ici, l'astuce consiste à booter la machine en modifiant la séquence de boot traditionnelle (chargement du noyau et de ses modules, puis init et la traversée des runlevels : on va ici obtenir directement un shell directement après le chargement du noyau et ainsi pouvoir agir sur le système sans avoir à se logger. À l'écran du bootloader (GRUB ou LiLo), ajouter le paramètre suivant aux options du noyau :
init=/bin/sh
...et bootez. Passé quelques secondes vous vous voyez offrir un prompt, mais avant de dégainer le passwd il faut remonter le système de fichiers en écriture (car dans les premières étapes du démarrage le FS est en lecture seule) :
# mount -o remount,rw /
# passwd            # ou modifiez à la main /etc/passwd (supprimez le "x" du deuxième champ de la ligne root)
# sync                # on force les écritures sur le disque sur
# mount -o remount,ro /
# reboot

Vider le cache système

# echo 3 >/proc/sys/vm/drop_caches

Libérer l'espace occupé par un fichier utilisé par un processus

Il arrive parfois qu'un processus utilise un fichier pour y écrire (beaucoup) de données, mais ne le ferme pas lorsqu'il a finit de l'utiliser et maintient donc son descripteur de fichier (FD, ''file descriptor'') ouvert. En conséquence, le volume de données du fichier est occupé sur le disque, et vous ne pouvez pas supprimer le fichier puisqu'il est déjà effacé du point de vue du système de fichiers. Si vous ne pouvez pas arrêter/redémarrer le processus afin qu'il "lâche" le FD, on pourrait penser que vous l'avez dans le fondement...

Pas de panique, malgré son absence sur le disque dur il est toujours possible d'accéder au contenu du fichier en question via l'identifiant du FD tenu par le processus lui-même : vous pouvez donc "écraser" ses données comme vous le feriez sur un fichier traditionnel. Pour récupérer l'identifiant du FD, repérez la référence dans la 5ème colonne ("FD") à l'aide de la commande lsof :

# lsof
COMMAND     PID   TID USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
...
python    13179       marc    3w      REG                8,1  1443964  8135942 /tmp/blah (deleted)
...

Puis écrasez les données du fichier via sa représentation virtuelle dans /proc/<PID du processus>/fd/ :

# echo > /proc/13179/fd/3

La taille du fichier — bien que toujours ouvert —, est maintenant de 0 octets :

# lsof
COMMAND     PID   TID USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
...
python    13179       marc    3w      REG                8,1       0   8135942 /tmp/blah (deleted)
...