Lorsque j’installe une station de travail Linux, j’utilise assez régulièrement le RAID 1 logiciel pour la redondance du stockage. Les distributions de type serveur comme CentOS, Ubuntu Serveur ou Debian proposent généralement ce type de fonctionnalité dans l’installateur. Sur le matériel récent, j’ai un faible pour la distribution KDE neon, un mix assez épuré d’un bureau KDE en rolling release sur une base stable d’Ubuntu LTS. Malheureusement, l’installateur de cette distribution n’offre pas la possibilité de configurer les disques en grappe RAID. Du coup j’ai profité d’un long weekend pluvieux pour expérimenter. Voici donc un tutoriel complet sur la configuration d’un RAID 1 logiciel sur une installation classique.
- Nettoyage des disques et installation initiale
- Préparation de la grappe RAID
- Modifier le chargeur de démarrage
- Redémarrage initial
Nettoyage des disques et installation initiale
Le DVD d’installation de KDE neon offre deux options au démarrage.
- LiveCD
- Installation
Je démarre sur l’option LiveCD (Try without installing) pour pouvoir effectuer quelques manipulations préliminaires.
Dans ma session Live, j’active le compte root
pour m’éviter d’invoquer sudo
à tire-larigot.
$ sudo passwd root
La machine est munie de deux disques durs sda
et sdb
. Les disques sont identiques, ce qui nous facilitera le travail.
# fdisk -l /dev/sd? Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors ... Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors ...
Avant de lancer l’installateur, c’est une bonne idée de faire un brin de ménage sur les disques pour partir sur des bases saines. Dans mon cas précis, je dois d’abord supprimer les vestiges d’une ancienne grappe RAID. Je vais me servir de l’utilitaire mdadm
, qui ne figure pas sur le LiveCD.
# apt-get update && apt-get install mdadm
Une fois que j’ai identifié mes partitions, j’invoque mdadm
comme ceci.
# mdadm --zero-superblock /dev/sda1 # mdadm --zero-superblock /dev/sda5 # mdadm --zero-superblock /dev/sdb1 # mdadm --zero-superblock /dev/sdb5
Notons que je me suis retrouve confronté à deux messages d’erreur pour les partitions /dev/sda5
et /dev/sdb5
.
mdadm: Couldn't open /dev/sda5 for write - not zeroing mdadm: Couldn't open /dev/sdb5 for write - not zeroing
Pour des raisons mystérieuses, l’installateur semble avoir décidé d’activer toutes les partitions swap
existantes. Je les ai donc désactivées comme ceci avant de réinvoquer mdadm --zero-superblock
.
# swapoff /dev/sda5 # swapoff /dev/sdb5
Une fois que j’ai supprimé toutes les traces des précédentes grappes RAID, j’efface le contenu du MBR des deux disques. Pour ma part, j’aime bien utiliser gdisk
pour ce genre d’opération.
# gdisk /dev/sda GPT fdisk (gdisk) version 1.0.1 ... Command (? for help): x Expert command (? for help): z About to wipe out GPT on /dev/sda. Proceed? (Y/N): y GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. Blank out MBR? (Y/N): y
Je procède de même pour /dev/sdb
.
À partir de là, je peux lancer l’installateur graphique. Je ne vais pas rentrer dans les détails de la procédure d’installation, à plus forte raison qu’elle est triviale. J’installe le système sur le disque sda
, en acceptant le schéma de partitionnement automatique par défaut.
Préparation de la grappe RAID
Après le redémarrage initial, j’active le compte root
comme je l’avais fait sur le LiveCD.
$ sudo passwd root
Pareillement, je récupère l’outil mdadm
, qui ne fait pas partie d’une installation standard.
# apt-get update && apt-get install mdadm
Le schéma de partitionnement par défaut est simpliste.
- une partition principale
/dev/sda1
formatée enext4
- une partition d’échange
/dev/sda5
Mon disque sdb
n’est pas encore partitionné. Étant donné qu’il est parfaitement identique à mon disque sda
, je vais pouvoir utiliser l’outil sfdisk
pour cloner le schéma de partitionnement du disque sda
.
# sfdisk -d /dev/sda | sfdisk /dev/sdb
On constate que le disque sdb
est partitionné exactement comme sda
.
La prochaine étape consiste à modifier les types de partitions pour sdb
. Lancer fdisk
ou cfdisk
et définir le type FD
(Linux RAID autodetect
) pour /dev/sdb1
et /dev/sdb5
.
Voici – à peu de choses près – ce que nous devons obtenir au final.
Une fois que les types de partitions sont correctement définis, nous pouvons créer la grappe RAID. Dans un premier temps, il s’agira d’une grappe incomplète, configurée à l’aide de l’option missing
.
# modprobe raid1 # mdadm --create /dev/md1 --level=1 --raid-disks=2 --metadata=0.90 \ missing /dev/sdb1 mdadm: array /dev/md1 started. # mdadm --create /dev/md5 --level=1 --raid-disks=2 --metadata=0.90 \ missing /dev/sdb5 mdadm: array /dev/md5 started.
Affichons l’état de cette grappe.
# cat /proc/mdstat Personalities : [raid1] md5 : active raid1 sdb5[1] 7820224 blocks [2/1] [_U] md1 : active raid1 sdb1[1] 968939456 blocks [2/1] [_U] bitmap: 0/8 pages [0KB], 65536KB chunk
Pour formater cette grappe, nous utiliserons les mêmes systèmes de fichiers que ceux en vigueur sur le disque sda
.
# mkfs.ext4 /dev/md1 # mkswap /dev/md5
Écrire une configuration provisoire dans /etc/mdadm/mdadm.conf
. On conservera l’original pour plus tard, lorsqu’on ajoutera le disque sda
à la grappe.
# cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.orig # mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Créer un point de montage pour la grappe /dev/md1
et monter cette grappe.
# mkdir /mnt/md1 # mount /dev/md1 /mnt/md1
Copier l’intégralité du système de fichiers de notre installation vers le deuxième disque.
# cp -dpRx / /mnt/md1/
Les options utilisées méritent quelques explications.
-d
préserve les liens symbolique sans les suivre-p
préserve l’horodatage et les permissions-R
effectue une copie récursive-x
reste sur le même système de fichiers
La prochaine étape consiste à éditer le fichier /etc/fstab
de notre montage, en l’occurrence /mnt/md1/etc/fstab
. Les entrées respectives de /dev/sda1
et /dev/sda5
(ou plus exactement les UUID correspondants) devront être remplacés par /dev/md1
et /dev/md5
.
# /etc/fstab # # / was on /dev/sda1 during installation /dev/md1 / ext4 errors=remount-ro 0 1 # swap was on /dev/sda5 during installation /dev/md5 none swap sw 0 0
Modifier le chargeur de démarrage
À présent, il va falloir configurer GRUB pour qu’il démarre sur la grappe. Le fichier /etc/grub.d/40_custom
nous servira de modèle, faute de mieux. La nomenclature 09_raid1
s’explique par le fait que les fichiers sont traités en ordre alphanumérique, et que notre configuration provisoire est censée précéder celle du fichier 10_linux
.
# cd /etc/grub.d # cp 40_custom 09_raid1
Éditer 09_raid1
pour démarrer sur la grappe RAID.
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom
# menu entries. Simply type the menu entries you
# want to add after this comment. Be careful not
# to change the 'exec tail' line above.
menuentry 'KDE neon RAID 1' \
--class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod mdraid09
insmod mdraid1x
insmod ext2
set root='(md/md1)'
linux /boot/vmlinuz-4.10.0-38-generic root=/dev/md1 ro quiet
initrd /boot/initrd.img-4.10.0-38-generic
}
Là aussi, quelques explications sur les options utilisées, qui sont le fruit d’une série de tentatives et d’échecs dont je vous passe les détails.
- Les modules de GRUB sont rangés dans
/boot/grub/i386-pc
. - Le module
mdraid09
fournit le support RAID de base. - Le module
mdraid1x
fournit le support RAID 1. - Le module
ext2
permet d’accéder aux systèmes de fichiers EXT2 et dérivés. - Pour trouver le nom
md/md1
de ma grappe, il a fallu que je fasse un redémarrage initial et que j’appuie surC
à l’invite de GRUB pour accéder à la console interactive du chargeur de démarrage. Ensuite, la commandels
m’a affiché les systèmes de fichiers théoriquement accessibles dans la nomenclature biscornue de GRUB. - Pour le reste, on indique l’emplacement du kernel et du disque mémoire initial, avec les options de démarrage qui vont bien.
Mettre à jour la configuration de GRUB. Si tout se passe bien, on doit voir quelque chose comme ceci.
# update-grub Generating grub configuration file ... Found theme: /boot/grub/themes/breeze/theme.txt Found linux image: /boot/vmlinuz-4.10.0-38-generic Found initrd image: /boot/initrd.img-4.10.0-38-generic Found memtest86+ image: /boot/memtest86+.elf Found memtest86+ image: /boot/memtest86+.bin done
Copier le fichier de configuration personnalisé de GRUB vers le deuxième disque.
# cp /etc/grub.d/09_raid1 /mnt/md1/etc/grub.d/
Mettre à jour le disque mémoire initial. L’option -u
force simplement la mise à jour d’un fichier existant.
# update-initramfs -u update-initramfs: Generating /boot/initrd.img-4.10.0-38-generic
Copier le disque mémoire mis à jour vers le deuxième disque.
# cp /boot/initrd.img-4.10.0-38-generic /mnt/md1/boot/
Installer GRUB sur les deux disques, ce qui lui permettra ultérieurement, en cas de défaillance d’un disque, de démarrer sur l’autre.
# grub-install /dev/sda Installing for i386-pc platform. Installation finished. No error reported. # grub-install /dev/sdb Installing for i386-pc platform. Installation finished. No error reported.
Il ne reste plus qu’à croiser les doigts et à redémarrer.
# reboot
Redémarrage initial
Une fois qu’on a redémarré, on vérifie qu’on est bien sur la moitié de grappe RAID.
# mount | grep md1 /dev/md1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
Maintenant que le disque sdb
est actif, nous allons pouvoir définir les types de partitions corrects pour le disque sda
, comme nous l’avons fait plus haut. Lancez fdisk
ou cfdisk
et changez le type des partitions /dev/sda1
et /dev/sda5
en FD
(Linux RAID autodetect
). Pour être sûr, vérifiez si le schéma de partitionnement des deux disques est absolument identique.
À partir de là, je peux compléter ma grappe RAID en ajoutant le disque sda
comme ceci.
# mdadm --add /dev/md1 /dev/sda1 mdadm: added /dev/sda1 # mdadm --add /dev/md5 /dev/sda5 mdadm: added /dev/sda5
La commande watch cat /proc/mdstat
me permet de surveiller l’état de la synchronisation des disques. Suivant la taille des disques et la puissance de la machine, il va falloir patienter un petit moment.
Une fois que la synchronisation est terminée, on peut remettre à jour la configuration du chargeur de démarrage.
# update-grub
Remettre à jour le disque mémoire initial.
# update-initramfs -u
Redémarrer une dernière fois.
# reboot
Si tout s’est bien passé. on peut supprimer /etc/grub.d/09_raid1
et passer par la configuration automatique de GRUB.
Bonjour Nikki,
Je visite assez régulièrement ton blog que j’apprécie pour ses nombreux tutos détaillées et simples.
J’ai suivi ton exemple et j’ai aussi testé de mon coté KDE neon dont j’apprécie le côté épuré.
J’ai cru remarqué sur un précédent post que tu utilisais la User Edition LTS.
Sauf erreur de ma part cette version propose Plasma en version LTS sur une base Ubuntu 16.04 LTS mais les logiciels KDE sont régulièrement mis à jour, au contraire de la version User Edition qui met à jour Plasma ainsi que les logiciels KDE.
Il y a t’il une raison qui te pousse à utiliser une version plutôt qu’une autre ? Pour moi l’intérêt de cette distro était justement de bénéficier de l’intégralité des updates de KDE (desktop + softwares).
Bonjour Benjamin,
Étant donné que la majorité de mes installations se font dans un contexte professionnel (ou de “production”), j’ai une préférence marquée pour les versions stables et dûment testées, et de préférence avec un support à long terme. Voir à ce sujet mon article sur la qualité entreprise. C’est également ce qui explique ma préférence marquée pour CentOS. Sur le matériel exotique et/ou récent, la distribution KDE neon me semble être un bon compromis.
Un gentil bonjour de la garrigue gardoise,
Nico