Aller au contenu

Linux Mint sur un assemblage RAID 0

RAID

Depuis quelque temps, j'ai adopté Linux Mint Debian Edition sur tous mes postes de travail. Dans l'ensemble, je suis très content de cette distribution, qui offre une base saine pour toutes mes configurations de postes clients.

Aujourd'hui je me suis heurté à une limitation de l'installateur de cette distribution. L'ordinateur de ma tendre moitié est un PC un peu ancien muni de deux disques SATA de taille égale. L'achat d'un disque SSD serait certes une solution simple pour obtenir un système plus réactif. Alternativement, je peux aussi garder les deux disques SATA existants et les configurer en RAID 0, ce qui accélère sensiblement les opérations de lecture/écriture sur disque.

Le souci, c'est que l'installateur de Linux Mint n'offre pas la possibilité de configurer le RAID. Qu'à cela ne tienne, je vais mettre les mains dans le cambouis et configurer tout ça à la main.

Et les autres systèmes ?

J'ai mis en pratique ce petit atelier sur une Linux Mint Debian Edition 7. A priori, ça devrait fonctionner tel quel sur une Linux Mint classique. Ceci étant dit, vous pourrez l'adapter théoriquement à n'importe quelle distribution installée, étant donné que nous utilisons des outils classiques comme mdadm, fdisk, mount, rsync, etc.

BIOS vs. UEFI

La machine sur laquelle j'ai fait cette installation est un vieux coucou muni d'un BIOS traditionnel. Les choses ne se passent pas de la même façon sur une machine avec un UEFI.

Réinitialiser les disques

Pour commencer, je démarre sur le support d'installation live de Linux Mint Debian Edition, j'ouvre un terminal et j'obtiens les droits nécessaires :

$ sudo -s

Je désactive les assemblages RAID qui proviennent d'une installation antérieure :

# mdadm --stop --scan

J'efface les métadonnées RAID persistantes sur toutes les partitions :

# mdadm --zero-superblock /dev/sda1
# mdadm --zero-superblock /dev/sda2
# mdadm --zero-superblock /dev/sdb1
# mdadm --zero-superblock /dev/sdb2

Il ne reste plus qu'à supprimer les tables de partitions et les signatures de systèmes de fichiers :

# sgdisk --zap-all /dev/sda
# wipefs --all /dev/sda
# sgdisk --zap-all /dev/sdb
# wipefs --all /dev/sdb

Voilà mes deux disques non partitionnés :

# fdisk -l /dev/sd{a,b}
Disk /dev/sda: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: ST3250410AS
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdb: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: WDC WD2500AAKX-6
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Installation de Linux Mint

  • J'installe Linux Mint Debian Edition 7 normalement sur un seul disque.

  • Dans l'installateur, je sélectionne le disque /dev/sda.

  • L'installateur m'avertit que le disque /dev/sdb ne contient aucune table de partitions et me propose de créer un jeu de partitions. Je réponds Non.

  • J'installe GRUB sur /dev/sda.

Une fois l'installation terminée, je redémarre une fois sur mon nouveau système pour vérifier que tout est en ordre.

Sauvegarder le système installé

Je relance la session live, j'active le compte root et je fais un état des lieux de mes disques :

# fdisk -l /dev/sd{a,b}
Disk /dev/sda: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: ST3250410AS
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xffb35097

Device     Boot    Start       End   Sectors   Size Id Type
/dev/sda1           4096  16996351  16992256   8.1G 83 Linux
/dev/sda2       16998400 488396799 471398400 224.8G 83 Linux


Disk /dev/sdb: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: WDC WD2500AAKX-6
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Je crée deux points de montage en-dessous de /mnt :

# mkdir -v /mnt/{system,external}
mkdir: created directory '/mnt/system'
mkdir: created directory '/mnt/external'

Je monte la partition principale de mon système installé sur /mnt/system :

# mount -v /dev/sda2 /mnt/system/
mount: /dev/sda2 mounted on /mnt/system.

Je branche un disque sur externe formaté en ext4 et je l'identifie :

# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0   2.3G  1 loop /run/live/rootfs/filesystem.squashfs
sda      8:0    0 232.9G  0 disk
├─sda1   8:1    0   8.1G  0 part
└─sda2   8:2    0 224.8G  0 part /mnt/system
sdb      8:16   0 232.9G  0 disk
sdc      8:32   1  14.6G  0 disk
├─sdc1   8:33   1   2.8G  0 part /run/live/medium
└─sdc2   8:34   1     5M  0 part
sdd      8:48   0 465.7G  0 disk
└─sdd1   8:49   0 465.7G  0 part
sr0     11:0    1  1024M  0 rom

Je monte ce disque sur /mnt/external :

# mount -v /dev/sdd1 /mnt/external/
mount: /dev/sdd1 mounted on /mnt/external.

Je crée un répertoire de sauvegarde sur le disque externe :

# mkdir -v /mnt/external/lmde
mkdir: created directory '/mnt/external/lmde'

Je copie l'arborescence de mon système installé vers ce répertoire sur le disque externe :

# rsync -SHAXav --numeric-ids /mnt/system/ /mnt/external/lmde/

Cette opération me laisse le temps d'aller boire un café.

Une fois que c'est terminé, je démonte la partition /mnt/system :

# umount /mnt/system

Créer la grappe RAID

Dans un premier temps, je lance fdisk et je modifie mes partitions existantes. Voilà ce que ça donne :

# fdisk -l /dev/sda
...
Device     Boot    Start       End   Sectors   Size Id Type
/dev/sda1           4096  16996351  16992256   8.1G fd Linux raid autodetect
/dev/sda2       16998400 488396799 471398400 224.8G fd Linux raid autodetect

Je clone ce nouveau schéma de partitionnement :

# sfdisk --dump /dev/sda | grep -v ^label-id | sfdisk /dev/sdb

Cloner une table de partitions

La suite de commandes avec sfdisk est un bidouillage de mon cru qui permet de cloner une table de partitions sans pour autant se retrouver avec des UUID identiques.

J'assemble les grappes RAID :

# mdadm --create /dev/md/swap --level=0 --raid-devices=2 --metadata=1.2 \
  /dev/sda1 /dev/sdb1
mdadm: array /dev/md/swap started.
# mdadm --create /dev/md/root --level=0 --raid-devices=2 --metadata=1.2 \
  /dev/sda2 /dev/sdb2
mdadm: array /dev/md/root started.

Je crée un système de fichiers ext4 sur /dev/md/root :

# mkfs.ext4 /dev/md/root

Je crée une partition d'échange sur /dev/md/swap :

# mkswap /dev/md/swap

Je monte ma nouvelle partition principale sur /mnt/system :

# mount -v /dev/md/root /mnt/system/
mount: /dev/md126 mounted on /mnt/system.

Je restaure mon système sauvegardé en utilisant les mêmes options que tout à l'heure :

# rsync -SHAXav --numeric-ids /mnt/external/lmde/ /mnt/system/

C'est le moment d'aller boire un deuxième café.

Basculer vers le système monté

J'effectue un bind mount des systèmes de fichiers virtuels :

# for i in dev sys proc run dev/pts
> do
> mount -v --bind /$i /mnt/system/$i
> done
mount: /dev bound on /mnt/system/dev.
mount: /sys bound on /mnt/system/sys.
mount: /proc bound on /mnt/system/proc.
mount: /run bound on /mnt/system/run.
mount: /dev/pts bound on /mnt/system/dev/pts.

Je bascule vers le système monté sur /mnt/system :

# chroot /mnt/system/

Rectifier le tir

Je réécris GRUB dans le MBR :

# apt update
# apt install --reinstall grub-pc

Installer GRUB sur quel disque ?

La commande ci-dessus vous demande de sélectionner le ou les disques sur lesquels vous souhaitez installer GRUB. Ici, je choisis /dev/sda et /dev/sdb.

Maintenant, il me faut identifier les UUID des assemblages RAID :

# ls -l /dev/md/root
lrwxrwxrwx 1 root root 8 May 28 08:40 /dev/md/root -> ../md126
# ls -l /dev/md/swap
lrwxrwxrwx 1 root root 8 May 28 08:38 /dev/md/swap -> ../md127
# ls -l /dev/disk/by-uuid/

Je note les UUID respectifs et j'édite /etc/fstab en conséquence :

/etc/fstab
UUID=24c876bb-a1a5-4cb3-84e1-e6579b069f66 /      ext4 defaults 0 1
UUID=24e267f0-d7a0-46f5-b469-be9ba9ed36f4 none   swap sw       0 0

Je quitte l'environnement chroot :

# exit

J'allume un cierge dans l'église de mon village et je redémarre.

Redémarrage initial

Si tout s'est bien passé, voilà à quoi ressemble mon nouveau système :

$ df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/md127      442G  7.3G  412G   2% /
$ cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md126 : active raid0 sdb1[1] sda1[0]
      16973824 blocks super 1.2 512k chunks

md127 : active raid0 sdb2[1] sda2[0]
      471134208 blocks super 1.2 512k chunks

unused devices: <none>
  • L'avantage d'un assemblage RAID 0, c'est que le système est sensiblement plus rapide.

  • L'inconvénient, c'est qu'une défaillance sur un des deux disques entraîne la déconfiture de toute l'installation.

Remerciements

Je tiens à remercier mon ami et collègue Joseph Maillardet pour son aide précieuse et ses nombreuses suggestions.


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.