Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
raid_logiciel [Le 21/02/2021, 10:53] – vandalisme -> restauration Amiralgaby | raid_logiciel [Le 23/02/2021, 14:45] (Version actuelle) – [Que faire pour diminuer l'array ? - Supprimer un disque?] geole | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ---- | ||
+ | |||
+ | ====== RAID logiciel avec mdadm ====== | ||
+ | |||
+ | ===== Introduction - Qu' | ||
+ | |||
+ | Vous venez de terminer une installation d' | ||
+ | Le RAID utilise une logique très simple. Pour sauvegarder efficacement les données, il suffit de les copier à plusieurs endroits. \\ | ||
+ | Le RAID permet donc d' | ||
+ | |||
+ | |||
+ | ==== Ce que RAID n'est pas ==== | ||
+ | |||
+ | Le RAID n'est pas une solution de sauvegarde, il s'agit d'une solution qui permet un rétablissement rapide de la situation lors d'un cas de figure favorable. | ||
+ | Les deux (ou plus) disques utilisés étant souvent de la même époque, de la même marque, et même de la même série, il se peut que vous n'ayez pas de chance et que plus d'un disque grille à la fois, dans ce cas, il est possible que vous ne puissiez pas récupérer la moindre bribe de données ... | ||
+ | Lors d'un événement qui conduirait à des dégâts électriques tous les composants de votre PC peuvent griller en même temps ... Ce genre de dégâts est fréquent si votre alimentation est dite " | ||
+ | |||
+ | Dans le cas d'un RAID 0, il ne s'agit aucunement d'une solution de sauvegarde, bien au contraire, le fait d' | ||
+ | Ce type de RAID est donc utile seulement dans les cas où les données sont non cruciales mais dont les besoins de performances de lecture/ | ||
+ | |||
+ | ==== Les types de RAID ==== | ||
+ | |||
+ | * RAID 0: 2 disques minimum - " | ||
+ | * RAID 1: 2 disques minimum - Taille du plus petit disque - En RAID 1 vos données sont copiées sur deux disques ou plus. C' | ||
+ | * RAID 5: 3 disques minimum - " | ||
+ | * RAID 6: 4 disques minimum - " | ||
+ | * RAID 10: 4 disques minimum (par paire) - 2 x " | ||
+ | |||
+ | Pour plus de détails, Wikipédia est bien fourni : \\ | ||
+ | [[wpfr> | ||
+ | |||
+ | |||
+ | ===== Mise en œuvre ===== | ||
+ | |||
+ | Tout ce qui suit fonctionne aussi bien avec la version serveur que la version Desktop d' | ||
+ | L' | ||
+ | L' | ||
+ | Mdadm remplace aussi avantageusement l' | ||
+ | L' | ||
+ | |||
+ | Le logiciel qui va nous permettre de remplir notre objectif s' | ||
+ | |||
+ | |||
+ | <note tips> | ||
+ | Si vous avez besoin de la prise en charge du RAID logiciel dès l' | ||
+ | une iso [[:/ | ||
+ | </ | ||
+ | |||
+ | ===== Pré-requis ===== | ||
+ | |||
+ | - Il faut les droits root/ | ||
+ | - Il faut un noyau supérieur à 2.6 (ne devrait pas être difficile à atteindre) | ||
+ | - Connexion Internet configurée et activée (utilisez le DHCP, si possible, cela évite de se casser la tête). | ||
+ | - Configurez votre fichier / | ||
+ | - Ayez au moins 2 disques durs (cas du RAID 0 ou 1) ou 3 disques durs (cas du RAID 5) ou 4 disques durs (cas du RAID 6 et RAID 10) | ||
+ | - ... branchés sur des contrôleurs IDE Sata/ | ||
+ | - Il est recommandé que les disques soient de même taille, mais ce n'est pas indispensable, | ||
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | ==== Installation de mdadm ===== | ||
+ | |||
+ | Il suffit d' | ||
+ | |||
+ | Un boot est nécessaire pour permettre la découverte des structures RAIDS pré-existantes dans le cas d'une nouvelle installation de l'OS en plus (ou à la place) d'une installation existante utilisant des RAIIDS. | ||
+ | |||
+ | |||
+ | ==== Configuration des disques durs ===== | ||
+ | |||
+ | Comme indiqué ci-dessus dans les pré-requis, | ||
+ | |||
+ | Il faut partitionner les disques durs que nous allons utiliser grâce à l' | ||
+ | |||
+ | < | ||
+ | sudo fdisk /dev/sdX | ||
+ | </ | ||
+ | |||
+ | |||
+ | Il faut comprendre que le `sdX` représente votre disque dur et que `X` représente sa lettre. Par exemple `sda`, `sdb`, `sdc`, etc... (vous pouvez utiliser [[Gnome-disk-utility]] pour connaître le " | ||
+ | |||
+ | |||
+ | |||
+ | Info : Pour des partitions de plus de 2.2To, il faut utiliser " | ||
+ | < | ||
+ | sudo gdisk /dev/sdX | ||
+ | </ | ||
+ | Choisir un type de table de partition " | ||
+ | |||
+ | |||
+ | Vous obtiendrez (grâce à l' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Il faut donc appliquer l' | ||
+ | |||
+ | fdisk vous demande alors le type de partition (p pour primaire ou e pour étendue).\\ | ||
+ | Nous n' | ||
+ | |||
+ | Vous entrez ensuite dans le processus de création de partition étendue : | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Tapez `1` comme montré ci-dessus | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Tapez sur la touche `Entrée` | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Tapez encore sur la touche `Entrée` | ||
+ | |||
+ | Tapez sur la touche ' | ||
+ | |||
+ | Tapez ' | ||
+ | |||
+ | Enfin, validez les modifications en tapant `w` : | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Vous venez de créer une partition primaire sur votre disque /dev/sdX | ||
+ | |||
+ | |||
+ | <note tip>**Il est aussi possible de créer des RAID sans l' | ||
+ | |||
+ | ==== Construction du volume RAID ===== | ||
+ | |||
+ | Nous pouvons maintenant utiliser mdadm pour construire notre volume RAID 5 : | ||
+ | < | ||
+ | sudo mdadm --create /dev/md0 --level=5 | ||
+ | </ | ||
+ | |||
+ | **sudo** permet de dire que le programme que nous allons exécuter aura les droits administrateur | ||
+ | **mdadm** est le nom du programme à utiliser (oui j' | ||
+ | **--create /dev/md0** permet de donner un nom à votre RAID. Ceci est le disque dur virtuel que vous êtes en train de créer à partir de vos disques | ||
+ | **--level=5** devra être modifié par le type de RAID que vous souhaitez utiliser (0, | ||
+ | **--raid-devices=4** devra être modifié pour donner le nombre de disques que vous souhaitez utiliser (ici 4, vous 2 ou 3 ou 5, etc) | ||
+ | **/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1** il s'agit de la liste des partitions que je dois ajouter à mon RAID. À vous de les adapter à votre configuration. Aidez-vous de [[Gnome-disk-utility]] si trou de mémoire ^^ | ||
+ | |||
+ | <note important> | ||
+ | https:// | ||
+ | |||
+ | <note help>Si cette commande échoue avec un message d' | ||
+ | < | ||
+ | sudo modprobe raid5 | ||
+ | sudo modprobe md | ||
+ | </ | ||
+ | |||
+ | Si l' | ||
+ | < | ||
+ | sudo echo raid5 >> / | ||
+ | sudo echo md >> / | ||
+ | </ | ||
+ | |||
+ | On trouvera aussi des informations intéressantes dans l' | ||
+ | </ | ||
+ | |||
+ | On termine cette construction par la daemonisation du volume RAID, c' | ||
+ | < | ||
+ | sudo mdadm --daemonise /dev/md0 | ||
+ | </ | ||
+ | |||
+ | <note help> Si la commande ci-dessus renvoie un message du type : | ||
+ | < | ||
+ | mdadm: --daemonise does not set the mode, and so cannot be the first option. | ||
+ | </ | ||
+ | essayez la commande suivante : | ||
+ | < | ||
+ | sudo mdadm --monitor --daemonise /dev/md0 | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | On peut maintenant demander quelques détails à notre disque virtuel : | ||
+ | |||
+ | < | ||
+ | sudo fdisk -l | ||
+ | sudo mdadm --detail /dev/md0 | ||
+ | </ | ||
+ | |||
+ | ==== Finalisation ===== | ||
+ | |||
+ | Il reste quelques modifications à effectuer : | ||
+ | |||
+ | - Il faut formater le volume RAID nouvellement créé | ||
+ | < | ||
+ | sudo mkfs.ext4 /dev/md0 | ||
+ | </ | ||
+ | **-Attention il vous est demandé de valider (y/N), il faut répondre O pour y** | ||
+ | - Déclarez ce volume dans `fstab` pour que le système le monte au démarrage (le système de fichier, pas le volume en lui même). Pour ce faire [[: | ||
+ | < | ||
+ | /dev/md0 / | ||
+ | </ | ||
+ | Cela signifie que le système montera au démarrage le contenu du volume RAID dans le dossier / | ||
+ | - Il ne reste plus qu'à créer le dossier /media/raid grâce à la commande mkdir : | ||
+ | < | ||
+ | sudo mkdir /media/raid | ||
+ | </ | ||
+ | |||
+ | <note tip> | ||
+ | Mettre immédiatement le raids sous monitorat avec alerte par courriel afin de recevoir une alerte lorsque l'un des disques vient à flancher et simuler un incident afin d' | ||
+ | |||
+ | |||
+ | ===== Utilisation/ | ||
+ | |||
+ | ==== Que faire pour agrandir l' | ||
+ | |||
+ | Une fois les disques connectés et les partitions créées avec fdisk, il suffit de les ajouter : | ||
+ | (par défaut, les partitions sont mise en SPARE) | ||
+ | < | ||
+ | sudo mdadm --manage /dev/md0 --add /dev/sdf1 | ||
+ | </ | ||
+ | Ensuite étendre l' | ||
+ | < | ||
+ | sudo mdadm --grow /dev/md0 --raid-devices=5 | ||
+ | </ | ||
+ | |||
+ | mdadm va partir en agrandissement (reshape) qui est une opération longue. On peut surveiller la progression avec l'une des trois commandes: | ||
+ | < | ||
+ | sudo mdadm --detail /dev/md0 | ||
+ | cat / | ||
+ | watch cat / | ||
+ | </ | ||
+ | <note help> | ||
+ | Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] | ||
+ | md50 : active raid5 sdd5[1] sdd10[6] sdd7[3] sdd4[0] sdd9[5] sdd6[2] sdd8[4] | ||
+ | 51900416 blocks super 1.2 level 5, 512k chunk, algorithm 2 [7/7] [UUUUUUU] | ||
+ | [> | ||
+ | </ | ||
+ | |||
+ | Lorsque l' | ||
+ | <code bash> cat / | ||
+ | Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] | ||
+ | md50 : active raid5 sdd5[1] sdd10[6] sdd7[3] sdd4[0] sdd9[5] sdd6[2] sdd8[4] | ||
+ | 155701248 blocks super 1.2 level 5, 512k chunk, algorithm 2 [7/7] [UUUUUUU] | ||
+ | [==> | ||
+ | |||
+ | Une fois l' | ||
+ | < | ||
+ | sudo resize2fs /dev/md0 | ||
+ | </ | ||
+ | [[https:// | ||
+ | |||
+ | |||
+ | |||
+ | <note tip> Il devrait être aussi possible de gérer le changement de taille du RAID avec l' | ||
+ | <code bash> | ||
+ | Unit boot.mount does not exist, proceeding anyway. | ||
+ | GParted 1.0.0 | ||
+ | configuration --enable-libparted-dmraid --enable-online-resize | ||
+ | libparted 3.3 </ | ||
+ | {{: | ||
+ | |||
+ | Quelques extraits récupérés du log. | ||
+ | <code bash> | ||
+ | Passe 1 : vérification des i-noeuds, des blocs et des tailles | ||
+ | L' | ||
+ | |||
+ | resize2fs -p '/ | ||
+ | </ | ||
+ | |||
+ | ==== Que faire pour agrandir l' | ||
+ | Ce choix n'est probablement pas le premier auquel on pense. Cependant lorsque les disques initiaux sont anciens et qu'ils approchent les 100000 heures de fonctionnement, | ||
+ | 1) Lancer l' | ||
+ | 2) Déclarer un disque inutilisable. La commande se fait en quelques secondes. | ||
+ | <code bash> | ||
+ | 3) Vérifier que le disque n'a plus rien d' | ||
+ | <code bash> | ||
+ | 4) Démonter le disque et le remplacer par le nouveau disque. Cette opération peut nécessiter | ||
+ | 5) Formater le nouveau disque. Il conservera certainement le même nom. Il faut lui créer une table de partition GPT. Il faut lui remettre les " | ||
+ | 6) Mettre le disque dans le circuit et regarder la remise en état se faire. | ||
+ | <code bash> | ||
+ | watch -n 60 cat / | ||
+ | 7) Lorsque tous les disques opérationnels sont traités, identifier et supprimer tous les disques de secours s'il en existe. | ||
+ | <code bash> | ||
+ | sudo mdadm --manage /dev/md0 --remove / | ||
+ | 8) Procéder à l' | ||
+ | <code bash> | ||
+ | sudo mdadm --detail /dev/md0 | grep Size | ||
+ | sudo resize2fs / | ||
+ | |||
+ | |||
+ | ==== Que faire lorsqu' | ||
+ | |||
+ | Ne paniquez pas ! Vous n'avez pas perdu de données. | ||
+ | L' | ||
+ | Maintenant que vous avez identifié le disque dur défectueux, | ||
+ | |||
+ | 1. Pour cela, on utilise mdadm : | ||
+ | |||
+ | < | ||
+ | mdadm --manage /dev/md0 --set-faulty /dev/sdb1 | ||
+ | </ | ||
+ | |||
+ | Explication : | ||
+ | |||
+ | On utilise toujours le paramètre `%%--manage%%` de mdadm pour gérer le volume RAID. | ||
+ | On utilise l' | ||
+ | |||
+ | 2. Une fois déclaré défaillant, | ||
+ | |||
+ | < | ||
+ | mdadm --manage /dev/md0 --remove /dev/sdb1 | ||
+ | </ | ||
+ | |||
+ | Vous pouvez maintenant retirer le disque défaillant en toute sécurité et le remplacer par un disque sain. | ||
+ | |||
+ | 3. Une fois le remplacement effectué, il faut ajouter un disque sain dans le volume RAID pour bénéficier à nouveau de la tolérance de panne (cette opération doit être précédée du partitionnement du nouveau disque, aidez-vous des descriptions faites plus haut) : | ||
+ | |||
+ | < | ||
+ | mdadm --manage /dev/md0 --add /dev/sdb1 | ||
+ | </ | ||
+ | |||
+ | Maintenant vous devez patienter, le temps que le volume Raid se reconstruise. Pendant cette phase de reconstruction les performances peuvent être altérées. Mais la reconstruction ralentit si vous avez besoin des disques. | ||
+ | |||
+ | ==== Que faire pour diminuer l' | ||
+ | Le besoin de supprimer définitivement un disque d'un RAID est certainement rare. | ||
+ | La documentation pour cette réalisation n'est pas pléthorique. Voici une proposition de mode d' | ||
+ | Cela est certainement valable pour les RAID6.\\ | ||
+ | Les essais réalisés montrent que le risque est inexistant si des arrêts accidentels ont lieu pendant l' | ||
+ | Le principe est de d' | ||
+ | Il n'y a pas d' | ||
+ | Il n'y a pas d' | ||
+ | Si la réalisation manuelle est mal faite, les données utilisateurs sont irrémédiablement perdues.\\ | ||
+ | Il faudra démonter le RAID pendant | ||
+ | |||
+ | 1) Trouver la taille que peut héberger une unité physique du RAID. L' | ||
+ | <code bash> | ||
+ | Used Dev Size : 5237760 (5.00 GiB 5.36 GB) </ | ||
+ | 2) Trouver la taille actuelle occupée par les données du RAID.\\ | ||
+ | Supprimer d' | ||
+ | <code bash> | ||
+ | Sys. de fichiers blocs de 1K Utilisé Disponible Uti% Monté sur | ||
+ | / | ||
+ | En déduire le nombre de disques nécessaires et la taille du système de fichier.\\ | ||
+ | Nombre de disques = taille du système de fichier utilisé divisé par la taille d'une unité physique arrondi à l' | ||
+ | Taille du système de fichier= Nombre de disques trouvés multiplié par la taille d'une unité physique.\\ | ||
+ | **Nombre de disques devant rester dans le RAIDS: Ajouter 1 (RAID5) ou 2 (RAID6) pour prendre en compte l' | ||
+ | Ici dans le contexte 4 et 15713280 \\ | ||
+ | 3) Démonter le raids. Il ne va plus être disponible pendant les deux opérations de réduction de taille ci-dessous. C'est une contrainte du logiciel de base. | ||
+ | <code bash> | ||
+ | 4) Contrôler le système de fichier du raids. Cette opération peut être faite en utilisant gparted permettant un suivi de l' | ||
+ | <code bash> | ||
+ | 5) Rétrécir | ||
+ | <code bash> | ||
+ | resize2fs 1.45.5 (07-Jan-2020) | ||
+ | resize2fs: La nouvelle taille est plus petite que le minimum (4991762)</ | ||
+ | Comme on le voit dans cet exemple, on ne risque pas de diminuer plus que la taille calculée.\\ | ||
+ | Si ce contexte arrive, il faut certainement revoir les opérations de calcul.\\ | ||
+ | Si l' | ||
+ | <code bash> | ||
+ | resize2fs 1.45.5 (07-Jan-2020) | ||
+ | resize2fs: La nouvelle taille est plus petite que le minimum (4438811) | ||
+ | 6) Itérer sur la réduction minima, cela diminuera par petites entités.\\ | ||
+ | A chaque itération, multiplier la nouvelle taille obtenue par le coefficient de taille (3 dans le contexte).\\ | ||
+ | Si la valeur est enfin inférieure, | ||
+ | <code bash> | ||
+ | resize2fs 1.45.5 (07-Jan-2020) | ||
+ | Le système de fichiers a déjà 4434586 blocs (4k). Rien à faire ! </ | ||
+ | Il est alors possible de faire le point en remontant le système de fichier puis regarder la situation. | ||
+ | <code bash> | ||
+ | Sys. de fichiers blocs de 1K Utilisé Disponible Uti% Monté sur | ||
+ | / | ||
+ | Dans ce contexte, on voit qu'on ne sait pas récupérer tout l' | ||
+ | Il reste la solution de supprimer un disque en moins pour que cela tienne...\\ | ||
+ | Le contexte va donc devenir: Conserver **5** disques avec une taille de 20954040 KiO | ||
+ | <code bash> | ||
+ | resize2fs 1.45.5 (07-Jan-2020) | ||
+ | En train de redimensionner le système de fichiers sur /dev/md55 à 5237760 (4k) blocs. | ||
+ | Le système de fichiers sur /dev/md55 a maintenant une taille de 5237760 blocs (4k).</ | ||
+ | 7) Diminuer la taille de l' | ||
+ | <code bash> | ||
+ | Cette commande est sans réponse. L' | ||
+ | Si par accident, une faute de frappe a lieu, il est possible de la relancer. \\ | ||
+ | Attention: La valeur frappée ne doit pas être inférieure à la vraie valeur du système de fichier. Cela empêcherait de le monter et le rendrait inutilisable et irréparable aussitôt que le nombre de disques du RAID sera modifié.\\ | ||
+ | |||
+ | 8) Remonter éventuellement le raids s'il doit être utilisé en lecture et lancer dans un autre terminal | ||
+ | <code bash> | ||
+ | 9) Eventuellement, | ||
+ | <code bash> | ||
+ | 10) Indiquer que le nombre de disques pour gérer le RAID va être diminué de un en précisant la nouvelle valeur. | ||
+ | <code bash> | ||
+ | mdadm: Need to backup 10240K of critical section..</ | ||
+ | Il ne reste plus qu'à surveiller et patienter. | ||
+ | <code bash> | ||
+ | 11) Indiquer que le disque désiré doit être supprimé. | ||
+ | <code bash> | ||
+ | mdadm: set /dev/sdd7 faulty in / | ||
+ | Il ne reste plus qu'à surveiller et patienter. | ||
+ | <code bash> | ||
+ | Si, par chance, le disque à retirer | ||
+ | |||
+ | 12) Enlever le disque désiré du raids. | ||
+ | <code bash> | ||
+ | mdadm: hot removed /dev/sdd7 from / | ||
+ | 13) Itérer sur les actions décrites aux points | ||
+ | Si la commande de suppression du disque donne ce retour | ||
+ | <code bash> | ||
+ | mdadm: this change will reduce the size of the array. | ||
+ | use --grow --array-size first to truncate array. | ||
+ | e.g. mdadm --grow /dev/md55 --array-size 15713280</ | ||
+ | La tentation est grande de faire un copier/ | ||
+ | Elle fonctionne très bien! La taille du RAID devient alors nettement plus petite que le système de fichier qu'il héberge.\\ | ||
+ | Le système de fichier ne sera plus montable ni réparable.\\ | ||
+ | Le logiciel aurait du proposer la commande suivante: | ||
+ | <code bash> | ||
+ | Mais il ne connaît absolument pas le système de fichier qu'il héberge et ne peut donc pas le faire!!!\\ | ||
+ | Il est nécessaire de faire la commande de resize. Si celle-ci ne fonctionne pas il n'y a pas de solution mais c' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Comment migrer les données vers une nouvelle machine ? ==== | ||
+ | |||
+ | Cette partie va montrer comment migrer les données d'un RAID à un autre RAID. Je vais considérer qu'il s'agit ici de la création d'une nouvelle machine pour recouvrir tous les aspects du problème. | ||
+ | Il faut d' | ||
+ | Pour cela il faut créer un nouveau fichier FIFO mais pour ne pas rentrer en conflit avec le fichier existant nous allons lui donner l' | ||
+ | |||
+ | < | ||
+ | mknod /dev/md1 b 9 1 | ||
+ | </ | ||
+ | |||
+ | Ensuite il ne reste plus qu'à démarrer le vieux RAID comme suit : | ||
+ | |||
+ | < | ||
+ | mdadm -A /dev/md1 --update=super-minor -m0 /dev/sd... /dev/sd... | ||
+ | </ | ||
+ | |||
+ | La commande précédente demande l' | ||
+ | |||
+ | <note important> | ||
+ | mdadm: --update=super-minor not understood for 1.x metadata | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | mdadm: /dev/md2 has been started with 3 drives (out of 4) and 1 rebuilding. | ||
+ | </ | ||
+ | |||
+ | |||
+ | Pour s' | ||
+ | |||
+ | < | ||
+ | cat / | ||
+ | </ | ||
+ | |||
+ | La sortie devrait ressembler à cela : | ||
+ | |||
+ | < | ||
+ | md1 : active raid5 sda[0] sdb[3] sde[2] sdf[1] | ||
+ | 1465159488 blocks level 5, 128k chunk, algorithm 2 [4/4] [UUUU] | ||
+ | | ||
+ | md0 : active raid5 sdc[0] sdg[2] sdd[1] | ||
+ | 1953524992 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU] | ||
+ | </ | ||
+ | |||
+ | Si vous voulez faire persister les informations sur ce RAID vous pouvez passer la commande suivante : | ||
+ | |||
+ | < | ||
+ | mdadm --daemonise /dev/md1 | ||
+ | </ | ||
+ | |||
+ | ===== Problèmes & solutions courantes ===== | ||
+ | ==== Que faire si je n' | ||
+ | Ne pas agir à la hâte ! | ||
+ | |||
+ | |||
+ | <note warning> | ||
+ | < | ||
+ | Car c'est certainement un des meilleurs moyen de rendre votre grappe raid irrécupérable. (Même si dans certains cas, et en particulier après avoir trop bidouillé, ça peut être le seul moyen de réassembler votre raid)</ | ||
+ | |||
+ | |||
+ | Essayez d' | ||
+ | |||
+ | Si une grappe raid s' | ||
+ | |||
+ | \\ | ||
+ | Ensuite tentez de relancer l' | ||
+ | |||
+ | <note warning> | ||
+ | </ | ||
+ | \\ | ||
+ | Vous pouvez éventuellement forcer l' | ||
+ | |||
+ | <note warning> | ||
+ | </ | ||
+ | <note important> | ||
+ | |||
+ | Et si vous êtes amené à utiliser mdadm - -create pour réassembler votre grappe, l' | ||
+ | </ | ||
+ | |||
+ | ==== Problème de taille de block & superblock ==== | ||
+ | Si en faisant une vérification, | ||
+ | < | ||
+ | La taille physique du périphérique est de 7727232 blocs | ||
+ | Le superbloc ou la table des partitions est peut-être corrompue ! | ||
+ | </ | ||
+ | ou ceci (au boot par exemple): | ||
+ | < | ||
+ | my_documents: | ||
+ | The physical size of the device is 7727232 blocks | ||
+ | Either the superblock or the partition table is likely to be corrupt! | ||
+ | |||
+ | my_documents: | ||
+ | (i.e., without -a or -p options) | ||
+ | </ | ||
+ | |||
+ | Cela provient certainement du fait que vous avez construit le raid sans recréer un système de fichier par dessus ! Dans ce cas faites ceci : | ||
+ | < | ||
+ | < | ||
+ | Cela va redimensionner la partition en fonction des info du superblock. pour être sûr revérifier (via e2fsck) la partition et cela devrait aller sans aucun problème ! | ||
+ | |||
+ | |||
+ | ==== Device or ressource busy ... ==== | ||
+ | Si, au démarrage, vous avec un message du genre : | ||
+ | > | ||
+ | > | ||
+ | |||
+ | Alors que /dev/sdX est un membre du raid et n'est pas lui-même présent dans fstab, cette solution peut peut-être vous aider : | ||
+ | (on sauvegarde pour le cas où ...) | ||
+ | < | ||
+ | Ensuite redémarrer cela devrait être résolu. | ||
+ | |||
+ | ==== md127 ==== | ||
+ | <note tip>Rien ne prouve que le changement de nom soit grave. Il est même possible que les nouveaux O.S. numérotent à partir de 127 en décroissant. Faites très attention lors de vos corrections. Commencer par vérifier que vos données sont sauvées avant de vouloir rectifier.</ | ||
+ | <note tips> | ||
+ | En changeant de système un RAID1 mdadm, la grappe peut-être reconnu comme /dev/md127 | ||
+ | <code bash> | ||
+ | cat / | ||
+ | Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] | ||
+ | md127 : active (auto-read-only) raid1 sda1[0] sdb1[1] | ||
+ | 488385472 blocks [2/2] [UU] | ||
+ | | ||
+ | unused devices: < | ||
+ | </ | ||
+ | La méthode donnée sur ce lien a bien fonctionné avec une [[: | ||
+ | |||
+ | < | ||
+ | <code bash> | ||
+ | #tout oublier et rescanner | ||
+ | sudo mdadm -Ss | ||
+ | # Assembler l' Array pré-existante (à adapter) | ||
+ | sudo mdadm -A /dev/md0 / | ||
+ | # s'en souvenir | ||
+ | sudo mdadm --detail --scan >> / | ||
+ | # mettre à jour initrd | ||
+ | sudo update-initramfs -v -u | ||
+ | # vous pouvez redémarrer /dev/md0 sera présent. | ||
+ | sudo reboot | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Avec la version **16.04.1** et une ligne de création toute simple: | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | et faire le montage des partitions md127 | ||
+ | |||
+ | Avec [[:precise| Ubuntu 12.04]] | ||
+ | Si votre RAID est non fonctionnel et reconnu comme /dev/md127 | ||
+ | |||
+ | Cette erreur semble principalement apparaître lors d'une création de volume RAID avec l’outil graphique | ||
+ | |||
+ | Il faut commencer par récupérer le numéro de UUID de votre volume RAID. Pour ce faire, il faut que votre RAID soit monté avec l' | ||
+ | |||
+ | < | ||
+ | |||
+ | Vous devez avoir ce type de résultat avec le numéro de UUID : | ||
+ | |||
+ | < | ||
+ | |||
+ | Déclarer votre volume RAID dans / | ||
+ | |||
+ | < | ||
+ | |||
+ | Exemple extrait d'un des threads ci-dessous : | ||
+ | |||
+ | < | ||
+ | |||
+ | Éventuellement ajouter votre volume dans /etc/fstab (pour le montage au démarrage du système) après avoir créé votre point de montage (ici ->/ | ||
+ | |||
+ | < | ||
+ | |||
+ | Mettre à jour [[https:// | ||
+ | |||
+ | < | ||
+ | |||
+ | De nombreux threads traitent de ce sujet (étonnamment toujours pas résolu !): | ||
+ | <note tip>Ce phénomène est lié à la présence de la variable ' | ||
+ | |||
+ | En supprimant cette variable de la ligne et après avoir mis à jour ' | ||
+ | </ | ||
+ | |||
+ | http:// | ||
+ | |||
+ | http:// | ||
+ | |||
+ | http:// | ||
+ | |||
+ | http:// | ||
+ | |||
+ | https:// | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Droits d' | ||
+ | |||
+ | Lorsque votre RAID est activé automatiquement au boot, il se peut qu'en le montant avec le gestionnaire de fichier Nautilus, vous n'ayez pas les droits d' | ||
+ | |||
+ | Pour corriger cela, il faut d' | ||
+ | < | ||
+ | total 8 | ||
+ | drwxr-xr-x 2 root root 4096 juil. 7 02:03 cdrom | ||
+ | drwxr-xr-x 3 root disk 4096 nov. 30 15:48 my_raid | ||
+ | </ | ||
+ | On voit que le montage est réalisé sur '/ | ||
+ | Il faut remédier à cela en intégrant votre utilisateur dans le groupe ' | ||
+ | < | ||
+ | sudo adduser < | ||
+ | sudo chmod -R 775 / | ||
+ | </ | ||
+ | |||
+ | Vous aurez maintenant, en tant que membre du groupe ' | ||
+ | |||
+ | Si cela ne résout pas le problème, une solution peut consister à déplacer le point de montage de /media/raid vers / | ||
+ | |||
+ | ===== Des idées pour aller plus loin ===== | ||
+ | |||
+ | |||
+ | ==== Découpage du volume avec LVM ==== | ||
+ | |||
+ | Lorsque l'on crée un volume RAID, on se retrouve vite avec de capacités très importantes. Or, créer un seul système de ficher de 500 Go, voire beaucoup plus, n'est pas forcement une bonne idée ! Pour pouvoir découper cet espace de stockage à volonté et pouvoir créer autant de système de fichier que nécessaire (et les redimensionner au besoin) il peut être très intéressant d' | ||
+ | |||
+ | [[:lvm]] | ||
+ | |||
+ | Il existe aussi la possibilité de mettre du [[https:// | ||
+ | |||
+ | |||
+ | |||
+ | ==== La combinaison des niveaux de RAID ==== | ||
+ | |||
+ | Vous pouvez très bien combiner les niveaux de RAID. | ||
+ | La manière la moins onéreuse de créer un RAID combiné est d' | ||
+ | |||
+ | On pourra prendre comme exemple le RAID 1,0 qui fonctionne très bien. | ||
+ | Imaginons que nous ayons 6 disques durs de 30Go, plus un disque dur système et trois cartes-filles supportant le RAID 1. Créons donc trois ensembles RAID 1 (mirroring) qui feront tous 30Go. | ||
+ | Appliquons ensuite un RAID 0 au niveau logiciel. | ||
+ | On possède alors un seul ensemble de 90Go (3 x 30Go) et une tolérance de panne de trois disques durs (1 par unité RAID 1). | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Un disque de spare : votre roue de secours en cas de défaillance ==== | ||
+ | |||
+ | Pour ceux qui sont intéressés par la commande mdadm, sachez qu' | ||
+ | |||
+ | Voici l' | ||
+ | < | ||
+ | mdadm --create /dev/md0 --level=1 --raid-devices=2 --spare-devices=1 /dev/sdX | ||
+ | </ | ||
+ | |||
+ | Par contre, si vous avez déjà un array RAID en service, sur sda2 et sdb2, et que vous voulez ajouter le spare sdc2 (préalablement partitionné à l' | ||
+ | < | ||
+ | Une fois votre disque supplémentaire connecté, il vous faut créer les mêmes partitions, pour cela tapez en root dans un terminal (sudo -i, ou sudo bash je vous le rappelle) : | ||
+ | |||
+ | < | ||
+ | sfdisk -d /dev/sda > sda.out | ||
+ | sfdisk /dev/sdc < sda.out | ||
+ | </ | ||
+ | |||
+ | ou sda est le disque " | ||
+ | |||
+ | |||
+ | < | ||
+ | mdadm --manage /dev/md0 --add /dev/sdc2 | ||
+ | </ | ||
+ | |||
+ | Vérifiez alors en tapant : | ||
+ | < | ||
+ | mdadm --detail /dev/md0 | ||
+ | </ | ||
+ | |||
+ | Et vous verrez votre nouveau disque sdc2 comme spare disk. | ||
+ | |||
+ | |||
+ | |||
+ | ==== Test ==== | ||
+ | |||
+ | Pour tester, et être sûr que tout fonctionne, faisons un test (qui revient à débrancher un disque) : | ||
+ | < | ||
+ | mdadm --manage /dev/md0 --set-faulty /dev/sdb | ||
+ | mdadm --manage /dev/md0 --remove /dev/sdb | ||
+ | </ | ||
+ | |||
+ | Alors le spare disque (ou le miroir...) prend le relais automatiquement. | ||
+ | Si vous n'avez pas de spare, remettez le disque en service : | ||
+ | < | ||
+ | mdadm --manage /dev/md0 --add /dev/sdb2 | ||
+ | </ | ||
+ | |||
+ | Constatez la reconstruction avec : | ||
+ | < | ||
+ | cat / | ||
+ | </ | ||
+ | |||
+ | Chaque disque retiré puis remis fera une reconstruction complète. Pour un array de 40 Go, comptez 15 min pour atteindre les 100% (60 mo/s environ). Évitez de rebooter la machine pendant la progression. | ||
+ | |||
+ | |||
+ | Sans simuler la défaillance d'un disque, voici un outil qui vous permettra de vérifier si vos disques sont bien synchronisés, | ||
+ | < | ||
+ | sudo / | ||
+ | </ | ||
+ | |||
+ | Pour ceux qui fouillent un peu, les fichiers de configurations sont | ||
+ | * [[file:/// | ||
+ | * [[file:/// | ||
+ | |||
+ | |||
+ | ==== Supervision du RAID ==== | ||
+ | Dans le fichier mdadm.conf ou lorsque l'on utilise mdadm en mode monitoring il est possible de se faire envoyer un email lorsqu' | ||
+ | |||
+ | L' | ||
+ | * Des traces d' | ||
+ | * Un script d' | ||
+ | |||
+ | Pour les logs système, si vous utilisez la ligne de commande suivante : | ||
+ | < | ||
+ | mdadm --monitor --syslog --delay=1800 /dev/md0 | ||
+ | # | ||
+ | </ | ||
+ | Ou encore, via le fichier de configuration / | ||
+ | < | ||
+ | # START_DAEMON: | ||
+ | # | ||
+ | START_DAEMON=true | ||
+ | |||
+ | # DAEMON_OPTIONS: | ||
+ | # | ||
+ | DAEMON_OPTIONS=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Cependant, le mieux et le plus intéressant reste un script maison. Plusieurs paramètres sont fournis par mdadm : | ||
+ | * $1 : chaîne de caractères décrivant ce qui s'est passé repris parmi celle-ci : | ||
+ | * SparesMissing : spare disque manquant | ||
+ | * Fail : un ou plusieurs disques défectueux | ||
+ | * RebuildStarted : un nouveau disque est présent et une reconstruction a débuté | ||
+ | * Rebuild20, 40, 60, 80 : reconstruction en cours à 20, 40, 60 ou 80% | ||
+ | * RebuildFinished : la reconstruction vient de finir | ||
+ | * SpareActive : disque spare vient d' | ||
+ | * $2 : nom du disque raid md concerné, par exemple /dev/md2 | ||
+ | * $3 : disque concerné, par exemple /dev/sda5 | ||
+ | |||
+ | Un exemple de programme se trouve [[file:/// | ||
+ | |||
+ | Pour tester son programme on peut utiliser ceci : | ||
+ | < | ||
+ | sudo mdadm --monitor --scan --oneshot --test --program / | ||
+ | </ | ||
+ | |||
+ | Afin de l' | ||
+ | ligne de commande, si vous lancez le RAID de cette manière : | ||
+ | < | ||
+ | mdadm --monitor --alert / | ||
+ | #ou -p ou --programm | ||
+ | #par defaut le delay est de 60 secondes | ||
+ | </ | ||
+ | |||
+ | Ou encore, via le fichier de configuration / | ||
+ | < | ||
+ | # PROGRAM | ||
+ | # programme qui sera exécuté en cas d' | ||
+ | PROGRAM / | ||
+ | </ | ||
+ | |||
+ | ==== Création d'un RAID sans avoir tous les disques ==== | ||
+ | Il est possible de créer un RAID sans avoir tous les disques au moment de la création. Pour cela au lieu de préciser /dev/sdXY on mettra missing. | ||
+ | Par exemple, dans le cas ci-dessous il faudra ajouter un disque plus tard : | ||
+ | < | ||
+ | mdadm -C /dev/md0 -l1 -n2 /dev/sda1 missing | ||
+ | </ | ||
+ | |||
+ | N.B.: | ||
+ | |||
+ | Pour créer un RAID 10 avec seulement deux disques, les deux autres disques, marqués comme manquants, devront être alternés avec ceux présents : | ||
+ | < | ||
+ | mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sda1 missing | ||
+ | </ | ||
+ | Si l'on met deux missing à la suite, cela ne fonctionne pas | ||
+ | |||
+ | Ensuite il suffit d' | ||
+ | < | ||
+ | mdadm --manage /dev/md0 --add /dev/sdb1 | ||
+ | </ | ||
+ | |||
+ | Attention, ne pas oublier de regarder que la reconstruction du disque est finie *AVANT* de redémarrer, | ||
+ | |||
+ | ==== Création d'un RAID1 sans avoir tous les disques et sans copie ==== | ||
+ | |||
+ | Dans l' | ||
+ | |||
+ | L' | ||
+ | |||
+ | On démonte le file system, puis on calcule la nouvelle taile du file system car le RAID1 va rajoute un bloc de contrôle : | ||
+ | < | ||
+ | |||
+ | cd && umount /dev/sda4 | ||
+ | TAILLE_INITIAL=$(fdisk -l /dev/sda4 2>/ | ||
+ | TAILLE_F=$(( $(( TAILLE_INITIAL / 1024 )) - 12 ))K | ||
+ | echo $TAILLE_INITIAL | ||
+ | echo $TAILLE_F | ||
+ | |||
+ | e2fsck -f /dev/sda4 | ||
+ | resize2fs /dev/sda4 $TAILLE_F | ||
+ | </ | ||
+ | Ici a partition est prete a accueillir le bloc de controle du raid. | ||
+ | On construit le RAID | ||
+ | < | ||
+ | mdadm --create /dev/md0 --metadata=1.0 --level=1 --raid-devices=2 missing /dev/sda4 | ||
+ | mdadm: /dev/sda4 appears to contain an ext2fs file system | ||
+ | size=3979656K | ||
+ | Continue creating array? y | ||
+ | mdadm: array /dev/md0 started. | ||
+ | |||
+ | e2fsck -f /dev/md0 | ||
+ | e2fsck 1.41.12 (17-May-2010) | ||
+ | La taille du système de fichiers (selon le superbloc) est de 525013 blocs | ||
+ | La taille physique du périphérique est de 524992 blocs | ||
+ | Le superbloc ou la table des partitions est peut-être corrompue ! | ||
+ | Arrêter< | ||
+ | |||
+ | Passe 1 : vérification des i-noeuds, des blocs et des tailles | ||
+ | Passe 2 : vérification de la structure des répertoires | ||
+ | Passe 3 : vérification de la connectivité des répertoires | ||
+ | Passe 4 : vérification des compteurs de référence | ||
+ | Passe 5 : vérification de l' | ||
+ | DATA : 12/131376 fichiers (0.0% non contigus), 156488/ | ||
+ | </ | ||
+ | On redimensionne le disque au cas où, mais cela ne devrait pas être utile. S'il indique qu'il fait une modification, | ||
+ | < | ||
+ | resize2fs /dev/md0 | ||
+ | resize2fs 1.41.12 (17-May-2010) | ||
+ | Le système de fichiers a déjà 525010 blocs. Rien à modifier ! | ||
+ | </ | ||
+ | On finit en marquant le disque comme étant un raid et on sauvegarde la configuration | ||
+ | < | ||
+ | ~# sfdisk --id /dev/sda 4 fd | ||
+ | |||
+ | ~# cp -a / | ||
+ | ~# mdadm --misc --detail --brief /dev/md0 | tee -a / | ||
+ | </ | ||
+ | |||
+ | Vérification du status : | ||
+ | |||
+ | < | ||
+ | ~# cat / | ||
+ | Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] | ||
+ | md0 : active (read-only) raid1 sda4[1] | ||
+ | 3979584 blocks [2/1] [_U] | ||
+ | |||
+ | ~# blkid /dev/md0 | ||
+ | /dev/md0: LABEL=" | ||
+ | # le raid à bien hérité du File system et du nom | ||
+ | |||
+ | # on vérifie qu'une entrée pour le RAID existe dans le ficher de configuration | ||
+ | tail / | ||
+ | </ | ||
+ | |||
+ | Mise en miroir : à partir du moment que le deuxième disque est disponible : | ||
+ | |||
+ | < | ||
+ | |||
+ | ~# mdadm --add /dev/md0 /dev/sdb4 | ||
+ | </ | ||
+ | |||
+ | On suit la reconstruction | ||
+ | |||
+ | < | ||
+ | |||
+ | watch "cat / | ||
+ | Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] | ||
+ | md0 : active raid1 sdb4[2] sda4[1] | ||
+ | 3152192 blocks [2/1] [_U] | ||
+ | [> | ||
+ | </ | ||
+ | |||
+ | ===== Un peu de référence ===== | ||
+ | * Comme toujours, une fois le paquet installé, de la doc est disponible [[file:/// | ||
+ | * < | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * <del> [[http:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | ---- | ||
+ | |||
+ | // |