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

Pré-requis

Installer mdadm

  • Installez le paquet mdadm ou en ligne de commande :

    $ sudo apt install mdadm

  • Redémarrez la machine
  • Exécutez :

    $ sudo cat /proc/mdstat
    Personalities : 
    unused devices: <none>

Première étape : Préparer le second disque dur

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 sfdisk -d /dev/sdb | sudo sfdisk /dev/sdc


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).)

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

$ 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 : 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 !

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 :

  • utilisez la commande t
  • puis indiquez le numéro de la partition à modifier (ici la 1)
  • puis le code du type de partition voulu (L affiche la liste des codes possibles)
  • Le type Linux raid autodetect correspond au code fd
Commande (m pour l'aide): t
Numéro de partition (1-4): 1
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 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.
$

Vérifier les partitions

Vérifiez qu'il ne reste rien d'une précédente installation RAID en exécutant les commandes suivantes :

$ sudo mdadm --zero-superblock /dev/sdc1
mdadm: Unrecognised md component device - /dev/sdc1
$ sudo mdadm --zero-superblock /dev/sdc2
mdadm: Unrecognised md component device - /dev/sdc2

S'il ne reste rien d'une précédente installation, chacune de ces commandes renverra une erreur comme ci-dessus, sinon, rien ne s'affichera.

Autres étapes

Configurer le RAID 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 suivante devrait maintenant montrer deux grappes RAID dégradées :

$ sudo cat /proc/mdstat 
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>

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

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.

Continuez avec :

$ sudo mkfs.ext4 /dev/md1

Mettre à jour le fichier mdadm.conf

Nous allons adapter le fichier /etc/mdadm/mdadm.conf, qui ne contient encore aucune information concernant les grappes, à la nouvelle situation.

Par sécurité, faites une copie du fichier existant :

$ 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

Vérifiez 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

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)

Mettre à jour les fichiers fstab et mtab

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

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

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

(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.

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
(...)

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

$ sudo umount /dev/sdb1

et toujours :

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

Ajouter le premier disque dur

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.

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

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

Mettre à jour le fichier mdadm.conf

Test : simuler la panne d'un disque dur

Réparation avec l'utilitaire de disque

Redémarrage

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

Conclusion

Problèmes connus

Voir aussi