Reboot automatique linux en cas d’erreur disque

Short Tips

Reboot automatique linux en cas d’erreur disque

Fort de notre expérience au ResEl avec notre infra (en carton) qui nous permet d’évoluer dans un domaine du sysadmin, il y a, à tout problème, sa solution.

Cependant, parfois il est des problèmes résultants de faits mystiques et troublants… Mais tout problème ayant sa solution encore une fois, voilà une configuration assez intéressante (on repassera sur l’aspect professionnel…)

Bon, pour faire simple, au ResEl on a 8 hyperviseurs (quand ils sont tous fonctionnels) et tirent leur stockage d’un SAN Synology RS3614RPxs composé de deux LUN, 1 composé lui-même de 6 disques SSD Samsung EVO 1To 860, et l’autre de 5 disque HDD de 3To (toute marque confondue) en RAID6. Ouais, ça fait 11 disques et pas 12, car on a un dernier SSD en hotspare.

Bon, le principal problème ?

Parfois les VMs ont leur disque en read-only, du coup, les services fonctionnent moyens… Cela est dû à une configuration automatique du fstab que l’on retrouve par défaut dans Linux :

UUID=9407a09f-c4b7-4bea-86b9-8e3237d2a576 /               ext4    errors=remount-ro 0       1

Mais pourquoi des erreurs se déclenchent au ResEl ? Ah bah là, mystère et boule de gomme. On suppose des chamboulements dans la force, les disques passent aléatoirement (parmis nos 60 VMs, x passent randomly en RO) lorsqu’il y a :

  • Un onduleur qui s’éteint (oui, bon ça c’est un autre problème aussi tient…)
  • Des backups se déclenchent (en vrai ça le fait plus trop depuis qu’on est en 10Gbps sur SFP+ entre les Hyperviseurs et le SAN)
  • Un explosion thermonucléaire a lieu sur Brest (alors, on n’a jamais testé, mais on suppose que dans ce cas nous aurons sûrement quelques soucis d’accès disque)

Bon du coup, le workaround manu-militari, étant de reboot la machine, on s’est dit qu’on pouvait peut-être faire un truc pour que ce soit automatique quand même.

La configuration

La première étape, consiste à déclencher un kernel panic lorsque le filesystem détecte des erreurs :

UUID=9407a09f-c4b7-4bea-86b9-8e3237d2a576 /               ext4    errors=panic 0       1

L’UUID dépend évidemment de votre installation, ainsi que le point de montage. Là, ce qu’il faut voir c’est juste qu’il faut changer errors=remount-ro en errors=panic

La seconde étape consiste à configurer le kernel pour que lors d’un kernel panic, il reboot dans la foulée. Sinon t’as l’air malin avec ta VM qui est toute paniquée.

Il suffit d’ajouter la ligne suivante dans /etc/sysctl.conf

kernel.panic=1

Et d’appliquer la nouvelle configuration avec sysctl --system

Voilà ! Votre machine devrait paniquer toute seule puis se remettre de ses émotions !

Si votre machine se met à bootloop par contre, je n’y suis pour rien.

Ansible

Comme je suis sympa, je vous ai fait un p’tit ansible :

---

- hosts: all
  tasks:
  - name: Update fstab configuration
    replace:
      path: /etc/fstab
      regexp: 'errors=[a-z-]+'
      replace: "errors=panic"
      become: true
      become_user: root

- hosts: all
  tasks:
  - name: Add panic reboot configuration
    lineinfile:
      dest: /etc/sysctl.conf
      line: "kernel.panic=1"
      become: true
      become_user: root


- hosts: all
  tasks:
  - name: Apply new sysctl changes to system
    command: sysctl --system

J’ai fait le ansible vite zef, pas encore testé, n’hésitez pas à faire vos retours si j’ai cassé votre infra !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *