Le meilleur moyen de faire évoluer le logiciel Linux RAID 1 vers RAID 10

22

mdadm ne semble pas prendre en charge la croissance d'un tableau du niveau 1 au niveau 10.

J'ai deux disques en RAID 1. Je veux ajouter deux nouveaux disques et convertir la matrice en une matrice RAID 10 à quatre disques.

Ma stratégie actuelle:

  1. Faites une bonne sauvegarde.
  2. Créez une matrice RAID 10 à 4 disques dégradée avec deux disques manquants.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove un disque de la matrice RAID 1.
  5. Ajoutez le disque disponible à la matrice RAID 10 et attendez la fin de la resynchronisation.
  6. Détruisez la matrice RAID 1 et ajoutez le dernier disque à la matrice RAID 10.

Le problème est le manque de redondance à l'étape 5.

Y a-t-il une meilleure façon?

Hans Malherbe
la source
5
N'oubliez pas l'étape 0. Faites une bonne sauvegarde de tout.
Anthony Lewis
Je crois que vos étapes sont correctes. Vous perdez la redondance pendant la période de copie des données d'un ensemble à un autre.
Kevin Kuphal
Est-il possible de créer un RAID10 4 disques dégradé?
pauska
1
Oui, vous utilisez simplement "/ dev / hda missing / dev / hdb missing", car sinon vous perdez une paire entière et tout s'écroule. La «réponse acceptée» à cette question, soit dit en passant, est complètement fausse et ne fonctionne pas.
womble
Je cherche également un bon moyen de le faire, et je pense que la méthode décrite dans la question est la meilleure que j'ai trouvée jusqu'à présent. La réponse de Mark Turner n'aide pas car elle crée un tableau de 2 appareils qui ne peut pas être remodelé en 4 appareils (les 2 autres peuvent uniquement être ajoutés comme pièces de rechange). Et la réponse de Suresh Kumar est la même que celle décrite dans la question, sauf qu'elle ne fonctionnera pas exactement comme ça; les appareils manquants doivent être les 2e et 4e, et non les 3e et 4e. À propos des étapes de la question: Je pense que l'étape 5 a une redondance complète et l'étape 6 a une redondance pour la moitié des données. En fait, je vois que les étapes étaient
renumbere

Réponses:

8

Avec linux softraid, vous pouvez créer une matrice RAID 10 avec seulement deux disques.

Noms des appareils utilisés ci-dessous:

  • md0 est l'ancien tableau de type / niveau RAID1.
  • md1 est le nouveau tableau de type / niveau RAID10.
  • sda1et sdb2sont de nouvelles partitions vides (sans données).
  • sda2et sdc1sont d'anciennes partitions (avec des données cruciales).

Remplacez les noms en fonction de votre cas d'utilisation. Utilisez par exemple lsblkpour afficher votre mise en page actuelle.

0) Sauvegarde, sauvegarde, sauvegarde, sauvegarde oh et sauvegarde

1) Créez la nouvelle baie (4 appareils: 2 existants, 2 manquants):

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Notez que dans cet exemple, la présentation sda1a une contrepartie manquante et sdb2une autre contrepartie manquante. Vos données sur md1ne sont pas sécurisées à ce stade (il s'agit en fait de RAID0 jusqu'à ce que vous ajoutiez des membres manquants).

Pour afficher la disposition et les autres détails de la matrice créée, utilisez:

mdadm -D /dev/md1

Remarque! Vous devez enregistrer la disposition du tableau:

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2) Formatez et montez. Le /dev/md1devrait être immédiatement utilisable, mais doit être formaté puis monté.

3) Copiez les fichiers. Utilisez par exemple rsync pour copier les données de l'ancien RAID 1 vers le nouveau RAID 10. (ce n'est qu'un exemple de commande, lisez les pages de manuel pour rsync)

rsync -arHx / /where/ever/you/mounted/the/RAID10

4) Échec de la 1ère partie de l'ancien RAID1 (md0) et ajoutez-le au nouveau RAID10 (md1)

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2

Remarque! Cela effacera les données de sda2. Le md0devrait toujours être utilisable mais seulement si l'autre membre du raid était pleinement opérationnel.

Notez également que cela commencera les processus de synchronisation / récupération md1. Pour vérifier l'état, utilisez l'une des commandes ci-dessous:

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

Attendez que la récupération soit terminée.

5) Installez GRUB sur la nouvelle baie (en supposant que vous démarrez à partir de celle-ci). Certains CD de secours / démarrage Linux fonctionnent mieux.

6) Démarrez sur une nouvelle baie. SI CELA A FONCTIONNÉ CORRECTEMENT Détruisez l'ancienne baie et ajoutez le disque restant à la nouvelle baie.

POINT DE NON RETOUR

À ce stade, vous détruirez les données sur le dernier membre de l'ancien tableau md0. Soyez absolument sûr que tout fonctionne.

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1

Et encore - attendez que la récupération md1soit terminée.

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7) Mettre à jour la configuration mdadm

N'oubliez pas de mettre à jour /etc/mdadm/mdadm.conf(supprimer md0).

Et enregistrez la configuration dans initramfs (pour être disponible après le redémarrage)

update-initramfs -u
Mark Turner
la source
1
D'où viennent les quatre disques?
womble
Eh? Je déclare clairement de créer la matrice avec 2 disques, de copier les données, d'échouer le raid 1 en supprimant un disque, d'ajouter ce disque au RAID10, puis de démarrer sur le RAID10, si cela a fonctionné, de détruire le RAID1 et de déplacer ce dernier disque vers le nouveau RAID ....
Mark Turner
4
Vous avez modifié votre réponse après mon commentaire. De plus, votre procédure donne un RAID-10 à deux disques avec deux pièces de rechange ... à peine un RAID-10 à quatre disques. Les volumes RAID-10 ne peuvent pas non plus être remodelés.
womble
2
J'ai exécuté les commandes telles que vous les avez fournies et je me retrouve avec un RAID-10 à deux disques avec deux pièces de rechange, comme indiqué par / proc / mdstat. C'est sur le noyau 2.6.30, avec mdadm v2.6.7.2.
womble
3
"mdadm: le tableau raid10 / dev / md1 ne peut pas être remodelé." Ceci est également mentionné dans la page de manuel mdadm.
womble
9

Suivez la même procédure que Mark Turner mais lorsque vous créez le tableau de raid, mentionnez 2 disques manquants

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Et puis passez à d'autres étapes.

En bref, créez RAID10 avec un total de 4 disques (dont 2 manquants), resynchronisez, ajoutez deux autres disques après cela.

Sam Whited
la source
6

Je viens de passer de LVM sur deux disques de 2 To mdadm RAID 1 à LVM sur quatre disques RAID 10 (deux originaux + deux nouveaux disques).

Comme @aditsu l'a noté, l'ordre des disques est important lors de la création de la baie.

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

Le code ci-dessus donne un tableau utilisable avec deux disques manquants (ajoutez des numéros de partition si vous n'utilisez pas des disques entiers). Dès que le troisième disque est ajouté, il commencera à se synchroniser. J'ai ajouté le quatrième disque avant la fin de la synchronisation du troisième. Il s'est affiché comme pièce de rechange jusqu'à la fin du troisième disque, puis a commencé la synchronisation.

Étapes pour ma situation:

  1. Faites une bonne sauvegarde.

  2. Créez une matrice RAID 10 à 4 disques dégradée avec deux disques manquants (nous appellerons les disques manquants n ° 2 et 4).

  3. Dites à votre femme de ne pas modifier / ajouter de fichiers qui l'intéressent

  4. Échec et retrait d'un disque de la matrice RAID 1 (disque 4).

  5. Déplacez les extensions physiques de la matrice RAID 1 vers la matrice RAID 10 en laissant le disque 2 vide.

  6. Tuez la matrice RAID 1 active, ajoutez ce disque maintenant vide (disque 2) à la matrice RAID 10 et attendez la fin de la resynchronisation.

  7. Ajoutez le premier disque retiré du RAID 1 (disque 4) à la matrice RAID 10.

  8. Donne à ta femme.

À l'étape 7, je pense que le lecteur 1, 2, OU 4 peut échouer (pendant la resynchronisation du disque 4) sans tuer le module RAID. Si le lecteur 3 tombe en panne, les données du module RAID sont grillées.

user75601
la source
+1, en particulier pour l'étape 3;)
-1, instruction peu claire, pas de femme, perdre mes données
ZAB
1

J'ai déplacé mon raid1 vers raid10 maintenant et même si cette page m'a aidé, mais il y a des choses qui manquent dans les réponses ci-dessus. En particulier, mon objectif était de garder les heures de naissance ext4.

la configuration était:

  • 2 disques raid1 de chaque type msdos et md0 avec partition ext4 et mbr avec msdos
  • 2 nouveaux disques frais devenant les nouvelles primaires (toutes de même taille)
  • résultant en un raid 4 disques md127 ext4 mais en raison de la taille j'ai dû passer de mbr à gpt
  • c'est mon disque personnel, donc aucune configuration de bootmanager n'est requise ou prévue
  • en utilisant mon ubuntu de tous les jours (donc: ne pas utiliser le disque de secours externe)
  • en utilisant gparted, dd et mdadm

comme quelqu'un l'a déjà dit: l' étape zéro doit être une sauvegarde et il peut toujours y avoir quelque chose qui ne va pas dans le processus, ce qui entraîne une perte de données extrême

  1. SAUVEGARDE

  2. configuration du nouveau raid

    1. créer un nouveau raid

      mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
      

      (J'ai trouvé que la mise en page est importante .. les 2e et 4e semblent être les doublons dans un raid par défaut "proche")

    2. définir la partition du raid que j'utilisais en configurant gparted gpt sur le md127 puis en ajoutant une nouvelle partition (ext4) de la taille de l'ancienne ou supérieure
  3. émigrer

    1. maintenant obtenir les données ... j'ai d'abord essayé d'utiliser rsync qui a fonctionné mais n'a pas réussi à garder l'heure de naissance ... utilisez dd pour cloner de l'ancien raid au nouveau

      dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
      

      ATTENDEZ-LE,
      vous pouvez vérifier en envoyant USR1 à ce processus

      kill -s USR1 <pid>
      
    2. réparer le raid
      gparted est un excellent outil: vous lui dites de vérifier et de réparer la partition et de la redimensionner à la taille complète de ce disque avec seulement quelques clics de souris;)

    3. définissez un nouvel uuid sur cette partition et mettez à jour votre fstab avec elle (changez uuid)

    4. stocker votre raid dans conf

      mdadm --examine --scan  >> /etc/mdadm/mdadm.conf
      

      et retirer l'ancien

      vim /etc/mdadm/mdadm.conf 
      
    5. redémarrez si vous n'êtes pas sur un système de rescus
  4. détruire l'ancien

    1. échouer le premier et l'ajouter au nouveau raid

      mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
      

      puis faites gpt sur cet appareil et définissez une nouvelle partition vide

      mdadm /dev/md127 --add /dev/sdc1
      

      ATTENDEZ-LE,
      vous pouvez vérifier avec

      cat /proc/mdstat
      
    2. arrête le deuxième

      mdadm --stop /dev/md0 
      

      puis faites gpt sur ce dernier appareil et définissez à nouveau une nouvelle partition vide

      mdadm /dev/md127 --add /dev/sdd1
      

      ATTENDEZ-LE à nouveau

Summer-Sky
la source
0

Je l'ai fait avec LVM. Configuration initiale: - sda2, sdb2 - et créé raid1 md1 sur le dessus. sda1 et sdb1 ont été utilisés pour le deuxième raid1 pour la partition / boot. - md1 était pv dans l'espace du groupe de volumes, avec quelques lvm dessus.

J'ai ajouté des disques sdc et sdd et y ai créé des partitions comme sur sda / sdb.

Alors:

  1. créé md10 comme:

    mdadm --create / dev / md10 --level raid10 --raid-devices = 4 / dev / sdc2 manquant / dev / sdd2

  2. étendre vg dessus:

    pvcreate / dev / md10 espace vgextend / dev / md10

  3. volumes déplacés de md1 à md10:

    pvmove -v / dev / md1 / dev / md10

(attendre la fin) 4. réduire le groupe de volumes:

vgreduce space /dev/md1
pvremove /dev/md1
  1. arrêter le tableau md1:

    mdadm -S / dev / md1

  2. ajouter des disques de l'ancien md1 au md10:

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. mettre à jour la configuration dans /etc/mdadm/mdadm.conf:

    mdadm -E --scan >> / dev / mdadm / mdadm.conf

(et enlevez-y l'ancien md1)

Tout est fait sur le système en direct, avec des volumes actifs utilisés pour les kvm;)

indéfinir
la source