Présentation

Plus qu’une reconstruction du RAID, j’ai du reconstruire un RAID sur une autre machine. La première m’a lâché. J’ai donc voulu tenter de récupérer les disques qui hébergeaient les données pour les monter sur un autre système.

Les deux disques étaient montés en mirorring géré par mdadm.


Reconnaissance des disques

La première chose a donc été d’installer les deux disques sur la nouvelle machine.

Je vérifie que les 2 disques sont bien détectés.


root@NAS:~# fdisk -l

Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 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: 0x55454ee8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1      121601   976760001   fd  Linux raid autodetect

Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 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: 0xa4f32874

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1      121601   976760001   fd  Linux raid autodetect

C’est OK, ils sont bien là. Les deux disques sont bien reconnus avec un file system Linux RAID. Je tente donc de remonter le RAID avec mdam.


root@NAS:/dev# mdadm --assemble --run --force /dev/md0 /dev/sdc /dev/sdd
mdadm: no recogniseable superblock on /dev/sdc
mdadm: /dev/sdc has no superblock - assembly aborted

Ça marche pas… Après vérification, je me rends compte que je déclarais mal les partitions à utiliser pour le RAID. Je recommence.


root@NAS:/dev# mdadm --assemble /dev/md0 /dev/sdd1 /dev/sdc1
mdadm: /dev/md0 has been started with 2 drives.

Et cette fois, ça fonctionne !
Je vérifie que mdadm a bien détecté le RAID.


root@NAS:/dev# mdadm --detail --scan
ARRAY /dev/md0 metadata=0.90 UUID=2ed56e17:30a5e840:c109596b:d7e29b7e

Great !!


root@NAS:/dev# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Sun Oct 30 02:14:52 2011
     Raid Level : raid1
     Array Size : 976759936 (931.51 GiB 1000.20 GB)
  Used Dev Size : 976759936 (931.51 GiB 1000.20 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat Feb 22 20:42:45 2014
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 2ed56e17:30a5e840:c109596b:d7e29b7e
         Events : 0.198782

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       33        1      active sync   /dev/sdc1

Avant de faire la configuration finale, je vérifie que mes données sont toujours présentes et accessibles. Je vais créer un point de montage temporaire.


root@NAS:/dev# mkdir /mnt/test

Et dans le fichier de configuration /etc/fstab je déclare le montage.


/dev/md0 /mnt/test ext3 acl,user_xattr 0 0

Je monte par le point de montage :


root@NAS:/dev# mount /mnt/test

Et ça marche ! J’ai bien accès a mes fichiers et tout le contenu de la partition.

Je copie la configuration du RAID dans la conf mdadm :


mdadm --detail --scan |  tee -a /etc/mdadm/mdadm.conf

Il ne me restera qu’à déclarer correctement le point de montage dans /etc/fstab.


Présentation

Comme j’avais galéré lors de précédentes tentatives pour créer un RAID sur mon serveur, cette fois, j’ai bien pris note pas à pas des opérations effectuées, pour me faire un mémo. Cela me permet aussi de ne pas à avoir à chercher partout des infos si je dois recommencer.

Pour gérer mon raid, que cela soit sur DEBIAN ou sur UBUNTU, j’utilise mdadm.


Procédure

Après les avoir installé physiquement, la première étape consiste à bien identifier que les disques sont présents. Il suffit d’utiliser fdisk qui va pouvoir lister tous les disques et partitions du système.

fdisk -l

S’il s’agit d’identifier les disques, avec un grep, cela devient un peu plus lisible.


fdisk -l | grep dev

Attention : identifiant de table de partitions GPT (GUID) détecté sur « /dev/sdc » ! L'utilitaire sfdisk ne prend pas GPT en charge. Utilisez GNU Parted.

Attention : identifiant de table de partitions GPT (GUID) détecté sur « /dev/sdh » ! L'utilitaire sfdisk ne prend pas GPT en charge. Utilisez GNU Parted.

Le disque /dev/md_d0 ne contient pas une table de partitions valable
Disque /dev/sda : 250.1 Go, 250059350016 octets
/dev/sda1   *        2048    39999487    19998720   83  Linux
/dev/sda2        40001534   488396799   224197633    5  Étendue
/dev/sda5        40001536    79998975    19998720   83  Linux
/dev/sda6       480397312   488396799     3999744   82  partition d'échange Linux / Solaris
/dev/sda7        80001024   480391167   200195072   83  Linux
Disque /dev/sdb : 320.1 Go, 320072933376 octets
/dev/sdb1              63   625137344   312568641    c  W95 FAT32 (LBA)
Disque /dev/sdc : 3000.6 Go, 3000592982016 octets
/dev/sdc1               1  4294967295  2147483647+  ee  GPT
Disque /dev/sdh : 3000.6 Go, 3000592982016 octets
/dev/sdh1               1  4294967295  2147483647+  ee  GPT

Utilisant des disques de grandes capacités avec un formatage non pris en charge par fdisk, j’ai quelques messages d’avertissements. Mais rien d’anormal. C’est d’ailleurs avec ces deux disques que je vais monter mon raid.
Il sont identifiés comme /dev/sdh et /dev/sdc.

Il suffit de lancer la commande suivante pour initier la création du raid.


mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdh1

Avec la commande suivante, on visualise ensuite l’avancement de la synchronisation du raid :


cat /proc/mdstat

Personalities : [raid1]
md0 : active raid1 sdh1[1] sdc1[0]
      2930133824 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.0% (956672/2930133824) finish=612.3min speed=79722K/sec

unused devices: 

Là, le système m’indique qu’il y en a pour près de 10heures pour la synchro. Bah je repasserai plus tard.

Le lendemain, je vérifie que la synchronisation s’est bien faite et s’est bien terminée.


 mdadm --detail /dev/md_d0 

/dev/md_d0:
        Version : 1.2
  Creation Time : Wed Sep 11 00:13:08 2013
     Raid Level : raid1
     Array Size : 2930133824 (2794.39 GiB 3000.46 GB)
  Used Dev Size : 2930133824 (2794.39 GiB 3000.46 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Wed Sep 11 21:22:34 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : SERVER:0  (local to host SERVER)
           UUID : 8ede2d8c:d693e1dc:a085988a:8f0754cf
         Events : 19

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8      113        1      active sync   /dev/sdh1


cat /proc/mdstat
Personalities : [raid1]
md_d0 : active raid1 sdc1[0] sdh1[1]
      2930133824 blocks super 1.2 [2/2] [UU]

unused devices: 

Tout semble OK. Le raid est bien actif.

Je partitionne le RAID en ext3


mkfs.ext3 /dev/md_d0
mke2fs 1.42.5 (29-Jul-2012)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
183140352 i-noeuds, 732533456 blocs
36626672 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=4294967296
22356 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8192 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
	102400000, 214990848, 512000000, 550731776, 644972544

Allocation des tables de groupe : complété
Écriture des tables d'i-noeuds : complété
Création du journal (32768 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Je limite la taille de l’espace alloué à root


tune2fs -m0 /dev/md_d0
tune2fs 1.42.5 (29-Jul-2012)

Je créé un point de montage et monte le RAID sur ce point de mountage.


mkdir  /mnt/BIG
mount /dev/md_d0 /mnt/BIG

Je vérifie que le point de montage est bien là


df -h | grep BIG
/dev/md_d0                                               2,7T  202M  2,6T   1% /mnt/BIG

Tout va bien.

Il me reste plus qu’à finaliser la configuration mdadm pour que le RAID soit bien lancé au démarrage. Je récupère la configuration chargée par mdadm et je la copie dans le fichier de configuration de mdadm pour qu’elle soit bien lancée au démarrage.


mdadm  --examine  --scan
ARRAY /dev/md/0 metadata=1.2 UUID=8ede2d8c:d693e1dc:a085988a:8f0754cf name=SERVER:0
 

J’édite le fichier /etc/mdadm/mdadm.conf et j’ajoute le résultat de la commande précédente, pour forcer le raid à utiliser ces deux disques.


vi /etc/mdadm/mdadm.conf 

ARRAY /dev/md/0 metadata=1.2 UUID=8ede2d8c:d693e1dc:a085988a:8f0754cf name=SERVER:0

Enfin, je déclare le montage dans /etc/fstab pour que le RAID soit bien monté au reboot du serveur. J’ai voulu déclarer le montage en utilisant l’UUID du raid, mais cela n’a pas fonctionné. J’ai donc fait une déclaration plus classique. J’édite le fichier /etc/fstab pour déclarer le montage avec les options qui vont bien.


vi /etc/fstab

# Montage du RAID 3 TB
#UUID=UUID=7c54cd31-a66c-4770-851d-4777904815a3 /DATA2 ext3 defaults 0 1
/dev/md_d0 /DATA2 ext3 defaults 0 1

Pour finir, un reboot, quelques vérifications avec mount, df et mdadm pour contrôler que le RAID est bien actif et opérationnel.


Raid HS

Panique a bord, mon serveur ne redémarre pas !!! Juste après le boot, le message « le lecteur de disque n’est pas encore prêt ou n’est pas présent » est affiché. Il m’est proposé d’attendre (ce qui ne change rien) de passer ou tenter une récup manuelle.

Apparemment le raid est HS. J’ai passé pas mal de temps à comprendre la source du problème et trouvé la solution. J’en profite pour faire ce petit mémo afin de garder trace si cela se reproduit. Cela pourra toujours servir aussi à quelqu’un d’autre.


Analyse

Puisque c’est que le serveur me propose, je passe et je reprend la main sur la machine. Je checke les logs, mais je ne relève rien d’anormal… Je vérifie si mes disques sont bien détectées :

Bob@Linux:/$ sudo dmesg 

Je ne vois pas d’anomalies. Les disques ont pourtant bien montés au démarrage.

Bob@Linux:/$  sudo lshw -class disk
*-disk:1

       description: ATA Disk
       product: ST31000340NS
       vendor: Seagate
       physical id: 1
       bus info: scsi@4:0.0.0
       logical name: /dev/sdb
       version: SN06
       serial: 9QJ6NKGG
       size: 931GiB (1TB)
       capabilities: partitioned partitioned:dos
       configuration: ansiversion=5 signature=a4f32874

  *-disk:2
       description: ATA Disk
       product: ST31000524AS
       vendor: Seagate
       physical id: 0.0.0
       bus info: scsi@5:0.0.0
       logical name: /dev/sdc
       version: JC45
       serial: 6VPCATCP
       size: 931GiB (1TB)
       capabilities: partitioned partitioned:dos
       configuration: ansiversion=5 signature=55454ee8

Les disques sont bien présents et bien détectés par le système…

Je vérifie si le Raid est bien monté

Bob@Linux:/$ sudo mdadm --detail --scan --verbose

mdadm: md device /dev/md/d0 does not appear to be active.

Cela me confirme que le Raid n’est pas monté… OK. Les disques sont la, mais le Raid n’est pas monté… J’avance…

Bob@Linux:/$  ps ax | grep mda
 1262 ?        Ss     0:00 /sbin/mdadm --monitor --pid-file /var/run/mdadm/monitor.pid --daemonise --scan --syslog

Pourtant le daemon mdadm qui gère le Raid tourne…

Bob@Linux:/$ cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : inactive sdc1[1](S)
      976759936 blocks
unused devices

Là, si je comprend bien, ca me dit qu’il n’y a qu’un seul disque qui est dans le Raid…

Je relance donc le raid voir ce que ca donne.

Bob@Linux:/$ sudo mdadm --manage /dev/md/d0 --run

mdadm: started /dev/md/d0

Cette fois j’ai bien des infos qui sont remontées !! Je suis sur la bonne voie. :)

Bob@Linux:/$  sudo mdadm --detail /dev/md_d0

/dev/md_d0:
       Version : 00.90
       Creation Time : Sun Oct 30 02:14:52 2011
       Raid Level : raid1
       Array Size : 976759936 (931.51 GiB 1000.20 GB)
       Used Dev Size : 976759936 (931.51 GiB 1000.20 GB)
       Raid Devices : 2
       Total Devices : 1
       Preferred Minor : 0
       Persistence : Superblock is persistent
       Update Time : Sun Oct 30 10:53:19 2011
       State : clean, degraded
       Active Devices : 1
       Working Devices : 1
       Failed Devices : 0
       Spare Devices : 0

       UUID : 2ed56e17:30a5e840:c109596b:d7e29b7e (local to host linux)
       Events : 0.36
       Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       33        1      active sync   /dev/sdc1

Mais si je comprends bien, il n’y a qu’un seul disque déclaré dans le Raid… Quand je revérifie à nouveau le statut du raid, ca me confirme bien que le raid est actif.

Bob@Linux:/$  cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : active raid1 sdc1[1]
      976759936 blocks [2/1] [_U]
     unused devices:
 

Dans le doute, je vérifie les partitions en me disant qu’un disque est peut-etre tout moisi :

Bob@Linux:/$  sudo fdisk -l 

Disque /dev/sdb: 1000.2 Go, 1000204886016 octets
255 têtes, 63 secteurs/piste, 121601 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0xa4f32874
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdb1               1      121601   976760001   fd  Linux raid autodetect

Disque /dev/sdc: 1000.2 Go, 1000204886016 octets
255 têtes, 63 secteurs/piste, 121601 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x55454ee8
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdc1               1      121601   976760001   fd  Linux raid autodetect
 

Mais je vois que les disques sont bien présents, et il n’y a pas d’anomalies remontées… Cela me remonte bien la présence des deux disques du RAID.

A tout hasard, je tenter de monter la partition du Raid

$ sudo mount /mnt/raid1/
 

Et ca marche ! Je retrouve mes datas. Mais mon raid est toujours bancal…

Bob@Linux:/$  cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : active raid1 sdb1[0]
      976759936 blocks [2/1] [U_]
      unused devices:
 


Résolution

Je rechecke l’état de mon Raid

Bob@Linux:/$ sudo mdadm --detail /dev/md_d0

/dev/md_d0:
        Version : 00.90
        Creation Time : Sun Oct 30 02:14:52 2011
        Raid Level : raid1
        Array Size : 976759936 (931.51 GiB 1000.20 GB)
        Used Dev Size : 976759936 (931.51 GiB 1000.20 GB)
        Raid Devices : 2
        Total Devices : 1
        Preferred Minor : 0
        Persistence : Superblock is persistent
        Update Time : Thu Nov 10 21:33:05 2011
        State : clean, degraded

Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

UUID : 2ed56e17:30a5e840:c109596b:d7e29b7e (local to host mediaserver)
Events : 0.136748
Number   Major   Minor   RaidDevice State

       0       8       17        0      active sync   /dev/sdb1
       1       0        0        1      removed
 

Ça en devient vraiment agaçant…

Je suis très hésitant car j’ai peur de perdre toutes mes données avec une action incosidérée. Apparemment le probleme c’est que le second disque, pour une raison ou pour une autre, n’est plus intérgée dans le raid. Je tente donc un nouvel ajout…

Bob@Linux:/$ sudo mdadm /dev/md_d0 -a /dev/sdc1

mdadm: re-added /dev/sdc1
 

Et ca marche !!!!

Bob@Linux:/$ sudo mdadm --detail /dev/md_d0

/dev/md_d0:
        Version : 00.90
        Creation Time : Sun Oct 30 02:14:52 2011
        Raid Level : raid1
        Array Size : 976759936 (931.51 GiB 1000.20 GB)
        Used Dev Size : 976759936 (931.51 GiB 1000.20 GB)
        Raid Devices : 2
        Total Devices : 2

Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Thu Nov 10 21:39:26 2011
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Rebuild Status : 0% complete

UUID : 2ed56e17:30a5e840:c109596b:d7e29b7e (local to host mediaserver)
Events : 0.136756

Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       2       8       33        1      spare rebuilding   /dev/sdc1
 

Je retrouve un Raid complet. Mais en pleine reconstruction !!

Bob@Linux:/$  cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : active raid1 sdc1[2] sdb1[0]
      976759936 blocks [2/1] [U_]
      [>....................]  recovery =  1.8% (18362112/976759936) finish=266.2min speed=59998K/sec
unused devices:
 

Bon bah mainteannt, il n’y a plus qu’a attendre quelques heures que la reconstruction se termine !

Bob@Linux:/$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d0 : active raid1 sdc1[1] sdb1[0]
      976759936 blocks [2/2] [UU]

unused devices: 
 


Résolution, la vraie

Mais quand je redémarre le serveur, j’ai exactement le même message… En fait, rien n’est résolu… Je rechecke l’état de mon Raid, et je vois que si, finalement y a du mieux. Si je passe, et que je tente de monter le Raid ensuite, cela ne pose aucune difficulté, et le raid est bien actif.

Bob@Linux:/$  sudo mdadm  --examine  --scan

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=2ed56e17:30a5e840:c109596b:d7e29b7e
 

Le Raid semble bien configuré avec les deux disques. Mais le montage ne s’est pas fait… J’ai édité le fichier /etc/mdadm/mdadm.conf et j’ai ajouté le résultat de la commande précédente, pour forcer le raid à utiliser ces deux disques.

Bob@Linux:/$  sudo vi /etc/mdadm/mdadm.conf 

ARRAY /dev/md/d0 level=raid1 num-devices=2 UUID=2ed56e17:30a5e840:c109596b:d7e29b7e

Je retente le démarrage, et j’ai exactement le même message d’erreur.

Quand je checke la configuration du fichier de configuration /etc/fstab, je ne vois rien d’anormal… Et puis, j’ai un doute sur la déclaration du « File System ». Je modifie l’entrée de « /dev/md/d0  » en « /dev/md0  » . La seconde entrée est celle déclarée lors de la création du Raid. Ensuite, mdadm change la valeur en « /md/d0  » .

Bob@Linux:/$  sudo vi /etc/fstab 

# Montage de la partition du RAID de 1 To
#/dev/md/d0 /mnt/raid1 ext3 defaults 0 1
/dev/md0 /mnt/raid1 ext3 defaults 0 1

Et cette fois, c’est la bonne. le raid est bien chargé au démarrage et il est ensuite bien monté comme il faut.