Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j’ai cité mes sources ; il en manque certainement… :-)

Configurer un RAID 1 logiciel sur une installation existante

1. Introduction

2. Pré-requis

3. Notes préliminaires

4. Installer mdadm

Il faut :

  • installer le paquet mdadm pour configurer le RAID.
  • redémarrer la machine
  • exécuter :
$ sudo cat /proc/mdstat

ce qui devrait afficher quelque chose comme :

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: <none>
$

5. Préparer le second disque dur

5.1. Cloner la table des partitions

Pour être sûr que le second disque dur (/dev/sdb) sera divisé en partitions absolument identiques à celles du premier disque dur (/dev/sda), on clone la table des partitions du premier pour l’appliquer au second. Pour cela, il faut d’abord passer en mode superutilisateur :

~$ sudo -s
~# sfdisk -d /dev/sdb | sfdisk /dev/sdc

Ce qui suit s’affiche :

Vérification qu'aucun autre n'utilise le disque en ce moment ...
OK

Disque /dev/sdc : 121601 cylindres, 255 têtes, 63 secteurs/piste

sfdisk: ERREUR: le secteur 0 n'a pas une signature MS-DOS
 /dev/sdc : type non reconnu de table de partition
Vieille situation:
Aucune partition repérée
Nouvelle situation:
Unités= secteurs de 512 octets, décompte à partir de 0

   Périph Amorce  Début       Fin   #secteurs Id  Système
/dev/sdc1     1033316865 1953520064  920203200  83  Linux
/dev/sdc2            63 1033316864 1033316802  83  Linux
/dev/sdc3             0         -          0   0  Vide
/dev/sdc4             0         -          0   0  Vide
Attnetion : aucune partition primaire marquée amorçable (active)
Peu important pour LILO, mais DOS MBR n'amorcera pas ce disque.
Succès d'écriture de la nouvelle table de partitions

Relecture de la table de partitions ...

Si vous créez ou modifiez une partition DOS, /dev/foo7, par exemple, alors
utiliser dd(1) pour mettre à zéro les premiers 512 octets:  
dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(Consulter fdisk(8).)

On revient en utilisateur normal :

~# exit
exit
~$

La commande :

~$ sudo fdisk -l

doit montrer que les deux disques durs ont maintenant exactement la même structure :

(...)
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 : 0x000d6bd0

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdb1           64322      121601   460101600   83  Linux
/dev/sdb2               1       64321   516658401   83  Linux

Les entrées de la table de partitions ne sont pas dans l'ordre du disque

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 : 0x00000000

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdc1           64322      121601   460101600   83  Linux
/dev/sdc2               1       64321   516658401   83  Linux

Les entrées de la table de partitions ne sont pas dans l'ordre du disque
(...)
~$

Plus simple et rapide que de partitionner à la main !

5.2. Changer le type des partitions (sdc)

Maintenant, il faut régler le type des partitions sur Linux raid autodetect.

On utilise fdisk en ligne de commande :

~$ sudo fdisk /dev/sdc
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Commande (m pour l'aide):

Sous fdisk, chaque commande est une lettre, que l’on valide avec ENTRÉE.

Les modifications ne sont appliquées que lorsqu’on les écrit avec la commande w.

La commande m affiche les commandes disponibles :

Commande (m pour l'aide): m
Commande d'action
   a   bascule le fanion d'amorce
   b   éditer l'étiquette BSD du disque
   c   basculer le fanion de compatibilité DOS
   d   supprimer la partition
   l   lister les types de partitions connues
   m   afficher ce menu
   n   ajouter une nouvelle partition
   o   créer une nouvelle table vide de partitions DOS
   p   afficher la table de partitions
   q   quitter sans enregistrer les changements
   s   créer une nouvelle étiquette vide pour disque de type Sun
   t   modifier l'id de système de fichiers d'une partition
   u   modifier les unités d'affichage/saisie
   v   vérifier la table de partitions
   w   écrire la table sur le disque et quitter
   x   fonctions avancées (pour experts seulement)

Commande (m pour l'aide):

Pour changer le type d’une partition, on utilise la commande t :

Commande (m pour l'aide): t

Il faut ensuite indiquer le numéro de la partition à modifier (ici la 1) :

Numéro de partition (1-4): 1
Code Hexa (taper L pour lister les codes):

Puis le code du type de partition voulu (L affiche la liste des codes possibles) :

Code Hexa (taper L pour lister les codes): L
 0  Vide            24  NEC DOS         81  Minix / Linux a bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 cachée di c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux étendue  c7  Syrinx         
 5  Etendue         42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX amorçable  50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Etendue (LB 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Cachée FAT12   5c  Priam Edisk     a8  UFS Darwin      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Cachée FAT16 < 63  GNU HURD or Sys ab  Amorce Darwin   f2  DOS secondaire 
16  Cachée FAT16   64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Cachée HPFS/NT 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Cachée W95 FAT 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Cachée W95 FAT 80  Minix ancienne  be  Amorce Solaris  ff  BBT            
1e  Cachée W95 FAT
Code Hexa (taper L pour lister les codes):

Le type Linux raid autodetect correspond au code fd :

Code Hexa (taper L pour lister les codes): fd
Type système de partition modifié de 1 à fd (Linux raid autodetect)

Commande (m pour l'aide):

On répète l’opération pour les autres partitions (ici, la 2) :

Commande (m pour l'aide): t
Numéro de partition (1-4): 2
Code Hexa (taper L pour lister les codes): fd
Type système de partition modifié de 2 à fd (Linux raid autodetect)

Commande (m pour l'aide): 

Et on termine en appliquant les changements :

Commande (m pour l'aide): w
La table de partitions a été altérée!

Appel de ioctl() pour relire la table de partitions.
Synchronisation des disques.
~$ 

5.3. Vérifier les partitions

Pour s’assurer qu’il n’y a pas de restes d’une précédente installation RAID, on exécute les commandes suivantes :

~$ sudo mdadm --zero-superblock /dev/sdc1
~$ sudo mdadm --zero-superblock /dev/sdc2

S’il ne reste rien d’une précédente installation, chacune de ces commandes renverra une erreur de ce type :

mdadm: Unrecognised md component device - /dev/sdc1

Dans le cas contraire, rien ne s’affichera.

6. Configurer le RAID 1

6.1. Créer les grappes

On crée /dev/md0 avec /dev/sdb1 ; /dev/md1 et /sdv/sdb2 : /dev/md2 à partir de /dev/sdb3. Les partitions correspondantes du premier disque ne peuvent pas être ajoutées pour le moment, car le système fonctionne dessus. C’est pourquoi on les remplace par le mot missing dans les commandes suivantes :

~$ sudo mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdc1
mdadm: array /dev/md0 started.
~$ sudo mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdc2
mdadm: array /dev/md1 started.

La commande :

~$ sudo cat /proc/mdstat 

devrait maintenant montrer deux grappes RAID dégradées :

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sdc2[1]
      516658304 blocks [2/1] [_U]
      
md0 : active raid1 sdc1[1]
      460101504 blocks [2/1] [_U]
      
unused devices: <none>
~$

<note> Les indicateurs [_U] ou [U_] signifient qu’une grappe est dégradée, alors que [UU] signifie que la grappe est normale. </note>

6.2. Créer les systèmes de fichiers (sdc)

On peut désormais choisir le système de fichiers de chaque grappe, ici ext4 pour les deux grappes /dev/md0 et /dev/md1 :

~$ sudo mkfs.ext4 /dev/md0
mke2fs 1.41.11 (14-Mar-2010)
É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 blocks, Stripe width=0 blocks
28762112 i-noeuds, 115025376 blocs
5751268 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=0
3511 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

É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é

Le système de fichiers sera automatiquement vérifié tous les 28 montages ou
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
pour écraser la valeur.
~$

Continuer avec :

~$ sudo mkfs.ext4 /dev/md1

6.3. Mettre à jour le fichier mdadm.conf

Le fichier /etc/mdadm/mdadm.conf, qui ne contient encore aucune information concernant les grappes.

Nous allons l’adapter à la nouvelle situation.

On commence par faire une copie du fichier existant (on ne sait jamais) :

~$ sudo cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf-dist

puis un scan de la configuration RAID qui sera ajoutée au nouveau fichier :

~$ sudo mdadm --examine --scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=8208bf1f:959d5d13:09753872:6056aa4f
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=2a1cf1a4:8243eb9c:09753872:6056aa4f
~$

On vérifie que le fichier /etc/mdadm/mdadm.conf ressemble à ça :

~$ sudo cat /etc/mdadm/mdadm.conf
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays

# This file was auto-generated on Tue, 12 Oct 2010 22:07:40 +0200
# by mkconf $Id$
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=8208bf1f:959d5d13:09753872:6056aa4f
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=2a1cf1a4:8243eb9c:09753872:6056aa4f
~$

6.4. Monter les grappes

Les grappes sont prêtes à être montées, pour y accéder.

Créons deux points de montage, par exemple /mnt/md0 et /mnt/md1 :

~$ sudo mkdir /media/md0
~$ sudo mkdir /media/md1
~$ 

Montons les deux grappes formatées en ext4 :

~$ sudo mount /dev/md0 /media/md0
~$ sudo mount /dev/md1 /media/md1

On devrait voir les deux grappes en tapant la commande :

~$ sudo mount
(...)
/dev/sdb1 on /media/serveurs type ext4 (rw)
/dev/sdb2 on /home type ext4 (rw)
(...)
/dev/md0 on /media/md0 type ext4 (rw)
/dev/md1 on /media/md1 type ext4 (rw)
~$

6.5. Mettre à jour les fichiers fstab et mtab

# /home sur la grappe /dev/md1
/dev/md1      /home     ext4        defaults        0       2

7. Dupliquer les données

Maintenant que les grappes sont montées, on peut copier dessus le contenu du premier disque dur :

S’il s’agit de la racine, on utilise :

sudo cp -dpRx / /mnt/md0
sudo cp -dpRx /multimedia /mnt/md1

<note important> Dans le cas ‘un répertoire tel que le home, il faut d’abord s’y placer :

~$ cd /home
~$ sudo cp -dpRx . /media/md1
~$ cd /media/serveurs
~$ sudo cp -dpRx . /media/md0
~$

</note>

<note tip> (A confirmer)

On peut utiliser rsync :

sudo rsync -av --progress --stats --filter "- /mnt" / /mnt/md0
sudo rsync -av --progress --stats /multimedia /mnt/md1

Compte-tenu des quantités de données à déplacer, cela permet en cas de besoin d’interrompre la synchronisation, et de la reprendre plus tard. </note>

8. Premier redémarrage

Après le premier redémarrage, si tout s’est bien passé, on devrait obtenir le résultat suivant avec la commande df :

~$ df -h
Sys. de fichiers            Tail. Occ. Disp. %Occ. Monté sur
(...)
/dev/md1              485G  138G  323G  30% /home
/dev/md0              432G   76G  335G  19% /media/serveurs
(...)
~$

<note tip>En particulier, les partitions sdb et sdc ne doivent pas apparaître ; sinon, il faut les démonter par

~$ sudo umount /dev/sdb1

</note>

et toujours :

~$ sudo cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

9. Ajouter le premier disque dur

9.1. Modifier le type des partitions (sdb)

De même que pour /dev/sdb précédemment, nous utilisons fdisk pour changer le type des partitions de /dev/sda en Linux raid autodetect.

~$ sudo fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Commande (m pour l'aide): m
Commande d'action
   a   bascule le fanion d'amorce
   b   éditer l'étiquette BSD du disque
   c   basculer le fanion de compatibilité DOS
   d   supprimer la partition
   l   lister les types de partitions connues
   m   afficher ce menu
   n   ajouter une nouvelle partition
   o   créer une nouvelle table vide de partitions DOS
   p   afficher la table de partitions
   q   quitter sans enregistrer les changements
   s   créer une nouvelle étiquette vide pour disque de type Sun
   t   modifier l'id de système de fichiers d'une partition
   u   modifier les unités d'affichage/saisie
   v   vérifier la table de partitions
   w   écrire la table sur le disque et quitter
   x   fonctions avancées (pour experts seulement)

Commande (m pour l'aide): t
Numéro de partition (1-4): 2
Code Hexa (taper L pour lister les codes): L

 0  Vide            24  NEC DOS         81  Minix / Linux a bf  Solaris
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 cachée di  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux étendue   c7  Syrinx         
 5  Etendue         42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX amorçable   50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Etendue (LB 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Cachée FAT12    5c  Priam Edisk     a8  UFS Darwin      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Cachée FAT16 <  63  GNU HURD or Sys ab  Amorce Darwin   f2  DOS secondaire 
16  Cachée FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Cachée HPFS/NT  65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Cachée W95 FAT  75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Cachée W95 FAT  80  Minix ancienne  be  Amorce Solaris  ff  BBT            
1e  Cachée W95 FAT
Code Hexa (taper L pour lister les codes): fd
Type système de partition modifié de 2 à fd (Linux raid autodetect)

Commande (m pour l'aide): t
Numéro de partition (1-4): 1
Code Hexa (taper L pour lister les codes): fd
Type système de partition modifié de 1 à fd (Linux raid autodetect)

Commande (m pour l'aide): w
La table de partitions a été altérée!

Appel de ioctl() pour relire la table de partitions.
Synchronisation des disques.
~$ 

9.2. Intégrer le premier disque dur à la grappe

~$ sudo mdadm --add /dev/md1 /dev/sdb2
mdadm: added /dev/sdb2
~$ sudo mdadm --add /dev/md0 /dev/sdb1
mdadm: added /dev/sdb1
~$

On suit par :

~$ cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb1[2] sdc1[1]
    460101504 blocks [2/1] [_U]
    resync=DELAYED

md1 : active raid1 sdb2[2] sdc2[1]
    516658304 blocks [2/1] [_U]
    [>....................]  recovery =  3.1% (16470400/516658304) finish=68.7min speed=121184K/sec


unused devices: <none>
~$

ou par la commande :

watch cat /proc/mdstat
par watch cat /proc/mdstat
Every 2,0s: cat /proc/mdstat                            Sat Oct 16 12:42:22 2010
~$ cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb1[2] sdc1[1]
      460101504 blocks [2/1] [_U]
      	resync=DELAYED
 
md1 : active raid1 sdb2[2] sdc2[1]
      516658304 blocks [2/1] [_U]
      [>....................]  recovery =  3.1% (16470400/516658304) finish=68.7min speed=121184K/sec
 
unused devices: <none>
~$
 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra
id10]
md0 : active raid1 sdb1[2] sdc1[1]
      460101504 blocks [2/1] [_U]
        resync=DELAYED
 
md1 : active raid1 sdb2[2] sdc2[1]
      516658304 blocks [2/1] [_U]
      [=>...................]  recovery =  5.1% (26754368/516658304) finish=67.1
min speed=121638K/sec
 
unused devices: <none>
par watch cat /proc/mdstat (fin)
Every 2,0s: cat /proc/mdstat                            Sat Oct 16 15:22:34 2010
 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra
id10]
md0 : active raid1 sdb1[0] sdc1[1]
      460101504 blocks [2/2] [UU]
 
md1 : active raid1 sdb2[0] sdc2[1]
      516658304 blocks [2/2] [UU]
 
unused devices: <none>
 
Ctrl-C -----------------------------

9.3. Mettre à jour le fichier mdadm.conf

10. Test : simuler la panne d'un disque dur

11. Réparation avec l'utilitaire de disque

REDEMARRAGE

nicolas@chateau:~$ sudo cp /etc/mdadm/mdadm.conf-dist /etc/mdadm/mdadm.conf [sudo] password for nicolas: nicolas@chateau:~$


Navigation

éditer cette page

QR Code
QR Code Configurer un RAID 1 logiciel sur une installation existante (generated for current page)