J'ai suivi ce tuto sur le wiki de Archlinux.
J'ai deux disques de 2 To et deux disques de 1 To.
L'idée est de joindre ces disques deux par deux en RAID1. Pas la peine d'utiliser de volumes LVM, ça complique inutilement pour le moment. Un de ces volumes en RAID servira au stockage pour NextCloud, l'autre au stockage des données du reste des applications. Et on chiffre tout ça avec LUKS.
Schématiquement :
Hard drives | /dev/sda (1 To) | /dev/sdb (1 To) | /dev/sdc (2 To) | /dev/sde (2 To) |
Partitions | /dev/sda1 | /dev/sdb1 | /dev/sdc1 | /dev/sdd1 |
RAID arrays | /dev/md0 (1 To) | /dev/md1 (2 To) | ||
Point de montage | /data | /cloud |
Source : Arch wiki
Supprimer les anciennes infos RAID :
mdadm --misc --zero-superblock /dev/<drive or partition>
Création des partitions :
fdisk …
Création des arrays RAID :
mdadm --create --verbose --level=1 --metadata=1.2 --raid-devices=2 /dev/md/raidCloud /dev/sdc1 /dev/sde1 mdadm --create --verbose --level=1 --metadata=1.2 --raid-devices=2 /dev/md/raidData /dev/sda1 /dev/sdb1
On met à jour la configuration de *mdadm* :
mdadm --detail --scan >> /etc/mdadm.conf
Formatage du système de fichier des RAID :
mkfs.ext4 -v -L dataraid /dev/md/raidData mkfs.ext4 -v -L cloudraid /dev/md/raidCloud
Scrubbing : c'est bien de vérifier de temps en temps l'état du RAID et résoudre les erreurs. Pour lancer un *scrub* :
echo check > /sy/block/mdX/md/sync_action
On peut ensuite voir le statut de l'opération avec :
cat /proc/mdstat
Pour arrêter un *scrub* :
echo idle > /sys/block/mdX/md/sync_action
Quand le *scrub* est fini, on peut voir le nombre de blocks problématiques (s'il y en a) :
cat /sys/block/mdX/md/mismatch_cnt
S'il y a des gros problèmes de disques : Arch wiki : removing devices from an array.
Préparation des block devices :
# data cryptsetup open --type plain /dev/md/raidData container --key-file /dev/random dd if=/dev/zero of=/dev/mapper/container bs=1M status=progress cryptsetup close container # cloud cryptsetup open --type plain /dev/md/raidCloud container --key-file /dev/random dd if=/dev/zero of=/dev/mapper/container bs=1M status=progress cryptsetup close container
Chiffrement :
# data cryptsetup -y -v luksFormat /dev/md/raidData cryptsetup open /dev/md/raidData cryptdata mkfs.ext4 /dev/mapper/cryptdata mkdir /data mount /dev/mapper/cryptdata /data # cloud cryptsetup -y -v luksFormat /dev/md/raidCloud cryptsetup open /dev/md/raidCloud cryptcloud mkfs.ext4 /dev/mapper/cryptcloud mkdir /cloud mount /dev/mapper/cryptcloud /cloud
Configuration des fichiers de clé (cf Arch wiki) :
Création des fichiers :
dd bs=512 count=4 if=/dev/random of=/etc/luks-keys/cryptdata dd bs=512 count=4 if=/dev/random of=/etc/luks-keys/cryptcloud
Défendre l'accès de ces fichiers :
chmod 600 /etc/luks-keys/cryptdata chmod 600 /etc/luks-keys/cryptcloud chmod -R 600 /etc/luks-keys/
Configurer LUKS pour utiliser un fichier de clé :
cryptsetup luksAddKey /dev/md/raidData /etc/luks-keys/cryptdata cryptsetup luksAddKey /dev/md/raidCloud /etc/luks-keys/cryptcloud
Déchiffrer et monter automatiquement les disques au démarrage, il faut modifier deux fichiers.
/etc/crypttab :
cryptdata UUID=XXX /etc/luks-keys/cryptdata cryptcloud UUID=XXX /etc/luks-keys/cryptcloud
Pour avoir les UUID en question :
ls -l /dev/disk/by-uuid
/etc/fstab :
/dev/mapper/cryptdata /data ext4 rw,relatime 0 2 /dev/mapper/cryptcloud /cloud ext4 rw,relatime 0 2
Pas besoin d'utiliser de UUID ici, vu que lors du déchiffrement des disques on associe des noms.