Page mise à jour le 30 avril 2024
Mise à jour : 19 décembre 2017
Cet article fait partie d’une série d’article sur l’installation d’un serveur Linux sous Debian
La majorité de ces commandes sont a exécuter avec les droits root.
Objectifs
Exemple de création d’un volume de stockage (non utilisé pour l’OS) en utilisant 4 disques durs de 2 TB en RAID, chiffré avec LUKS :
- RAID5 : création d’une grappe RAID5 avec 4 disques de 2 TB, soit (4-1) x 2 = 6 TB utilisables, et supportant la défaillance matérielle d’un (unique) disque dur ;
- LUKS : chiffrement du volume pour la sécurité.
Création de la grappe RAID5
Partitionnement des disques durs
Chacun des disques formant la grappe RAID doit être partitionné avec le type fd Linux raid auto.
Repérer les disques durs : /dev/sd?
$ fdisk -l
Par exemple, sur mon système :
Disk /dev/sda [utilisé pour l'OS] Disk /dev/sdb [utilisé pour l'OS] Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0xafb48d01 Disk /dev/sdd: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x01754646 Disk /dev/sde: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0xe3b9dc2c Disk /dev/sdf: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x3b197bca Disk /dev/md0 [utilisé pour l'OS : /boot] Disk /dev/md1 [utilisé pour l'OS : LUKS pour la swap] Disk /dev/md2 [utilisé pour l'OS : LUKS pour le VG des LV (/, /var, ...)] Disk /dev/mapper/md1_crypt [LUKS déchiffré pour la swap] Disk /dev/mapper/md2_crypt [LUKS déchiffré pour le VG "VGonCRYPTonMD2" des LV (/, /var, ...)] Disk /dev/mapper/VGonCRYPTonMD2-LVslash: 31.7 GiB Disk /dev/mapper/VGonCRYPTonMD2-LVtmp: 28 GiB Disk /dev/mapper/VGonCRYPTonMD2-LVvar: 14 GiB Disk /dev/mapper/VGonCRYPTonMD2-LVvarlog: 14 GiB Disk /dev/mapper/VGonCRYPTonMD2-LVhome: 363 GiB
Je souhaite donc utiliser /dev/sd[c-d-e-f] pour ma grappe RAID.
Création de la partition RAID sur chacun des disques
A répéter pour /dev/sd[d-e-f]
$ fdisk /dev/sdc
Welcome to fdisk [...] Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-3907029167, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-3907029167, default 3907029167): Created a new partition 1 of type 'Linux' and of size 1.8 TiB. Command (m for help): t Selected partition 1 Partition type (type L to list all types): fd Changed type of partition 'Linux' to 'Linux raid autodetect'. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
On obtient alors, avec disk -l :
Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0xafb48d01 Device Boot Start End Sectors Size Id Type /dev/sdc1 2048 3907029167 3907027120 1.8T fd Linux raid autodetect Idem avec /dev/sd[d-e-f]
Création de la grappe avec mdadm
$ mdadm --create /dev/md3 --level=5 --assume-clean --raid-devices=4 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md3 started.
- mdadm : l’utilitaire d’administration du RAID logiciel de Linux
- — create : on créée une nouvelle grappe
- /dev/md3 : nom de ma grappe (car md0, 1 et 2 existent déjà)
- –level=5 : RAID 5
- –asume-clean : les disques sont « vides » : pas besoin de re-synchroniser les disques d’une ancienne grappe
- –raid-devices=4 : 4 disques durs utilisés
- /dev/sdc1, … : partitions à utiliser (celles que l’on vient de créer)
Vérification avec mdstat et mdadm
$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md3 : active raid5 sdf1[3] sde1[2] sdd1[1] sdc1[0] 5860147200 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] bitmap: 0/15 pages [0KB], 65536KB chunk md2 : active raid1 sdb3[1] sda3[0] 472433664 blocks super 1.2 [2/2] [UU] bitmap: 1/4 pages [4KB], 65536KB chunk md0 : active raid1 sdb1[1] sda1[0] 194368 blocks super 1.2 [2/2] [UU] md1 : active raid1 sdb2[1] sda2[0] 15617024 blocks super 1.2 [2/2] [UU] unused devices: <none>
$ mdadm --detail /dev/md3
/dev/md3: Version : 1.2 Creation Time : Mon Dec 18 23:48:56 2017 Raid Level : raid5 Array Size : 5860147200 (5588.67 GiB 6000.79 GB) Used Dev Size : 1953382400 (1862.89 GiB 2000.26 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Mon Dec 18 23:48:56 2017 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : hercule.val-r.fr:3 (local to host hercule.val-r.fr) UUID : 5dd4e1b1:81b3ba01:2bc69363:659f59ba Events : 1 Number Major Minor RaidDevice State 0 8 33 0 active sync /dev/sdc1 1 8 49 1 active sync /dev/sdd1 2 8 65 2 active sync /dev/sde1 3 8 81 3 active sync /dev/sdf1
Tout semble OK 😉
Ajout de cette grappe à /etc/mdadm/mdadm.conf
$ cat /etc/mdadm/mdadm.conf
# by default (built-in), scan all partitions (/proc/partitions) and all # containers for MD superblocks. alternatively, specify devices to scan, using # wildcards if desired. #DEVICE partitions containers # 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 ARRAY /dev/md/0 metadata=1.2 UUID=9031e9bf:00dd190c:029b5a03:0001e2d5 name=hercule:0 ARRAY /dev/md/1 metadata=1.2 UUID=e6a16006:c4224d67:ff7707fe:01596a9f name=hercule:1 ARRAY /dev/md/2 metadata=1.2 UUID=81fa68f5:78b0f5ce:dc695408:700aba2d name=hercule:2
On ajoute donc une ligne pour le md que l’on vient de créer :
- ARRAY /dev/md/3
(car il s’agit de /dev/md3) - metadata=1.2
(Obtenu avec $ mdadm –detail /dev/md3 | grep Version) - UUID=5dd4e1b1:81b3ba01:2bc69363:659f59ba
(Obtenu avec $ mdadm –detail /dev/md3 | grep UUID) - Ne pas spécifier de nom
$ echo "ARRAY /dev/md/3 metadata=1.2 UUID=5dd4e1b1:81b3ba01:2bc69363:659f59ba" >> /etc/mdadm/mdadm.conf
Mise à jour d’initrd
Pour que la modification de /etc/mdadm/mdadm.conf soit prise en compte à chaque démarrage du système, il faut mettre à jour l’initrd :
$ update-initramfs -tu
Tests
Redémarrer le système, et vérifier que /dev/mdX existe bien.
De même, vérifier avec les commandes ci-dessous que tout est OK :
$ cat /proc/mdstat $ mdadm --detail /dev/md3
Création du volume chiffré avec LUKS
Un article détaillé sur mon site : créer et utiliser une partition chiffrée avec luks sous linux
Création du volume chiffré
$ cryptsetup --verbose luksFormat --verify-passphrase --align-payload=3072 /dev/md3
WARNING! ======== This will overwrite data on /dev/md3 irrevocably. Are you sure? (Type uppercase yes): YES Enter passphrase: Verify passphrase: Command successful.
Monter manuellement le volume chiffré
$ cryptsetup luksOpen /dev/md3 md3_crypt
Enter passphrase for /dev/md3: No key available with this passphrase. Enter passphrase for /dev/md3:
Vérifier que le mapper /dev/mapper/md3_crypt existe bien
$ ls /dev/mapper/md3_crypt
Formater le volume chiffré
$ mke2fs -t ext4 -L data6TB /dev/mapper/md3_crypt
# mke2fs -t ext4 -L data6TB /dev/mapper/md3_crypt mke2fs 1.43.4 (31-Jan-2017) Creating filesystem with 1465036416 4k blocks and 183132160 inodes Filesystem UUID: a5055af2-6640-403c-b56f-e02e138903a3 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000, 550731776, 44972544 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done
Monter le volume chiffré
$ mkdir /mnt/int_RAID_LUKS_6TB $ mount /dev/mapper/md3_crypt /mnt/int_RAID_LUKS_6TB/