RAID1 remplacer un HDD défectueux

hdd
raid
boot
uefi
partition
Tags: #<Tag:0x00007fa939c4df08> #<Tag:0x00007fa939c4dda0> #<Tag:0x00007fa939c4db20> #<Tag:0x00007fa939c4d8f0> #<Tag:0x00007fa939c4d6e8>

#1

Bonjour à tous,

J’ai subis de grosses lenteurs sur une machine Debian 9 et après quelques tests il s’avère qu’un des 2 HDD en RAID 1 est défectueux (les commandes smartctl -H /dev/sda indiquent que le disque a ré-alloué +1700 secteurs)

J’ai donc désactivé le disque via les commandes mdadm avec --fail --remove

Toutefois, c’est le disque /dev/sda qui contient les partitions “Système de fichiers Linux”, “Système EFI” et la partition SWAP

Le RAID 1 (/dev/md0) est construit avec /dev/sda4 et /dev/sdb1

J’en déduis donc qu’il faut que sur /dev/sdb je dois créer 3 nouvelles partitions pour accueillir les 3 partitions (système fichiers, système efi et SWAP) ?

Cependant, la partition /dev/sdb1 occupe tout l’espace du HDD, il faut donc que je réduise sa taille (ou celle de /dev/md0 ?) afin de pouvoir créer ces 3 nouvelles partitions ?

J’utilise les tutos suivants :
1 - Pour retailler la taille des partitions : https://www.howtoforge.com/how-to-resize-raid-partitions-shrink-and-grow-software-raid
2 - Pour déplacer les 3 partitions vers le disque qui fonctionne : https://www.tecmint.com/clone-linux-partitions/
3 - Pour remplacer le disque défectueux par un autre : linux raid replace failed harddisk

Si j’écris ce topic c’est parce que j’aimerais que aillant + de connaissances que moi puisse m’indiquer si mon raisonnement est bon et si ce que je projette de faire est OK. Dans le cas contraire merci de m’indiquer ce qui ne va pas s’il vous plaît.

S’il vous faut des éléments supplémentaires (résultats de commandes ou autre) ne pas hésiter à me demander

Je vous remercie par avance pour votre aide :slight_smile: !

Eulafe


#2

Pour ce que ça vaut, à mon avis le nombre de secteurs réalloués seul ne suffit pas à décréter qu’un disque dur est défectueux. Il faut compléter avec d’autres indicateurs comme l’évolution de ce nombre, la présence de secteurs illisibles (plus grave)…

Que contient ce système de fichiers ? La racine, /boot ?
Pourquoi ne pas avoir l’avoir mis lui et le swap en RAID pour assurer la redondance du système, et doublé la partition EFI sur les deux disques pour assurer la redondance de l’amorçage ?

Redimensionner une partition RAID, c’est merdique. Je ne m’amuserais pas à ça si je peux l’éviter.

Je commencerais par ajouter le disque de remplacement sans retirer le disque à remplacer puisqu’il fonctionne encore. Puis je préparerais le nouveau disque en fonction de mon objectif.

Si l’objectif est de remplacer le disque défectueux à l’identique (avec le risque que la situation se reproduise), création des partitions EFI, Linux, swap et RAID ; ajout de la partition RAID à l’ensemble RAID md0. Copie du système de fichiers dans la nouvelle partition Linux. Montage de la partition EFI et installation de GRUB. Modification de /etc/fstab avec les nouveaux UUID. Retrait du disque défectueux.

Si l’objectif est que tout soit redondant, deux approches envisageables :

  • création de deux autres ensembles RAID pour le système de fichiers et le swap ;
  • création d’un nouvel ensemble RAID avec LVM et transfert des partitions et de l’ensemble RAID existant dans des volumes logiques. Cela simplifiera le futur remplacement d’un disque (un seul ensemble RAID à reconstruire au lieu de 3).

#3

Bonsoir @PascalHambourg et merci de ta réponse !

Il n’y a pas que le nb. de secteurs réalloués : je ressens aussi d’énormes freeze (VLC, Chrome, tout …) et suite à la désactivation de ce HDD dans le RAID plus aucune latence (ceci explique cela du coup)

Voici le résultat de la commande fdisk -l qui pourra t’aiguiller peut être :

fdisk -l
Disque /dev/sda : 2,7 TiB, 3000592982016 octets, 5860533168 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d’E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d’étiquette de disque : gpt
Identifiant de disque : 02637AB2-6D24-4E76-9C9E-5944C68F1C25

Périphérique Début Fin Secteurs Taille Type
/dev/sda1 2048 391167 389120 190M Système de fichiers Linux
/dev/sda2 391168 16992255 16601088 7,9G Partition d’échange Linux
/dev/sda3 16992256 18163711 1171456 572M Système EFI
/dev/sda4 18163712 5860532223 5842368512 2,7T RAID Linux

Disque /dev/sdb : 2,7 TiB, 3000592982016 octets, 5860533168 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d’E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d’étiquette de disque : gpt
Identifiant de disque : 1E02E36C-E66D-4D42-A145-A40FCABC7000

Périphérique Début Fin Secteurs Taille Type
/dev/sdb1 2048 5860532223 5860530176 2,7T RAID Linux

Disque /dev/md0 : 2,7 TiB, 2991158460416 octets, 5842106368 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d’E/S (minimale / optimale) : 4096 octets / 4096 octets

Pourquoi ne pas avoir l’avoir mis lui et le swap en RAID pour assurer la redondance du système, et doublé la partition EFI sur les deux disques pour assurer la redondance de l’amorçage ?

Parce qu’à l’époque où j’ai monté ce serveur je n’ai pas pensé à le faire, j’ai lu également que ça peut un peu ralentir le boot du serveur mais vu qu’il ne reboot pas souvent tu as sûrement raison et c’est ce que je vais opter (ça m’évitera d’avoir à faire à ce cas une nouvelle fois !)

Je te remercie pour tes conseils et j’espère que le fdisk -l t’aidera à voir un peu plus clair sur le stockage actuel sur mon système

Bonne soirée :slight_smile:


#4

Avec une taille de seulement 190 Mio, je suppose que /dev/sda1 est une partition /boot. A confirmer df et dans /etc/fstab.

Est-il physiquement possible de brancher le nouveau disque sans retirer l’ancien (donc 3 disques en même temps) ?


#5

Voici la sortie de la commande “df” :

df

Sys. de fichiers blocs de 1K   Utilisé Disponible Uti% Monté sur
udev                 4020328         0    4020328   0% /dev
tmpfs                 806384     91648     714736  12% /run
/dev/md0          2921053184 970684132 1945854524  34% /
tmpfs                4031912    100488    3931424   3% /dev/shm
tmpfs                   5120         4       5116   1% /run/lock
tmpfs                4031912         0    4031912   0% /sys/fs/cgroup
/dev/sda1             184301     36945     133737  22% /boot
/dev/sda3             584568       132     584436   1% /boot/efi
tmpfs                 806380      1168     805212   1% /run/user/116
tmpfs                 806380        40     806340   1% /run/user/1001
tmpfs                 806380         0     806380   0% /run/user/0

Voici la sortie de la commande “cat /etc/fstab” :

cat /etc/fstab

/etc/fstab: static file system information.
Use 'blkid' to print the universally unique identifier for a
device; this may be used with UUID= as a more robust way to name devices
that works even if disks are added and removed. See fstab(5).

<file system> <mount point>   <type>  <options>       <dump>  <pass>
/ was on /dev/md0 during installation
UUID=ad724bd3-0c57-41cf-8875-91806c1dc367 /               btrfs   defaults        0       0

/boot was on /dev/sda1 during installation
UUID=d977733b-d5dd-4d07-8645-0ab8e163e44f /boot           ext4    defaults        0       2

/boot/efi was on /dev/sda3 during installation
UUID=400F-0E66  /boot/efi       vfat    umask=0077      0       1

swap was on /dev/sda2 during installation
UUID=e00a5c3e-fe70-4358-9bbe-5aeeca053bea none            swap    sw              0       0

Du coup oui effectivement, /dev/sda1 est la partition de boot. Mais pour moi il faut que je garde aussi sda2 et sda3, non ?

Est-il physiquement possible de brancher le nouveau disque sans retirer l’ancien (donc 3 disques en même temps) ?

Oui aucun problème, j’ai la connectique SATA suffisante


#6

Cet article ne décrit pas comment réduire une partition RAID, seulement comment réduire la taille utile d’un ensemble RAID, ce qui ne te sert à rien puisque l’ensemble RAID /dev/md0 est déjà plus petit que la partition RAID restante.

Si tu peux brancher le disque de remplacement en plus des deux autres, tu pourrais procéder ainsi pour reconstruire /dev/md0, mettre /boot et le swap en RAID 1 et doubler la partition EFI (sous réserve d’erreurs ou d’omissions) :

Arrêter le système
Ajouter le nouveau disque de 3 To
Démarrer le système
Attention au nommage /dev/sd* des trois disques. Les deux disques d’origine peuvent avoir changé de nom suite au branchement du troisième.

Partitionner le nouveau disque au format GPT :

  • partition 1 type RAID de 200 Mo pour /boot
  • partition 2 type RAID de 8 Go pour le swap
  • partition 3 type EFI de 500 Mo
  • partition 4 type RAID avec le reste

Ajouter la partition 4 à /dev/md0 pour le reconstruire. La reconstruction peut être suivie dans /proc/mdstat.

Démonter /boot/efi
Remonter la partition /boot sur /mnt avec mount --move /boot /mnt
Créer un ensemble RAID 1 /dev/md1 dégradé avec la partition 1 et un membre manquant
Formater /dev/md1 en ext4
Monter /dev/md1 sur /boot
Copier le contenu de /mnt dans /boot
Démonter /mnt

Créer un ensemble RAID 1 /dev/md2 dégradé avec la partition 2 et un membre manquant
Formater /dev/md2 en swap
Désactiver le swap actuel
Activer le swap /dev/md2

Formater la partition 3 EFI en FAT
Monter la partition 3 EFI sur /boot/efi

Modifier /etc/mdadm/mdadm.conf avec la sortie de mdadm --examine --scan
Modifier /etc/fstab avec les UUID tels qu’affichés par blkid de /dev/md1 pour /boot, /dev/md2 pour le swap et la partition 3 pour /boot/efi, et ajouter “nofail” dans les options de /boot/efi
Modifier /etc/initramfs-tools/resume avec l’UUID de /dev/md2 si besoin
Reconstruire l’initramfs avec update-initramfs -u

Installer GRUB sur le nouveau disque :

grub-install --force-extra-removable
grub-install --bootloader-id="fallback"
update-grub

Attendre la fin de la reconstruction de /dev/md0 dans /proc/mdstat

Arrêter le système
Retirer le disque défectueux
Démarrer le système

Retirer la partition RAID du disque d’origine de /dev/md0
Supprimer la partition RAID du disque d’origine
Créer 4 partitions sur le disque d’origine comme sur le nouveau disque
Ajouter la partition 1 à /dev/md1
Ajouter la partition 2 à /dev/md2
Ajouter la partition 4 à /dev/md0
Formater la partition 3 EFI en FAT
Monter la partition 3 EFI sur /mnt
Installer GRUB sur la partition EFI du disque d’origine :

grub-install --force-extra-removable --efi-directory=/mnt

Attendre la fin des reconstructions dans /proc/mdstat


#7

Je te remercie pour ce tuto complet, j’attends la réception du nouveau HDD et je me lancerai dans ces opérations !

Il y a beaucoup de choses à faire mais c’est assez clair, merci !

Je posterai le résultat ici :slight_smile:


#8

Bonsoir,

Je reviens aux nouvelles suite réception du nouveau HDD.

J’ai suivi les opérations jusqu’à l’arrêt du système, retrait du disque défectueux puis reboot du système toutefois, lorsque je reboot j’obtiens des erreurs qui ne présagent rien de bon :

Tentative de boot avec les 2 HDD :
20191108_221705

J’ai tout de même essayé de rebrancher celui défectueux, avec les 2 autres (l’ancien, et le nouveau) : (voir message suivant)

Fait fortement embêtant : je n’ai pas le mot de passe de “superutilisateur”… J’ai tout de même essayé le mot de passe de mon utilisateur “root” mais il ne passe pas…

J’en déduis donc que je me suis visiblement foiré quelque part et que là je suis bon pour repartir de 0

Pascal, as-tu une astuce de dernière chance :frowning: ?

Bonne soirée


#9

20191108_215227


#10

Les messages des deux écrans sont globalement identiques (mêmes UUID manquants), j’en déduis que c’est le même (nouveau) système qui a démarré dans les deux cas. Donc le nouveau système démarre, c’est déjà pas mal, le plus gros est fait.

Les erreurs d’UUID peuvent provenir d’une mauvaise modification dans /etc/fstab, ou bien d’ensembles RAID non activés. Pour vérifier tout cela, il faut pouvoir ouvrir une session et examiner la sortie de blkid et le contenu de /etc/fstab, /etc/mdadm/mdadm.conf et /proc/mdstat.

Le mot de passe du superutilisateur est le mot de passe du compte root. Ce n’est pas le mot de passe d’un compte utilisateur normal qui peut utiliser sudo mais le mot de passe qu’il faut saisir avec su. Si tu n’as pas défini de mot de passe root à l’installation ni après, tu ne peux pas utiliser le shell d’urgence. Un contournement consiste à démarrer en en supprimant le paramètre ro et en ajoutant les paramètres rw init=/bin/bash dans la ligne de commande du noyau. Sinon, démarrer avec un système live ou l’installateur Debian en mode rescue.


#11

Bonjour Pascal,

Merci pour ton aide encore une fois

Je n’ai pas pu débloquer la situation malgré tes conseils, j’ai donc décidé de tout réinstaller, tant pis pour mes données …

J’en ai profité pour passer sous Debian 10 (Buster) et voici ce pour quoi j’ai opté :

root@PERCEVAL:/# cat /etc/fstab

/etc/fstab: static file system information.
Use 'blkid' to print the universally unique identifier for a
device; this may be used with UUID= as a more robust way to name devices
that works even if disks are added and removed. See fstab(5).
<file system> <mount point>   <type>  <options>       <dump>  <pass>
/ was on /dev/md0 during installation
UUID=0e576680-fac2-4f34-bdf2-aa0a025bd1a8 /               ext4    errors=remount-ro 0       1
swap was on /dev/sda3 during installation
UUID=ea864020-dba5-41ba-b90b-46b837b2642a none            swap    sw              0       0
swap was on /dev/sdb3 during installation
UUID=8f44af83-56e6-404e-ab19-7383cbca7d09 none            swap    sw              0       0

root@PERCEVAL:/# blkid

/dev/sdb2: UUID="35cc87ca-5e00-343f-742e-b2901e768ea8" UUID_SUB="c25d8d4f-8ec4-55d3-4570-f930c83894cd" LABEL="PERCEVAL:0" TYPE="linux_raid_member" PARTUUID="8d23191a-5fa8-4096-8d15-05d1dc6a9875"
/dev/sdb3: UUID="8f44af83-56e6-404e-ab19-7383cbca7d09" TYPE="swap" PARTUUID="cf8962fb-5f63-4621-8204-a51e9b0ba477"
/dev/sda2: UUID="35cc87ca-5e00-343f-742e-b2901e768ea8" UUID_SUB="16b8e38c-82b3-1030-690f-0bcb0a4fcd64" LABEL="PERCEVAL:0" TYPE="linux_raid_member" PARTUUID="1eb35f1f-4666-4000-8f6e-7aeafb4fd3ce"
/dev/sda3: UUID="ea864020-dba5-41ba-b90b-46b837b2642a" TYPE="swap" PARTUUID="6e029a65-8d8b-42a2-9570-33aba7894afc"
/dev/md0: UUID="0e576680-fac2-4f34-bdf2-aa0a025bd1a8" TYPE="ext4"
/dev/sdb1: PARTUUID="4e5b3cb4-8c49-4b1b-812b-b882b865ef3b"
/dev/sda1: PARTUUID="99f4217f-e47b-4b6a-a003-2f0d3362087b"

root@PERCEVAL:/# fdisk -l

Disque /dev/sdb : 2,7 TiB, 3000592982016 octets, 5860533168 secteurs
Modèle de disque : WDC WD30EFRX-68E
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d'étiquette de disque : gpt
Identifiant de disque : 2502AC12-740B-411D-826D-BE342A9EAC3F

Périphérique      Début        Fin   Secteurs Taille Type
/dev/sdb1          2048       4095       2048     1M Amorçage BIOS
/dev/sdb2          4096 5843990527 5843986432   2,7T RAID Linux
/dev/sdb3    5843990528 5860532223   16541696   7,9G Partition d'échange Linux


Disque /dev/sda : 2,7 TiB, 3000592982016 octets, 5860533168 secteurs
Modèle de disque : WDC WD30EFRX-68E
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d'étiquette de disque : gpt
Identifiant de disque : 6FF8BF31-3869-4CE3-849E-C8247FBF0736

Périphérique      Début        Fin   Secteurs Taille Type
/dev/sda1          2048       4095       2048     1M Amorçage BIOS
/dev/sda2          4096 5843990527 5843986432   2,7T RAID Linux
/dev/sda3    5843990528 5860532223   16541696   7,9G Partition d'échange Linux


Disque /dev/md0 : 2,7 TiB, 2991985786880 octets, 5843722240 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets

Est-ce que ça te paraît cohérent ? Pour moi j’ai uniquement la racine “/” qui est montée en raid, 2 partitions avec le “swap”. Petit changement visiblement concernant la partie pour démarrer le système (si je comprends bien) qui se nomme désormais “Amorçage BIOS”. Je pense qu’il faut que je monte /dev/sda1 et /dev/sdb1 en RAID 1 ou ce n’est pas nécessaire ?

Bonne journée :slight_smile:


#12

Swap :
Tu n’as pas mis le swap en RAID 1, c’est dommage. Ça améliorerait la disponibilité du système en cas de défaillance d’un disque et lui éviterait de planter en tentant de swapper sur un disque défaillant. Rappel : le swap, c’est de la mémoire virtuelle, donc un swap défectueux c’est un peu comme une barrette de mémoire défectueuse. Il est encore possible de transformer le swap en RAID.

Tu as peut-être lu que des swaps indépendants sur des disques différents sont gérés en parallèle, comme du RAID 0, ce qui améliore les performances. Ce n’est pas vrai par défaut, les différents swaps sont activés avec des priorités décroissantes : seul le swap de priorité la plus élevée va être utilisé puis lorsqu’il sera plein le swap de priorité inférieure commencera à être utilisé et ainsi de suite. Tu peux le vérifier avec

swapon --show

Pour utiliser plusieurs swaps en parallèle, il faut leur affecter explicitement la même priorité positive N avec l’option pri=N dans /etc/fstab (cf man swapon), ce qui n’est pas le cas dans ton fichier fstab.

Amorçage :
Je ne sais pas si tu as fait exprès de remplacer l’amorçage EFI par l’armorçage BIOS mais c’est plutôt une bonne chose, cela simplifie la mise en place de la redondance pour l’amorçage. Lors de l’installation de GRUB tu as bien pris soin de sélectionner les deux disques sda et sdb ? Si tu n’es pas sûr, tu peux le vérifier avec

debconf-show grub-pc | grep install_devices

et corriger si necessaire avec

dpkg-reconfigure grub-pc

Partitionnement :

1- Tu n’as pas recréé d’ensemble RAID séparé pour /boot. En théorie ce n’est pas nécessaire, mais en pratique il s’avère que certains BIOS buggés, et peut-être firmwares UEFI en mode legacy, sont incapables d’accéder correctement aux secteurs des disques au delà de 2 Tio. Or GRUB accède aux disques via le BIOS pour charger les fichiers de démarrage. En cas de BIOS buggé, il faut donc que les fichiers de démarrage soient physiquement enregistrés en-deça de 2 Tio, ce que ne garantit pas ton partitionnement. Lors de l’installation initiale le disque est presque vide et les fichiers de démarrage vont être enregistrés au début, mais lorsqu’il commencera à être bien rempli, un fichier de démarrage pourrait être stockés au delà de 2 Tio. Cela peut se produire lors d’une réinstallation de GRUB par grub-install lors d’une mise à jour des paquets grub* ou de sa configuration par update-grub qui a lieu notamment à chaque mise à jour de noyau.

2- Tu as placé les partitions de swap à la fin des disques, ce qui a deux inconvénients : c’est la zone la moins rapide en terme de débit séquentiel (jusqu’à deux fois moins que le début), et tant que la racine n’est pas remplie c’est éloigné des zones contenant des données au début du disque, donc cela augmente le temps d’accès entre les données et le swap. Le RAID 1 peut atténuer cet inconvénient en lecture en accédant en parallèle à la zone des données sur un disque et à la zone du swap sur l’autre disque.

Surtout pas. Les partitions de type “BIOS boot” sont des zones réservées à l’usage exclusif de GRUB, il ne faut pas y toucher ni les formater, les mettre en RAID, les monter…