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 machineExé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 tpuis 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

(fr) http://doc.ubuntu-fr.org/tutoriel/raid1_logiciel_sur_installation_existante#dupliquer_les_donnees(en) http://www.howtoforge.com/software-raid1-grub-boot-debian-etch-p3

Basé sur << Article >> par Auteur.