Grosse galère (RAID / LVM)

Hello :slightly_smiling:

J’ai actuellement un serveur debian (OS installé sur un RAID1 de 2 SSD de 240GO + 3x4 TO de stockage sur HDD).

A l’époque (3/4 mois) j’avais paramétré mes 3 HDD pour faire une grappe RAID5 et je viens de me rendre compte qu’en fait mes disques ne sont pas en RAID5 mais en … “linear” :doh: sur lequel est monté 6 LV d’environ 100Go chacun.

Bref j’aimerai réparer cette erreur idiote en basculant (correctement ce coup-ci) vers un RAID5. Je suis conscient que je vais devoir sauvegarder/casser & recréer la grappe et réintégrer les données.

J’envisageais d’exporter les LV vers un HDD externe ou de faire un rsync complet et recréer les LV un à un après la mise en place du RAID.

Je viens ici pour avoir votre avis sur le problème et la façon dont je souhaite le résoudre, si c’est une bonne idée ou si il y a mieux à faire ?

Merci :006

Donc, si je comprends bien, tu as 12TB répartis en 3 disques, avec au plus 600GB utilisés, avec LVM.

Et tu voudrais faire un raid 5 avec les trois disques, donc obtenir une capacité de 8TB.

Donc la roadmap:

  • Libérer deux disques (disons sdb1 et sdc1), un par un. Tu commences par déplacer les données de ces disques ailleurs :

pvmove /dev/sdb1 vgreduce data /dev/sdb1 pvmove /dev/sdc1 vgreduce data /dev/sdc1

  • sdb et sdc sont désormais inutilisés, tu peux donc créer un raid dégradé avec (je me demande si la commande avec 2 devices fonctionne)
mdadm --create --verbose --force --assume-clean /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 missing
  • Tu peux ensuite ajouter ton raid dans le LV existant:
pvcreate /dev/md0
vgextend /dev/md0 data
  • Ensuite, tu déplaces les donnés pour retirer sda:

pvmove /dev/sda1 vgreduce data /dev/sda1

  • Et pour finir, l’ajout de sda dans le raid:
mdadm --add /dev/md0 /dev/sda1
mdadm --grow --raid-devices=3 /dev/md0

Voila l’idée, les commandes sont à vérifier, en particulier au niveau du raid
Globalement, ce devrait fonctionner;
Je me demande si tu peux faire tout ça à chaud, en prime :119

Si j’ai bien compris, le VG n’est pas constitué de 3 PV (un sur chaque disque) mais un seul PV qui est lui-même constitué par un ensemble RAID “linear” occupant les trois disques. Or d’après la documentation de mdadm il est impossible de retirer un élément d’un ensemble RAID “linear”. Il faudra donc transférer les données des LV sur un autre disque que ceux faisant partie de l’ensemble RAID avant de détruire l’ensemble RAID linear et en recréer un nouveau de type RAID 5.

Merci pour vos réponses !

Il y a 1 PV de 12To / 1VG / 6 LV dans une grappe linéaire /dev/md2 pour être précis

Je me demande juste qu’elle est la meilleure façon pour déplacer/recreer le raid/remettre les données :confused:

Je ne vois pas d’autre solution que de transférer les données des LV sur un autre disque avant de pouvoir détruire l’ensemble RAID linear et recréer un ensemble RAID 5 sur les trois disques de 4 To. Je vois deux approches possibles :

a) Sauvegarder le contenu des systèmes de fichiers de chaque LV avec rsync, tar ou équivalent. Cela nécessite autant d’espace sur le disque de sauvegarde que l’espace occupé dans ces systèmes de fichiers (600 Go maximum).
Supprimer le VG puis l’ensemble RAID linear.
Créer l’ensemble RAID 5, le VG avec un PV sur cet ensemble et les 6 LV.
Créer les systèmes de fichiers sur les LV et restaurer les données sauvegardées.

b) Créer un PV de taille suffisante pour contenir tous les LV (600 Go minimum) sur le disque de sauvegarde et l’ajouter au VG.
Déplacer tous les LV sur ce PV et retirer du VG le PV situé sur l’ensemble RAID linear.
Supprimer l’ensemble RAID linear.
Créer l’ensemble RAID 5 sur les trois disques.
Créer un PV sur l’ensemble RAID 5 et l’ajouter au VG.
Déplacer tous les LV sur ce PV et retirer du VG le PV situé sur le disque de sauvegarde.
Cette méthode évite de détruire et recréer le VG et les LV. Je ferais quand même une sauvegarde avant.

Hmmmm okay!

je vais brancher un hdd de 1To direct en SATA dans le serv / faire un rsync / détruire le linéaire et refaire les pv/vg/lv. Pas le choix!

merci d’avoir confirmé et pour votre aide! Je ferai un petit retour de toute cette histoire

Autre solution:

  • rajouter ton nouveau disque dans le vg
  • utiliser pvmove pour déplacer les données bloc par bloc
  • retirer le raid du vg
  • retravailler les 3 disques
  • pareil dans l’autre sens

Sauf erreur, c’est ma solution b).

Ouais, j’adore cette solution

Il y a bien quelque-chose qui pourrait être essayé, ne serait-ce qu’au nom de la science. Mais je ne suis même pas certain que ce soit possible en pratique et cela comporte tellement de risques qu’il faut tout de même sauvegarder.

1 - Vérifier que les LVs du VG soient bien localisés au tout-début du VG. Dans ce cas précis, dans les premiers 600 GOs.

2 - Réduire la taille du Physical Volume supportant le VG avec [mono]pvresize[/mono]. Dans ce cas, à 700 GOs, admettons.

3 - démonter le système de fichiers, arrêter le VG ([mono]vgchange -an vg[/mono] puis [mono]vgremove vg[/mono] ?) puis arrêter le volume RAID1.

4 - mettre en place un device permettant de retrouver le PV sur le tout premier disque à l’aide de [mono]mdadm --examine /dev/premierDisque[/mono] pour trouver l’offset des données en secteurs de 512 octets et de [mono]losetup --offset (offsetSecteurs * 512) -f /dev/premierDisque[/mono] .

5 - Démarrer le VG (avec [mono]vgscan /dev/loopX[/mono] puis [mono]vgchange -a y vg[/mono] ?) et vérifier que les LVs soient bien détectés. Monter le système de fichiers pour le vérifier.

6 - Effacer le début et la fin des 2 autres disques durs qui servaient au volume RAID1 à grands coups de [mono]dd if=/dev/zero of=/dev/sdX[/mono] .

7 - Créer un volume RAID 5 dégradé incluant ces 2 disques durs.

8 - Déplacer les PE du VG du device loop vers le volume RAID5 (avec [mono]pvmove[/mono] ?).

9 - Vérifier que le VG marche bien avec le système de fichiers ETC.

10 - Détruire le device loop avec losetup -d /dev/loopX , effacer le début et la fin du 1er disque dur avec [mono]dd if=/dev/zero …[/mono] .

11 - Ajouter le 1er disque dur au volume RAID5 et laisser le volume se resynchroniser.

Une méthode que j’aurais certainement tenté si c’était sur mon serveur, pour le fun. Mais que je ne peux décemment pas conseiller.


AnonymousCoward

L’inconvénient de l’avantage de LVM, c’est qu’on ne sait pas (car normalement on n’a pas besoin de savoir) où sont physiquement les LV qu’on manipule. Cependant,

cette seule opération devrait suffire à regrouper tout le contenu du VG au début du volume RAID linear, donc sur un seul disque.

Reste à déterminer sur quel disque physique se trouve le début du volume RAID linear…

L’opération de backup sur le HDD externe avec rsync / re-création de la grappe RAID5 / remise en place des données s’est bien passée :slightly_smiling:

Merci pour votre soutien ! :006