Réparation à chaud d'un raid cassé

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
ben_raven
Membre
Membre
Messages : 12
Inscription : 08 sept. 2016, 17:07
Status : Hors-ligne

Bonjour à tous :)

J'ai eu quelques mésaventures avec un raid1 mdadm sous debian 8, je vous explique.

J'ai un disque qui est tombé en panne, évidemment le disque en panne contenait le grub et j'avais oublié par mégarde lors de l'installation, d'installer grub sur le second disque.
Voici ce que j'ai fait :
1- La machine est actuellement démarrée et ne peux plus être arrêtée... sinon elle ne redémarrera pas.
2- J'ai pu déconnecter le disque défectueux de 2 arrays sur 3 via la commande mdadm --manage --remove
3- Impossible de déconnecter du raid l'array md1 qui contient /boot
4- J'ai réinséré le disque neuf et j'ai synchronisé les deux arrays.

J'ai donc aujourd'hui deux problèmes :
Comment synchroniser l'array qui contient /boot ? :

Code : Tout sélectionner

serv:~# cat /proc/mdstat 
Personalities : [raid1] 
md3 : active raid1 sde4[2] sdb4[1]
      972431360 blocks super 1.2 [2/2] [UU]
      bitmap: 2/8 pages [8KB], 65536KB chunk

md2 : active raid1 sde3[2] sdb3[1]
      3904512 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 sda2[0](F) sdb2[1]
      195392 blocks super 1.2 [2/1] [_U]
      
unused devices: <none>

Code : Tout sélectionner

serv:~# mdadm --manage /dev/md1 --remove /dev/sda2 --force
mdadm: Cannot find /dev/sda2: No such file or directory

Code : Tout sélectionner

# mdadm --manage /dev/md1 --add /dev/sde2
mdadm: /dev/md1 has failed so using --add cannot work and might destroy
mdadm: data on /dev/sde2.  You should stop the array and re-assemble it.
Quelqu'un a-t-il déjà réassemblé une array comme c'est demandé ?


Comment réinstaller le grub sur la partition EFI ?

Code : Tout sélectionner

# update-grub
Création du fichier de configuration GRUB…
/usr/sbin/grub-probe : attention : Impossible de trouver le volume physique « (null) ». Certains modules risquent de manquer dans l'image de base..
/usr/sbin/grub-probe : attention : Impossible de trouver le volume physique « (null) ». Certains modules risquent de manquer dans l'image de base..
/usr/sbin/grub-probe : attention : Impossible de trouver le volume physique « (null) ». Certains modules risquent de manquer dans l'image de base..
/usr/sbin/grub-probe : attention : Impossible de trouver le volume physique « (null) ». Certains modules risquent de manquer dans l'image de base..
Image Linux trouvée : /boot/vmlinuz-3.16.0-4-amd64
Image mémoire initiale trouvée : /boot/initrd.img-3.16.0-4-amd64
/usr/sbin/grub-probe : erreur : disque « mduuid/6ea0bc18e0759f71a1da3b3a2ce30602 » non disponible.
/usr/sbin/grub-probe : erreur : disque « mduuid/6ea0bc18e0759f71a1da3b3a2ce30602 » non disponible.
/usr/sbin/grub-probe : erreur : disque « mduuid/6ea0bc18e0759f71a1da3b3a2ce30602 » non disponible.
/usr/sbin/grub-probe : attention : Impossible de trouver le volume physique « (null) ». Certains modules risquent de manquer dans l'image de base..

Code : Tout sélectionner

serv:~# grub-install /dev/sdb
Installing for x86_64-efi platform.
grub-install : erreur : impossible de trouver le répertoire EFI.
serv:~# grub-install /dev/sde
Installing for x86_64-efi platform.
grub-install : erreur : impossible de trouver le répertoire EFI.
MERCI BEAUCOUP POUR VOTRE TEMPS ET VOTRE AIDE :)


INFOS COMPLEMENTAIRES :

Code : Tout sélectionner

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/md3 during installation
UUID=782028b0-9d22-42a9-8be0-ba92ee475fa5 /               ext4    errors=remount-ro 0       1
# /boot was on /dev/md1 during installation
UUID=29d5bd4d-1c1c-43fa-b85f-3a573b043ed0 /boot           ext3    defaults        0       2
# /boot/efi was on /dev/sda1 during installation
UUID=7509-3ABE  /boot/efi       vfat    umask=0077      0       1
# swap was on /dev/md2 during installation
UUID=6aa22672-3501-4739-8017-f37fa8b7ca5f none            swap    sw              0       0

Code : Tout sélectionner

serv:~# mdadm --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Sun Mar 20 11:12:07 2016
     Raid Level : raid1
     Array Size : 195392 (190.84 MiB 200.08 MB)
  Used Dev Size : 195392 (190.84 MiB 200.08 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Mon Oct 17 16:17:44 2016
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0

           Name : serv:1  (local to host serv)
           UUID : 6ea0bc18:e0759f71:a1da3b3a:2ce30602
         Events : 88

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       18        1      active sync   /dev/sdb2

       0       8        2        -      faulty

Code : Tout sélectionner

serv:~# mdadm --detail /dev/md2
/dev/md2:
        Version : 1.2
  Creation Time : Sun Mar 20 11:12:19 2016
     Raid Level : raid1
     Array Size : 3904512 (3.72 GiB 4.00 GB)
  Used Dev Size : 3904512 (3.72 GiB 4.00 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Mon Oct 17 16:00:28 2016
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : serv:2  (local to host serv)
           UUID : 6bfbb645:75b97328:f567a7e0:9b438d21
         Events : 158

    Number   Major   Minor   RaidDevice State
       2       8       67        0      active sync   /dev/sde3
       1       8       19        1      active sync   /dev/sdb3

Code : Tout sélectionner

root@serv:~# mdadm --detail /dev/md3
/dev/md3:
        Version : 1.2
  Creation Time : Sun Mar 20 11:12:30 2016
     Raid Level : raid1
     Array Size : 972431360 (927.38 GiB 995.77 GB)
  Used Dev Size : 972431360 (927.38 GiB 995.77 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Mon Oct 17 19:08:11 2016
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : serv:3  (local to host serv)
           UUID : ae05dd4c:d03bfb24:2b45ef0b:f2c47890
         Events : 212915

    Number   Major   Minor   RaidDevice State
       2       8       68        0      active sync   /dev/sde4
       1       8       20        1      active sync   /dev/sdb4
PascalHambourg
Contributeur
Contributeur
Messages : 930
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

ben_raven a écrit :Quelqu'un a-t-il déjà réassemblé une array comme c'est demandé ?
Non, et je n'ai jamais rencontré cette situation.
As-tu essayé avec "failed" ou "detached" à la place de /dev/sda2 pour retirer les membres fautifs ou déconnectés ?

Sinon, je ne vois pas de risque à arrêter et redémarrer l'ensemble RAID. /boot peut être démonté (après avoir démonté /boot/efi si nécessaire) lorsque le système est actif, il n'est pas utilisé. Au pire, tu fais une copie de sauvegarde du contenu de /boot avant.

Concernant l'amorçage UEFI, visiblement la partition système EFI était dans /dev/sda qui a été débranché.
Si elle apparaît encore montée sur /boot/efi, il faut la démonter.
Ensuite, créer une nouvelle partition système EFI sur chacun des deux disques présents, les formater en FAT, en monter une sur /boot/efi et exécuter

Code : Tout sélectionner

grub-install --force-extra-removable
(on ne spécifie pas de périphérique en UEFI car il n'y a pas de secteur de boot)
Ensuite, tu peux soit
- démonter la partition, monter l'autre partition et exécuter

Code : Tout sélectionner

grub-install --force-extra-removable --bootloader-id=backup
- monter l'autre partition ailleurs, par exemple /boot/efi-backup et exécuter

Code : Tout sélectionner

grub-install --force-extra-removable --bootloader-id=backup --efi-directory=/boot/efi-backup
- soit monter l'autre partition ailleurs et bêtement y recopier le contenu de la première avec cp -a.
Avatar de l’utilisateur
ben_raven
Membre
Membre
Messages : 12
Inscription : 08 sept. 2016, 17:07
Status : Hors-ligne

Merci beaucoup Pascal, toujours aussi bon :)

Code : Tout sélectionner

/dev/sdb1 on /mnt type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=utf8,shortname=mixed,errors=remount-ro)
root@serv:~# umount /mnt 
root@serv:~# ls /boot/efi/
root@serv:~# mount /dev/sdb1 /boot/efi
root@serv:~# grub-install --force-extra-removable
Installing for x86_64-efi platform.
grub-install : attention : Impossible de trouver le volume physique « (null) ». Certains modules risquent de manquer dans l'image de base..
grub-install : attention : Impossible de trouver le volume physique « (null) ». Certains modules risquent de manquer dans l'image de base..
Installation terminée, sans erreur.
root@serv:~# ls /boot/efi/
EFI
root@serv:~# ls /boot/efi/EFI/
BOOT  debian
Malgré les deux messages "attention", l'installation semble s'être bien déroulée.
Par contre l'UUID de disk dans ma fstab n'a pas changé sur le point de montage de /boot. Dois-je le mettre à jour ?

Code : Tout sélectionner

# /boot/efi was on /dev/sda1 during installation
UUID=7509-3ABE  /boot/efi       vfat    umask=0077      0       1
Sur le second disque j'ai formater la partition en vfat et j'ai copier le contenu avec cp -a.
En fait, le PC va lire la partition VFAT pour démarrer c'est bien ça qui se produit ? Il n'est plus question de MBR comme sur un bios legacy, donc pas de secteur de démarrage avec les premiers octets à copier ?



Pour le raid, j'ai d'abord démonté /boot comme tu me l'as suggéré. J'ai fais une sauvegarde du contenu avant.
Ensuite j'ai stoppé l'array. Puis je l'ai remonté avec un seul disque. J'ai ensuite intégré le second qui s'est synchro :). Ce problème est réglé !!

Code : Tout sélectionner

serv:~# cat /proc/mdstat 
Personalities : [raid1] 
md3 : active raid1 sde4[2] sdb4[1]
      972431360 blocks super 1.2 [2/2] [UU]
      bitmap: 2/8 pages [8KB], 65536KB chunk

md2 : active raid1 sde3[2] sdb3[1]
      3904512 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 sda2[0](F) sdb2[1]
      195392 blocks super 1.2 [2/1] [_U]
      
unused devices: <none>
root@serv:~# mdadm /dev/md1 --add /dev/sde2 --fail /dev/sda2 --remove /dev/sda2
mdadm: /dev/md1 has failed so using --add cannot work and might destroy
mdadm: data on /dev/sde2.  You should stop the array and re-assemble it.
root@serv:~# umount /boot
umount: /boot : non monté
root@serv:~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@serv:~# cat /proc/mdstat 
Personalities : [raid1] 
md3 : active raid1 sde4[2] sdb4[1]
      972431360 blocks super 1.2 [2/2] [UU]
      bitmap: 4/8 pages [16KB], 65536KB chunk

md2 : active raid1 sde3[2] sdb3[1]
      3904512 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
root@serv:~# man mdadm
root@serv:~# mdadm -A /dev/md1 /dev/sdb2 /dev/sde2
mdadm: no RAID superblock on /dev/sde2
mdadm: /dev/sde2 has no superblock - assembly aborted
root@serv:~# mdadm -A /dev/md1 /dev/sdb2
mdadm: /dev/md1 has been started with 1 drive (out of 2).
root@serv:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sdb2[1]
      195392 blocks super 1.2 [2/1] [_U]
      
md3 : active raid1 sde4[2] sdb4[1]
      972431360 blocks super 1.2 [2/2] [UU]
      bitmap: 4/8 pages [16KB], 65536KB chunk

md2 : active raid1 sde3[2] sdb3[1]
      3904512 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
root@serv:~# mdadm --manage /dev/md1 --add /dev/sde2
mdadm: added /dev/sde2
root@serv:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sde2[2] sdb2[1]
      195392 blocks super 1.2 [2/1] [_U]
      [===================>.]  recovery = 95.8% (187840/195392) finish=0.0min speed=46960K/sec
      
md3 : active raid1 sde4[2] sdb4[1]
      972431360 blocks super 1.2 [2/2] [UU]
      bitmap: 1/8 pages [4KB], 65536KB chunk

md2 : active raid1 sde3[2] sdb3[1]
      3904512 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
Maintenant la question est : comment m'assurer que ça va démarrer si je reboot ?
Merci encore pascal !! :) :) :)
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

Il n'y a qu'un moyen de savoir :)
Avatar de l’utilisateur
ben_raven
Membre
Membre
Messages : 12
Inscription : 08 sept. 2016, 17:07
Status : Hors-ligne

Du coup il démarre... mais en mode maintenance :( :(
Aucun service ne veut se lancer du coup.

Pourtant les montages se font bien, le raid est OK.

Le seul message que je vois de bizarre au démarrage c'est le un "Start job is running for dev-disk-by\x2duuid-7509\x2d3ABE.device" avec un compteur jusquà 1min30...

Merci de votre aide :/
Avatar de l’utilisateur
ben_raven
Membre
Membre
Messages : 12
Inscription : 08 sept. 2016, 17:07
Status : Hors-ligne

Voici le problème au démarrage.
Je pense que le grub est mal réglé non ? Pb d'uuid ?
Image
Avatar de l’utilisateur
ben_raven
Membre
Membre
Messages : 12
Inscription : 08 sept. 2016, 17:07
Status : Hors-ligne

Ok j'ai le problème :)
Dans la fstab il utilise l'UUID d'un disque pour monter /boot/efi, or c'était l'UUID de l'ancien disque :)
J'ai donc modifié l'UUID dans la fstab depuis le mode maintenance et tout fonctionne youpiiiiiiiiiiiiii

J'ai qd même une question, comment faire pour que en cas de nouvelle panne, le serveur puisse redémarrer ? dois-je préciser "/dev/sda" plutôt que l'UUID de la partition VFAT ?

Merci :) :)
PascalHambourg
Contributeur
Contributeur
Messages : 930
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

Déjà, tu peux ajouter l'option "nofail" pour le montage de cette partition, afin de ne pas bloquer le démarrage si elle manque.

Tu soulèves un point délicat du RAID en EFI : il y a plusieurs partitions système EFI pour un seul point de montage /boot/efi, et elles ne peuvent pas être en RAID logiciel pour être reconnues par le firmware UEFI. Alors comment les monter ? Spécifier le nom de périphérique au lieu de l'UUID ne règle pas tous les problèmes car en cas de remplacement du disque /dev/sda, la partition système EFI devra d'abord être créée et formatée sur le nouveau disque. On peut aussi monter chaque partition système EFI avec l'option "nofail" sur un point de montage différent /boot/efiN, et créer un lien symbolique /boot/efi vers le point de montage de la partition où on veut installer le chargeur d'amorçage. En fait la partition système EFI n'a pas besoin d'être montée en permanence mais seulement lors de l'installation du chargeur par grub-install.
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Je n'utilise pas EFI, mais j'ai lu tout ce que j'ai pu trouver à ce sujet depuis 2005.

Je me suis bien amusé avec le RAID 5 et en installant le chargeur de boot sur chaque disque du RAID, je pouvais remplacer un disque sans éteindre la machine,
et surtout sans problème de redémarrage et de reconstruction du RAID.

=======
Je pense qu'au démarrage, le BIOS va rechercher une partition de type EFI sur le disque /dev/sda
Si le disque /dev/sda n'en a pas (ou s'il est HS) il ira rechercher s'il existe une partition EFI sur le disque /dev/sdb, etc.

Je propose de tester donc la solution suivante :

Créer une partition EFI sur chaque disque utilisé par le RAID 1 => copier le contenu de la partition existante sur l'autre.
installer le chargeur de boot dans la partition EFI du disque /dev/sda,
puis réinstaller (en plus) le chargeur de boot dans la partition EFI du disque /dev/sdb
et (au cas où MàJ noyau, initramfs, etc.) synchroniser le contenu des partitions EFI à chaque modification
et réinstaller le chargeur de boot sur chaque disque.

Si un des disques est HS, l'autre devrait pouvoir prendre le relais.
PascalHambourg
Contributeur
Contributeur
Messages : 930
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

MicP a écrit :Je pense qu'au démarrage, le BIOS va rechercher une partition de type EFI sur le disque /dev/sda
Si le disque /dev/sda n'en a pas (ou s'il est HS) il ira rechercher s'il existe une partition EFI sur le disque /dev/sdb, etc.
Le boot EFI ne marche pas vraiment comme ça. Il y a un certain nombre d'entrées de boot EFI, avec un ordre de priorité, et le firmware va les essayer dans cet ordre. Le programme efibootmgr permet d'afficher et de manipuler ces entrées de boot EFI. Parmi ces entrées, en priorité, il y a toutes celles créées par les OS lors de leur installation pour leurs chargeurs respectifs, et plus concrètement en ce qui nous concerne, par grub-install.
MicP a écrit :Créer une partition EFI sur chaque disque utilisé par le RAID 1 => copier le contenu de la partition existante sur l'autre.
Il est inutile de recopier autre chose que /EFI/boot/boot*.efi s'il existe. Sans entrée de boot EFI correspondante, le firmware n'ira jamais chercher autre chose que ce fichier. Or ce fichier n'est pas mis en place par défaut par grub-install ; il faut spécifier une option comme j'ai mentionné plus haut pour qu'il le fasse, ou lors de l'installation de Debian avoir sélectionner l'installation "dans le chemin de périphérique amovible".
MicP a écrit :et (au cas où MàJ noyau, initramfs, etc.) synchroniser le contenu des partitions EFI à chaque modification
et réinstaller le chargeur de boot sur chaque disque.
Avec Debian, la partition système EFI ne contient que la core image de GRUB /EFI/debian/grub*.efi (et optionnellement /EFI/boot/boot*.efi), et la mise à jour du noyau ou de l'initramfs ne la modifie pas plus qu'elle ne le fait avec GRUB BIOS. Seule l'exécution de grub-install, manuellement ou lors de l'installation ou de la mise à jour d'un paquet grub-efi* regénère la core image de GRUB donc modifie le contenu de la partition système EFI.
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

@ PascalHambourg

Merci beaucoup pour toutes ces informations.

Je vais vous laisser travailler plutôt que de faire du bruit dans vos échanges de message et me régaler d'en apprendre plus en vous lisant.
Ça me servira très certainement quand je me déciderai à utiliser l'EFI de ma machine (vieux projet dans ma liste des TOUDOUX)
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5852
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

Triés intéressant en effet, le boot EFI est très mal documenté, y compris dans le man de GRUB que je viens de relire (ainsi que le man de grub-install). Je n'ai pas retrouvé toutes les options indiquées par Pascal!

MiCP:
installant le chargeur de boot sur chaque disque du RAID, je pouvais remplacer un disque sans éteindre la machine,
Si tu n'éteint pas la machine à quoi sert d'avoir un amorceur sur tout les disques :040:
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

Salut, ça n'a aucun intérêt de passer par l'efi si tu peux le désactiver... Le seul avantage que j'y ai trouvé, c'est de ne pas être obligé de taper le numéro de série de windows pendant son installation... Si non, c'est que des emm***e...
Répondre