Skip to content

Stockage

Tip

Autres documentation - ncdu : Analyseur d'utilisation disque en ncurses (bien plus lisible que du). - OpenZFS Documentation - LVM sur ArchWiki : Toujours ArchWiki

Diagnostic de surutilisation

Identifier les processus (iotop)

L'outil iotop permet de voir quels processus utilisent le disque. L'option la plus utile sur la durée est le mode cumulatif qui permet de voir le total écrit/lu plutôt que l'instantané.

# -a : Mode Accumulé (affiche la somme totale lue/écrite depuis le lancement)
# -o : Only (masque les processus inactifs)
# -P : Processes (affiche les processus parents, plus lisible)
sudo iotop -a -oP

Identifier les fichiers (fatrace)

Une fois le PID (Process ID) identifié avec iotop (exemple PID 337521), fatrace permet de savoir exactement quels fichiers ce processus est en train de toucher. C'est magique pour comprendre pourquoi un conteneur Docker "gratte".

# Affiche en temps réel les fichiers ouverts par le PID 337521
sudo fatrace -p 337521

# Ou pour filtrer directement dans le flux global
sudo fatrace | grep "337521"

Tip

Cas particulier des torrents (Transmission/Qbittorrent) Si iotop montre une lecture massive (plusieurs Mo/s constants) mais que fatrace ne montre presque rien ou boucle sur le même fichier .mkv, c'est souvent une vérification de hash (Hash Check) suite à un arrêt brutal. Le client relit tout le fichier pour vérifier son intégrité.

Exemple de gestion de commande simple de montage

Commande de montage

Montage local

sudo mount /dev/sdX1 /mnt/data

SSHFS (via FUSE)

sshfs user@remote_host:/remote/path /mnt/sshfs -o allow_other

SMB/CIFS (Samba/Windows)

sudo mount -t cifs //192.168.1.10/share /mnt/smb -o username=user,password=pass

S3 (via s3fs)

s3fs bucket_name /mnt/s3 -o allow_other -o use_cache=/tmp

WebDAV (via davfs2)

sudo mount -t davfs https://webdav.example.com /mnt/webdav

Configuration FUSE (allow_other)

Par défaut, un montage FUSE (sshfs, s3fs) n'est accessible que par l'utilisateur qui l'a lancé. Pour autoriser l'accès aux autres utilisateurs (dont root) :

  1. Décommenter la ligne user_allow_other dans le fichier /etc/fuse.conf.
  2. Ajouter l'option -o allow_other lors du montage.

Script de surveillance et reconnexion automatique

Pour maintenir un montage réseau (SSHFS, SMB, S3) actif, on peut utiliser une boucle de vérification :

#!/bin/bash

MOUNT_POINT="/mnt/sshfs"
REMOTE_SOURCE="user@remote_host:/remote/path"

while true; do
    # Vérifie si le point de montage est actif
    if mountpoint -q "$MOUNT_POINT"; then
        echo "$(date): $MOUNT_POINT est connecté."
    else
        echo "$(date): $MOUNT_POINT déconnecté. Tentative de montage..."

        # Tentative de remontage (adapter la commande selon le type)
        sshfs "$REMOTE_SOURCE" "$MOUNT_POINT" -o allow_other,reconnect

        if mountpoint -q "$MOUNT_POINT"; then
            echo "Succès du remontage."
        else
            echo "Échec du remontage. Nouvel essai dans 30s."
        fi
    fi
    sleep 30
done

Empêcher l'écriture si le disque n'est pas monté

Démonte le disque s'il est branché :

sudo umount /mnt/mon_disque

Rends le dossier immuable :

sudo chattr +i /mnt/mon_disque

Note

Pourquoi ça marche ? Quand le disque est absent, l'attribut +i sur le dossier /mnt/mon_disque bloque toute écriture. Dès que le disque est monté, le système de fichiers du disque "masque" le dossier local. Comme le disque lui-même n'a pas cet attribut, l'écriture devient possible. Si le disque tombe, l'attribut du dossier "parent" réapparaît et bloque à nouveau les écritures.

Point de montage avec fstab

Le fichier situer dans /etc/fstab permet de monter des disque automatiquement au démarrage : Dans cette exemple la première ligne permet de monter un partage SAMBA (SMB) a l'aide d'un fichier texte. La deuxième ligne est un partage de fichier NFS

//VMFSFMESWT01.organisation.one/erp /mnt/erp cifs credentials=/etc/samba/user.cred,file_mode=0777,dir_mode=0777,_netdev,auto 0 0
10.168.7.20:/stocks/  /mnt/stocks nfs4 _netdev,auto,soft,timeo=30,retrans=2 0 0

Note

Pas l'ideal que c'est de point de montage en réseau

fdisk - Gestion des partitions

Commande de base

sudo fdisk /dev/sdX  # X = lettre du disque (a,b,c...)

Commandes principales dans fdisk

Commande Description
m Afficher le menu d'aide
p Afficher la table de partitions
n Créer une nouvelle partition
d Supprimer une partition
t Modifier le type d'une partition
l Liste des types de partitions
w Écrire les modifications et quitter
q Quitter sans sauvegarder

Types de tables de partitions

Commande Description
o Créer une nouvelle table DOS vide
g Créer une nouvelle table GPT vide

Types courants de partitions

Code Type
82 Linux swap
83 Linux
ef EFI System
8e Linux LVM

Exemple de création de partition

  1. sudo fdisk /dev/sdX
  2. n (nouvelle partition)
  3. Choisir le type (primaire/étendue)
  4. Numéro de partition
  5. Premier secteur (défaut)
  6. Dernier secteur ou taille (ex: +20G)

Vérifier les partitions

sudo fdisk -l
ou
lsblk

Warning

Notes importantes : - Toujours sauvegarder avant modification - Vérifier le bon périphérique - Les modifications sont appliquées après w - Utiliser q pour sortir sans sauvegarder

Utilisation de LVM

Note

Nécessite le package lvm2 pour fonctionner

Redimensionner une partition LVM a chaud

sudo vgdisplay
lvextend -L+10G /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

source : https://computercarriage.com/2020/05/12/lvm-howto/

Monter un disk LVM

On doit d'abort créer un nouveau volume physique:

sudo pvcreate /dev/sdb

Crée le volume groupe et le volume logique :

sudo vgcreate data-vg /dev/sdb
sudo lvcreate -l 100%FREE -n data data-vg
Dans cette exemple notre disque est /dev/sdb le nom de notre volume groupe est data-vg et le volume logique est data

Une fois le LVM préparer il faut formater la partition :

sudo mkfs.ext4 /dev/data-vg/data

On peut ensuite le monter au démarrage avec FSTAB le fichier est situer dans : /etc/fstab Puis rajouter la ligne :

/dev/data-vg/data /mnt/data ext4 defaults 0 0

Supprimé des partitions

Il est possible que les disques conservent des signatures de métadonnées résiduelles provenant d'anciennes configurations LVM ou ZFS. Ces "signatures magiques" peuvent verrouiller le périphérique ou induire en erreur les outils de partitionnement, empêchant ainsi la suppression ou la modification des partitions. Pour nettoyer ces métadonnées et libérer le disque de ses anciennes structures logiques, on peut utiliser l'outil wipefs.

sudo wipefs -a -t gpt -f /dev/sdd

BRTFS

source : - connect ed-diamond - stephane-robert - ai.albt

Préparation du disque

sudo mkfs.btrfs /dev/sdb

Sauvegarde avec Btrfs

On peut utiliser Snapper pour sauvegarder les modifications sur un système Btrfs.

sudo snapper -c backup create-config /mnt/backup

Pour voir si la commande a fonctionné :

sudo snapper -c backup list
On peut aussi vérifier le statut du service du daemon :

sudo systemctl status snapper-timeline.service

Voir le status du disque nouvellement créer :

sudo snapper -c backup list

Pour faire un rollback :

sudo snapper -c backup rollback <num>

Si on ne veut plus utiliser Snapper, on peut supprimer la configuration :

sudo snapper -c backup delete-config

ZFS

Documentation :

OpenZFS Oracle

Commandes ZFS utiles

Gestion des Pools :

# Lister les pools et voir l'état physique
zpool list
zpool status

# Créer un pool (miroir simple sur 2 disques)
zpool create monpool mirror /dev/sda /dev/sdb

Gestion des Datasets :

# Lister et créer
zfs list
zfs create monpool/mesdonnees

# Configuration recommandée
zfs set compression=lz4 monpool/mesdonnees
zfs set atime=off monpool/mesdonnees

Snapshots manuels :

# Créer, lister, restaurer, supprimer
zfs snapshot monpool/mesdonnees@save1
zfs list -t snapshot
zfs rollback monpool/mesdonnees@save1
zfs destroy monpool/mesdonnees@save1

Sanoid

Repo : Github

Pour une gestion plus robuste et native des snapshots ZFS (particulièrement sur Debian), Sanoid est souvent préféré.

La configuration se fait dans /etc/sanoid/sanoid.conf.

Exemple de politique pour un dataset data-1 (Garder 8 horaires, 1 hebdo) :

[data-1]
use_template = production
recursive = yes

[template_production]
frequently = 0
hourly = 8
daily = 0
weekly = 1
monthly = 0
yearly = 0
autosnap = yes
autoprune = yes

Cette configuration s'appuie sur un timer systemd (sanoid.timer) pour l'automatisation.


Surveillance de l'état du Pool (Monitoring)

Il est crucial de vérifier régulièrement la santé du pool ZFS.

zpool status data-1

L'état global : Doit être ONLINE. L'état des disques : Aucun disque ne doit être en : - OFFLINE - FAULTED - UNAVAIL - DEGRADED Erreurs E/S et Checksum : Les colonnes READ, WRITE, CKSUM doivent être à 0. - Exemple de détection regex : ^\s+.*\s+[1-9][0-9]*\s+[0-9]+\\s+[0-9]+.*$ (cherche des chiffres non-nuls dans les erreurs). Intégrité des données : Le message No known data errors doit être présent.

dd

Pour copier une image disque :

sudo dd if=Téléchargements/2021-03-04-raspios-buster-armhf-lite.img of=/dev/sdb bs=4M conv=fsync status=progress
sudo dd if=/dev/mapper/sda3_crypt of=/home/user/Documents/deb-laptop.iso bs=2048 conv=notrunc status=progress

Pour Effacer le Master Boot Record (MBR) :

dd if=/dev/zero of=/dev/hdX bs=446 count=1

ou

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

Chiffrement

[Unsafe] Déchifrement luks sans tpm ou ubikey depuis le démarrage

(Source)[https://www.howtoforge.com/automatically-unlock-luks-encrypted-drives-with-a-keyfile]

  • Ma partition /ot est /dev/sda1
  • Mon volume LVM que je veux décrypter est /dev/sda3
  • J'étais en root, mais si vous ne l'êtes pas, ajoutez sudo à toutes les commandes

Voici les étapes :

  1. Commencez par créer un keyfile avec un mot de passe (j'en génère un pseudo-aléatoire) :
dd if=/dev/urandom of=/boot/initd bs=1024 count=4
  1. Ensuite définissez les permissions de lecture pour root uniquement :
chmod 0400 /boot/initd
  1. Puis ajoutez le keyfile comme clé de déverrouillage :
cryptsetup -v luksAddKey /dev/sda3 /boot/initd

Vous serez invité à saisir le mot de passe de chiffrement.

  1. Trouvez l'UUID de la partition /boot avec la commande suivante (pas besoin d'être root) :
ls -l /dev/disk/by-uuid/

Voici un exemple de sortie (ce n'est pas la sortie réelle car je l'ai prise d'une autre machine) :

$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Jan 15 03:36 025c66a2-c683-42c5-b17c-322c2188fe3f -> ../../sda2
lrwxrwxrwx 1 root root 10 Jan 15 03:36 9e7a7336-3b81-4bbe-9f1a-d43415df1ccb -> ../../sda1
  1. Éditez ensuite /etc/crypttab avec votre éditeur préféré :
nano /etc/crypttab

Le contenu ressemblera à ceci (encore une fois, c'est d'une autre machine) :

sda3_crypt UUID=025c66a2-c683-42c5-b17c-322c2188fe3f none luks,discard
  1. Remplacez none par /dev/disk/by-uuid/[uuid de la partition /boot]:/keyfile et remplacez discard par keyscript=/lib/cryptsetup/scripts/passdev.

Le résultat devrait ressembler à ceci :

sda3_crypt UUID=025c66a2-c683-42c5-b17c-322c2188fe3f /dev/disk/by-uuid/9e7a7336-3b81-4bbe-9f1a-d43415df1ccb:/initd luks,keyscript=/lib/cryptsetup/scripts/passdev
  1. Sauvegardez le fichier et mettez à jour l'initramfs :
update-initramfs -u
  1. C'est tout, vous pouvez maintenant redémarrer :
reboot

Pour le supprimer à nouveau (comme je voulais le faire) :

  1. Vérifiez d'abord qu'il n'y a que deux clés sur le système (l'originale et le nouveau keyfile) :
cryptsetup luksDump /dev/sda3 | grep BLED

Cela générera une sortie similaire à celle-ci :

Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
  1. Pour supprimer la clé dans l'emplacement 1 (le keyfile), exécutez :
cryptsetup luksKillSlot /dev/sda3 1
  1. Vous serez invité à saisir le mot de passe de chiffrement (l'original, pas celui du keyfile).

  2. Supprimez ensuite le keyfile :

rm /boot/keyfile
  1. Mettez à jour initramfs à nouveau :
update-initramfs -u
  1. Maintenant, quand vous redémarrerez, vous serez invité à saisir un mot de passe. C'est terminé.

LUKS ZFS depuis le système

Part a: clé de cryptag

Créez une clé de cryptage pour le cryptage ZFS natif et ZFS en plus de LUKS

Je ne sais pas s’il est sage d’utiliser la même clé pour le cryptage natif LUKS et ZFS. Mais pour cette démonstration nous utiliserons la même clé.

Créez un dossier pour la clé de chiffrement :

sudo mkdir /root/keystore

et créez une clé de chiffrement hexadécimale

sudo sh -c 'openssl rand -hex 32 > /root/keystore/encryption_key'
sudo chmod 600 /root/keystore/encryption_key

uniquement à des fins de démonstration, j’imprimerai la clé ici :

sudo cat /root/keystore/encryption_key

IMPORTER : Sauvegardez cette clé de cryptage dans un endroit sûr. Le mieux est de l’écrire quelque part. Vous en aurez besoin en cas de reprise après sinistre ! Si vous le souhaitez, vous pouvez utiliser la même clé sur plusieur hôtes !

Part b: obtenez les noms des lecteurs

sudo ls /dev/disk/by-id

On peut aussi voire les disk via cette outil :

sudo fdisk -l

Nous utiliserons ces lecteurs pour notre ZFS au-dessus du pool de machines virtuelles LUKS :

scsi-0QEMU_QEMU_HARDDISK_drive-scsi1
scsi-0QEMU_QEMU_HARDDISK_drive-scsi2

Partie 6c : pool ZFS au-dessus de LUKS

Configurez LUKS sur les lecteurs :

sudo cryptsetup -y -v --type luks2 luksFormat /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1
sudo cryptsetup -y -v --type luks2 luksFormat /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi2

Ajoutez la clé de chiffrement enregistrée à l’en-tête LUKS (LUKS peut avoir plusieurs clés) :

sudo cryptsetup luksAddKey /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 /root/keystore/encryption_key
sudo cryptsetup luksAddKey /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 /root/keystore/encryption_key

Nous pouvons maintenant déverrouiller LUKS avec la clé de cryptage enregistrée OU le mot de passe choisi. Ouvrons LUKS :

sudo cryptsetup luksOpen /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-LUKS -d /root/keystore/encryption_key
sudo cryptsetup luksOpen /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 scsi-0QEMU_QEMU_HARDDISK_drive-scsi2-LUKS -d /root/keystore/encryption_key

maintenant les disques sont accessibles via /dev/mapper. Jetons un coup d’oeil :

ls /dev/mapper

nous pouvons donc accéder à ces lecteurs à l’adresse :

/dev/mapper/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-LUKS
and
/dev/mapper/scsi-0QEMU_QEMU_HARDDISK_drive-scsi2-LUKS

et créer un pool en mirroir dans notre cas:

sudo zpool create nomduppolzfs mirror /dev/mapper/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-LUKS /dev/mapper/scsi-0QEMU_QEMU_HARDDISK_drive-scsi2-LUKS

et créez un jeu de données :

sudo zfs create -o atime=off -o compression=lz4 nomduppolzfs/dataset

Automatisons maintenant le déverrouillage au démarrage. Pour cela nous créons un service systemd :

Pour ouvrir les lecteurs LUKS au démarrage, nous créons un service systemd :

sudo nano /etc/systemd/system/luks-open-drive.service

et ajoute ceci :

sudo tee -a /etc/systemd/system/luks-open-drive.service >/dev/null <<'EOF'
[Unit]
Description=unlock LUKS partitions
DefaultDependencies=no
# Il est crucial d'utiliser ces dépendances pour éviter une "race condition"
# où ZFS tente d'importer le pool avant que LUKS n'ait déchiffré tous les disques.
Before=zfs-import.target zfs-import-cache.service zfs-import-scan.service
After=cryptsetup.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/cryptsetup luksOpen /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-LUKS -d /root/keystore/encryption_key
ExecStart=/usr/sbin/cryptsetup luksOpen /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 scsi-0QEMU_QEMU_HARDDISK_drive-scsi2-LUKS -d /root/keystore/encryption_key
# Le tiret (-) permet d'ignorer l'erreur si ZFS a déjà importé le pool autrement
ExecStart=-/usr/sbin/zpool import nomduppolzf

[Install]
WantedBy=zfs-import.target
EOF

activer avec :

sudo systemctl enable luks-open-drive.service
sudo systemctl daemon-reload

Redémarrez pour vérifier si cela fonctionne :

sudo reboot

et vérifiez si la pisceine est en ligne

sudo zpool list

Warning

Si vous rencontrez un pool dans l'état DEGRADED avec des disques manquants ou UNAVAIL au redémarrage, c'est généralement le signe d'une condition de course (race condition) avec les services ZFS natifs. Assurez-vous d'utiliser Before=zfs-import.target... et WantedBy=zfs-import.target comme dans l'exemple ci-dessus, et évitez les solutions de contournement instables (comme ExecStartPre=/bin/sleep 30 ou de se baser sur zfs-mount.service).

Exemple de chiffrement

sudo cryptsetup -y -v --type luks2 luksFormat /dev/disk/by-id/nvme-KXG50ZNV512G_TOSHIBA_48NS10C5TP6T
sudo cryptsetup -y -v --type luks2 luksFormat /dev/disk/by-id/ata-ST2000DM008-2FR102_ZFL52LHV
sudo cryptsetup -y -v --type luks2 luksFormat /dev/disk/by-id/ata-TOSHIBA_DT01ACA200_X4BUPGUGS

sudo cryptsetup luksAddKey /dev/disk/by-id/nvme-KXG50ZNV512G_TOSHIBA_48NS10C5TP6T /root/keystore/encryption_key
sudo cryptsetup luksAddKey /dev/disk/by-id/ata-ST2000DM008-2FR102_ZFL52LHV /root/keystore/encryption_key
sudo cryptsetup luksAddKey /dev/disk/by-id/ata-TOSHIBA_DT01ACA200_X4BUPGUGS /root/keystore/encryption_key

sudo cryptsetup luksOpen /dev/disk/by-id/nvme-KXG50ZNV512G_TOSHIBA_48NS10C5TP6T nvme-KXG50ZNV512G_TOSHIBA_48NS10C5TP6T-LUKS -d /root/keystore/encryption_key
sudo cryptsetup luksOpen /dev/disk/by-id/ata-ST2000DM008-2FR102_ZFL52LHV ata-ST2000DM008-2FR102_ZFL52LHV-LUKS -d /root/keystore/encryption_key
sudo cryptsetup luksOpen /dev/disk/by-id/ata-TOSHIBA_DT01ACA200_X4BUPGUGS ata-TOSHIBA_DT01ACA200_X4BUPGUGS-LUKS -d /root/keystore/encryption_key

sudo zpool create Fast-0 /dev/mapper/nvme-KXG50ZNV512G_TOSHIBA_48NS10C5TP6T-LUKS
sudo zpool create Slow-0 mirror /dev/mapper/ata-ST2000DM008-2FR102_ZFL52LHV-LUKS /dev/mapper/ata-TOSHIBA_DT01ACA200_X4BUPGUGS-LUKS


sudo zfs create -o atime=off -o compression=lz4 Fast-0/dataset
sudo zfs create -o atime=off -o compression=lz4 Slow-0/dataset

sudo tee -a /etc/systemd/system/luks-open-drive-fast-0.service >/dev/null <<'EOF'
[Unit]
Description=unlock LUKS partitions
DefaultDependencies=no
Before=zfs-import.target zfs-import-cache.service zfs-import-scan.service
After=cryptsetup.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/cryptsetup luksOpen /dev/disk/by-id/nvme-KXG50ZNV512G_TOSHIBA_48NS10C5TP6T nvme-KXG50ZNV512G_TOSHIBA_48NS10C5TP6T-LUKS -d /root/keystore/encryption_key
ExecStart=-/usr/sbin/zpool import Fast-0

[Install]
WantedBy=zfs-import.target
EOF

sudo tee -a /etc/systemd/system/luks-open-drive-slow-0.service >/dev/null <<'EOF'
[Unit]
Description=unlock LUKS partitions
DefaultDependencies=no
Before=zfs-import.target zfs-import-cache.service zfs-import-scan.service
After=cryptsetup.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/cryptsetup luksOpen /dev/disk/by-id/ata-ST2000DM008-2FR102_ZFL52LHV ata-ST2000DM008-2FR102_ZFL52LHV-LUKS -d /root/keystore/encryption_key
ExecStart=/usr/sbin/cryptsetup luksOpen /dev/disk/by-id/ata-TOSHIBA_DT01ACA200_X4BUPGUGS ata-TOSHIBA_DT01ACA200_X4BUPGUGS-LUKS -d /root/keystore/encryption_key
ExecStart=-/usr/sbin/zpool import Slow-0

[Install]
WantedBy=zfs-import.target
EOF


sudo systemctl enable luks-open-drive-fast-0.service
sudo systemctl enable luks-open-drive-slow-0.service
sudo systemctl daemon-reload

Note

On peut séviter la passphrase via cette commande : *** sudo cryptsetup -y -v --type luks2 luksFormat /dev/disk/by-id/ata-DISK_ID --key-file /root/keystore/encryption_key ***

source : Peter Bengert | Medium

LUKS LVM depuis le système

Partie A : Clé de chiffrement

Nous utiliserons le même dossier et la même méthode de clé que pour l'exemple ZFS. Si ce n'est pas fait :

sudo mkdir -p /root/keystore
sudo sh -c 'openssl rand -hex 32 > /root/keystore/encryption_key'
sudo chmod 600 /root/keystore/encryption_key

Partie B : Configuration LUKS

Repérez l'ID de votre disque :

ls /dev/disk/by-id/

Formatage LUKS (Exemple avec /dev/disk/by-id/ata-DISK_ID) :

# Formatage direct avec la clé (ATTENTION : aucun mot de passe de secours n'est défini)
sudo cryptsetup -y -v --type luks2 luksFormat /dev/disk/by-id/ata-DISK_ID --key-file /root/keystore/encryption_key

Ouverture manuelle pour la configuration :

sudo cryptsetup luksOpen /dev/disk/by-id/ata-DISK_ID my-secure-disk -d /root/keystore/encryption_key

Partie C : Configuration LVM

Création du volume physique, groupe et volume logique :

sudo pvcreate /dev/mapper/my-secure-disk
sudo vgcreate secure-vg /dev/mapper/my-secure-disk
sudo lvcreate -l 100%FREE -n data-lv secure-vg

Formatage ext4 :

sudo mkfs.ext4 /dev/secure-vg/data-lv

Partie D : Automatisation robuste (Timer Systemd)

Pour une surveillance propre qui respecte la philosophie Systemd (pas de boucle infinie dans les processus), on utilise un couple Service + Timer. Le Service exécute ponctuellement la vérification, et le Timer se charge de le relancer régulièrement.

1. Le Service de vérification (OneShot)

Il vérifie l'état (LUKS ouvert ? LVM actif ? Monté ?) et agit seulement si nécessaire.

sudo tee /etc/systemd/system/luks-lvm-check.service >/dev/null <<'EOF'
[Unit]
Description=Check and Mount LUKS LVM volume
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c '\
  # 1. Ouvrir LUKS si absent \
  if ! [ -b /dev/mapper/my-secure-disk ]; then \
     /usr/sbin/cryptsetup luksOpen /dev/disk/by-id/ata-DISK_ID my-secure-disk -d /root/keystore/encryption_key; \
  fi; \
  # 2. Activer LVM si inactif \
  if [ -b /dev/mapper/my-secure-disk ]; then \
     /sbin/vgchange -ay secure-vg; \
  fi; \
  # 3. Monter si démonté \
  if [ -b /dev/secure-vg/data-lv ] && ! mountpoint -q /mnt/data; then \
     mkdir -p /mnt/data; \
     mount /dev/secure-vg/data-lv /mnt/data; \
  fi'
EOF

2. Le Timer de planification

Il déclenche le service toutes les 30 secondes.

sudo tee /etc/systemd/system/luks-lvm-check.timer >/dev/null <<'EOF'
[Unit]
Description=Run LUKS LVM check periodically

[Timer]
# Démarrer 1min après le boot
OnBootSec=1min
# Puis relancer 30s après chaque exécution
OnUnitActiveSec=30s

[Install]
WantedBy=timers.target
EOF

3. Activation

On active uniquement le timer (qui lancera le service).

sudo systemctl enable --now luks-lvm-check.timer

GlusterFS

source : Gluster