Introduction

Dans cet article nous allons créer un raid de type 1 pour que nos données soient répliquées sur 2 disques. Si un disque crashe, un deuxième est là pour prendre le relais. Les données sont fondamentales en Machine Learning et comme j’ai perdu plusieurs fois des datasets et du temps, je me suis armé avec un système raid.

Voici donc la procédure d’installation. Dans un prochain article que j’intitulerai “Gérer ses datasets comme un pro” je parlerai de la manière dont j’organise mes données au sein de mon serveur. J’en ferais peut-être un autre sur le CICD du Data Scientist (différent de celui des développeurs).

Vérification des disques

Avant de commencer on va vérifier l’état des disques durs:

1
sudo apt-get install smartmontools

Lancer le test avec la commande suivante.

1
sudo smartctl -t short /dev/sdb

Voir le résultat (après l’heure indiquée par la commande précédente):

1
sudo smartctl -l selftest /dev/sdb

Installation

Préparation des disques

Identifier les disques sur lesquels vous voulez créer votre Raid:

1
2
sudo fdisk -l
sudo fdisk /dev/sdX

Formater ses disques puis créer une partition sur chacun d’eux:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Exemple de création de partitions avec /dev/sdb et /dev/sdc
sudo gdisk /dev/sdb

# voir le menu "m" (vous trouverez ce qu'il faut si vous devez effacer une partition)
# p pour afficher les partitions
o # pour effacer toutes les partitions et créer une nouvelle "protective MBR".
y # valide
n # pour créer une nouvelle partition
1 # pour le numéro de la partition
Entrée # pour le début des blocks
Entrée # pour la fin des blocks
fd00 # pour le type de partition (Linux Raid)
w # save
y # confirm

# Recommander cette procédure avec /dev/sdc

Création du raid

Installation de mdadm:

1
sudo apt install -y mdadm

Création du raid:

1
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

Attention, l’étape précédente va prendre du temps… Vous pouvez voir sa progression avec la commande cat /proc/mdstat.

Créer un filesystem sur le nouvel Array :

1
sudo mkfs.ext4 -F /dev/md0

Créer un point de montage pour le nouveau filesystem:

1
sudo mkdir -p /mnt/md0

Monter le nouveau filesystem:

1
sudo mount /dev/md0 /mnt/md0

Vérifier qu’il est bien accessible:

1
df -h -x devtmpfs -x tmpfs

Pour que le Array soit automatiquement ré-assemblé à chaque reboot, on peut modifier le fichier de configuration de mdadm:

1
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

Rendre le Array accessible durant la phases de early boot en mettant initramfs (initial RAM file system) à jour:

1
sudo update-initramfs -u

Ajouter le disque raid dans fstab:

1
echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab

Troubleshooting

Voir le(s) raid(s) existant(s):

1
cat /proc/mdstat

Supprimer un raid:

1
2
3
4
sudo umount /dev/md0
mdadm -S /dev/md0
mdadm --remove /dev/md0
# Vérifier qu'il n'est pas présent dans /etc/fstab

Examiner les superblocks:

1
sudo mdadm -E /dev/sdd

Effacer les superblocks:

1
sudo mdadm --zero-superblock /dev/sdd

Lister les disques:

1
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

Wiping the entire disk:

1
dd if=/dev/zero of=/dev/sdX bs=1M

Bonus 1: Wiping the entire disk for security reasons (plus long):

1
dd if=/dev/urandom of=/dev/sdX bs=1M

When you delete a file or format a hard drive you are basically just telling the computer that it can use this portion of the disk again if it is needed. If that portion of the disk is not every written over again. The data will remain indefinitely. So, in order to make deleted data unrecoverable we must write over it.

If you are really paranoid or just want to be ultra secure you could write over the drive 7 times with random data. This is the same procedure the US Government uses to secure its own data.

Cadeau, le script associé:

1
2
3
#!/bin/bash 
for n in `seq 7`; do dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc; done
# chmod a+x wipeIt

Bonus 2: Voir la progression de dd

1
2
3
4
5
6
7
8
9
10
11
12
Option 1:
sudo dd if=/dev/zero of=/dev/sdX bs=1M status=progress

Option 2:
# Dans un 1er terminal
sudo dd if=/dev/zero of=/dev/sdX bs=1M

# Dans un second terminal on récupère le pid du process dd et on le kill toutes les 10s
while sudo kill -USR1 `pidof dd` ; do sleep 10 ; done

# Retourner dans le 1er terminal pour voir la progression
# On voir que formater plusieurs tera de cette façon peut prendre pas mal de temps...