Comment redimensionner la matrice RAID1 avec mdadm?

12

J'ai exécuté Ubuntu 11.04 (noyau 2.6.38-11). J'ai remplacé 2x160 Go par des disques 2x500 Go. Ils sont configurés en RAID1.

Les tables de partition affichent les bonnes tailles. Voici sfdisk:

# sfdisk -d /dev/sdb
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=       63, size=   192717, Id=fd, bootable
/dev/sdb2 : start=   192780, size=  7807590, Id=fd
/dev/sdb3 : start=  8000370, size=968767695, Id=fd
/dev/sdb4 : start=        0, size=        0, Id= 0

Et fdisk:

# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006c78f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          12       96358+  fd  Linux raid autodetect
/dev/sdb2              13         498     3903795   fd  Linux raid autodetect
/dev/sdb3             499       60801   484383847+  fd  Linux raid autodetect

Mais je ne vois pas le nouvel espace:

root@green:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md2              143G  134G  8.3G  95% /


root@green:~# mdadm --examine /dev/sdb3
/dev/sdb3:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : b8f83980:f60d820c:74c46fbf:0baa68bc
  Creation Time : Sun Mar 29 18:48:46 2009
     Raid Level : raid1
  Used Dev Size : 152247936 (145.19 GiB 155.90 GB)
     Array Size : 152247936 (145.19 GiB 155.90 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2

    Update Time : Mon Oct 10 19:22:36 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 7b5debb7 - correct
         Events : 10729526


      Number   Major   Minor   RaidDevice State
this     0       8       19        0      active sync   /dev/sdb3
   0     0       8       19        0      active sync   /dev/sdb3
   1     1       8        3        1      active sync   /dev/sda3

J'ai essayé mdadm et resize2fs:

# mdadm --grow /dev/md2 --size=max
mdadm: component size of /dev/md2 has been set to 152247936K

# resize2fs /dev/md2 
resize2fs 1.41.14 (22-Dec-2010)
The filesystem is already 38061984 blocks long.  Nothing to do!

Des idées?

Ajouté par demande

# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md2 : active raid1 sdb3[0] sda3[1]
      152247936 blocks [2/2] [UU]

md0 : active raid1 sdb1[0] sda1[1]
      96256 blocks [2/2] [UU]

md1 : active raid1 sdb2[0] sda2[1]
      3903680 blocks [2/2] [UU]

unused devices: <none>

partitions

# cat /proc/partitions 
major minor  #blocks  name

   8        0  488386584 sda
   8        1      96358 sda1
   8        2    3903795 sda2
   8        3  152248005 sda3
   8       16  488386584 sdb
   8       17      96358 sdb1
   8       18    3903795 sdb2
   8       19  152248005 sdb3
   9        1    3903680 md1
   9        0      96256 md0
   9        2  152247936 md2

séparés:

# parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print all                                                        
Model: ATA WDC WD5000AAKX-0 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      32.3kB  98.7MB  98.7MB  primary  ext3            boot, raid
 2      98.7MB  4096MB  3997MB  primary  linux-swap(v1)  raid
 3      4096MB  500GB   496GB   primary  ext3            raid


Model: ATA WDC WD5000AAKS-4 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      32.3kB  98.7MB  98.7MB  primary  ext3            boot, raid
 2      98.7MB  4096MB  3997MB  primary  linux-swap(v1)  raid
 3      4096MB  500GB   496GB   primary  ext3            raid


Model: Linux Software RAID Array (md)
Disk /dev/md1: 3997MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system     Flags
 1      0.00B  3997MB  3997MB  linux-swap(v1)


Model: Linux Software RAID Array (md)
Disk /dev/md0: 98.6MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  98.6MB  98.6MB  ext3


Model: Linux Software RAID Array (md)
Disk /dev/md2: 156GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End    Size   File system  Flags
 1      0.00B  156GB  156GB  ext3

Commentaire par e-mail:

le problème est dans les métadonnées, il vous suffit d'assembler le tableau de raid avec le paramètre --update devicesize

et après -G / dev / md? -z max fera le travail :)

Paul Schreiber
la source
Quelle est la sortie de cat /proc/mdstat? Et alors cat /proc/partitions?
Steven lundi
Ajout de la sortie ci-dessus.
Paul Schreiber
Vous n'avez pas mentionné comment avez-vous copié vos données sur de nouveaux disques. Cependant, cela peut fortement influencer la réponse.
poige
J'ai copié les données sur les nouveaux disques en les partitionnant avec sfdisk, en utilisant mdadm --add et en laissant la synchronisation des données se terminer.
Paul Schreiber
@Paul Schreiber, sfdiskvous dites (?)… Voulez-vous dire en disant que vous avez également copié le schéma de partitionnement du disque?
poige

Réponses:

9

Utilisez simplement

mdadm --grow --size max /dev/md2

Ensuite, vous pourrez utiliser

resize2fs /dev/md2

Pour laisser le système de fichiers correspondre à la taille du raid. Tout cela se fait en ligne sans même démonter le md2.

Zaar Hai
la source
1
La commande complète:resize2fs -p /dev/md2
Milan Kerslager
@MilanKerslager, que fait- -pil là - bas?.
Jaime Hablutzel
1
@JaimeHablutzel -p est une barre de pourcentage d'achèvement afin que vous sachiez ce qui se passe, car cela peut prendre un certain temps (la réponse d'origine a déjà été corrigée).
Milan Kerslager
2

J'utilise régulièrement mdadm et le considère comme l'un des utilitaires Linux les plus dangereux. Cependant, si vous utilisez les bonnes mesures de sécurité, vous pouvez éviter la plupart des cas de perte de données potentielles Sauvegardez toutes vos données !!! J'ai été mordu deux fois par mdadm dans le passé, perdu plus de 700 Go de données et très très peu de données ont pu être récupérées, vous a-t-on prévenu.

Il y a de très bonnes chances que vous deviez recréer la matrice RAID car mdadm ne s'attend pas ou ne compense pas les disques qui augmentent soudainement de taille. Il utilisera la taille indiquée dans le superbloc de raid et non le lecteur lui-même. À condition que les disques soient déjà synchronisés, vous ne devriez pas avoir beaucoup de problèmes.

N'oubliez pas que si vous voulez démarrer, utilisez la version 0.9 du superbloc.

Éditer

C'est comme ça que je le ferais, non testé !

Créez un RAID1 avec une plongée manquante juste pour que nous puissions rapidement tester que les données restent tout en ayant un autre disque avec une copie des données, vos anciennes métadonnées étaient 0.90 donc nous garderons la même version ici.

mdadm --create /dev/md2 --level=mirror --metadata=0.90 --raid-devices=2 missing /dev/sdb3

Montez-le pour tester que tout fonctionne

mkdir /mnt/test
mount /dev/md2 /mnt/test

vérifiez vos données

   ls -l /mnt/test

Si tout semble correct, démontez le lecteur et redimensionnez-le.

unmount /mnt/md2
resize2fs /dev/md2

Une fois que tout est ok, vous pouvez ajouter l'autre lecteur à la matrice.

mdadm --add /dev/md2 /dev/sdb3

et attendez que les disques se resynchronisent

chat / proc / mdstat

Silverfire
la source
Avez-vous des suggestions spécifiques? c'est-à-dire les étapes à suivre pour moi?
Paul Schreiber
regardez mon montage ci
Silverfire
/ dev / md2 existe déjà. Pourquoi est-ce que je veux le recréer? Et: je devrais démarrer un disque de secours pour que cela se produise? Existe-t-il un moyen de redimensionner ce live?
Paul Schreiber
En direct, peut-être pas, mais vous pourrez peut-être le faire avec un redémarrage, si vous supprimez le lecteur de démarrage principal de la matrice, vous pouvez ensuite créer une nouvelle matrice dessus (nommez-le / dev / md3 ou quelque chose) avec un lecteur manquant, le système démarrera alors la nouvelle baie de disques / RAID et vous pourrez ensuite ajouter l'ancienne
Silverfire
Ce qui serait probablement le plus simple, c'est de simplement restaurer à partir d'une sauvegarde sur une nouvelle baie.
Silverfire
2

En regardant / proc / partitions , il est évident que Linux pense que sda3 et sdb3 sont plus petits qu'ils ne le sont.

Additionner les tailles des partitions

8       17      96358 sdb1
8       18    3903795 sdb2
8       19  152248005 sdb3

et vous obtiendrez un nombre bien inférieur à la taille du disque.

8       16  488386584 sdb

152248005 blocs de 1024 octets sont cohérents avec la taille mdadm --growet génèrent desresize2fs rapports pour md2 .

Avez-vous initialement créé ces partitions avec une taille plus petite, puis les avez recréées pour utiliser le reste des disques? Si c'est le cas, le redémarrage devrait permettre au noyau de relire la table de partition. Après cela, la croissance du périphérique RAID et le redimensionnement du système de fichiers devraient fonctionner.

sciurus
la source
Oui, c'est exactement ce que j'ai fait.
Paul Schreiber
La machine s'est bloquée au redémarrage. En route pour enquêter ...
Paul Schreiber