1.1 Espace de stockage des systèmes de fichiers
Nous préparons un disque dédié pour héberger le backend Btrfs de LXD. Cette isolation évite de saturer le disque système et suit la démarche décrite dans les Figures 5 à 7 du rapport.
Remarque : ce TP est réalisé dans une VM Ubuntu exécutée sous VirtualBox. Avant de manipuler la couche de stockage, éteignez la VM afin d’éviter toute corruption du disque virtuel.
Nous ajoutons un VDI distinct du disque système pour y loger exclusivement les volumes LXD. Cette séparation nous laisse reformater ou redimensionner l’espace réservé aux conteneurs sans toucher au système invité, facilite les snapshots Btrfs et protège la racine / contre une saturation accidentelle.
Figure 1 : Ajout d'un second disque virtuel (VDI) dédié à LXD dans VirtualBox.
Figure 2 : Création d'un disque VDI de 40 Gio en allocation dynamique.
Le choix du format VDI (format natif VirtualBox) garantit la meilleure compatibilité avec les fonctions de l’hyperviseur : snapshots cohérents, clonage rapide et possibilité de compactage ou de redimensionnement via VBoxManage. Avec l’allocation dynamique, l’image ne grossit que selon les blocs réellement écrits, ce qui économise l’espace disque de l’hôte tout en restant transparent pour le noyau invité. Si vous devez redimensionner le pool LXD plus tard, vous pourrez utiliser VBoxManage modifymedium --resize pour agrandir le VDI.
Une fois le disque ajouté et attaché à la VM, relancez Ubuntu et poursuivez avec le partitionnement LVM décrit ci-dessous.
- Ajouter un second disque virtuel (VDI) dans VirtualBox, de préférence 40 Gio avec allocation dynamique.
- Initialiser le disque avec une table GPT et une unique partition LVM.
- Chaîner LVM : création du volume physique (
pvcreate), du groupe (vgcreate) puis du volume logique de 32 Gio (lvcreate).
- Formater le volume logique en Btrfs avec l’étiquette
lxd et conserver l’UUID pour le montage automatique.
Prudence : les commandes parted et pvcreate sont destructrices. Vérifiez deux fois l’identifiant du disque (/dev/sdb dans l’exemple) avant d’exécuter le script.
Vérifier le disque et poser les variables
Redémarrez la VM après l’ajout du VDI puis lancez lsblk pour vérifier que le disque apparaît bien en /dev/sdb, distinct du disque système /dev/sda. Les entrées loop* correspondent aux snaps Ubuntu et sr0 au média des Guest Additions.
Installez ensuite les prérequis (lvm2, btrfs-progs, parted) puis posez les variables de travail pour standardiser la suite des commandes.
Figure 3 : Vérification du nouveau disque via lsblk.
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
sudo apt install -y lvm2 btrfs-progs parted
DISK=/dev/sdb
VG=vg_lxd
LV=lxd
SIZE=32G
MNT=/var/lib/lxd
Nous préparons le nouveau disque pour LVM en trois commandes parted. Nous posons d’abord une table de partitions GPT afin de repartir proprement et de bénéficier d’un schéma moderne, puis nous créons une unique partition couvrant tout le disque (1 MiB ? 100 %) et enfin nous activons le flag LVM. Cette séquence (Figure 5) garantit un alignement correct des blocs et assure que lvm2 reconnaîtra immédiatement ${DISK}1 comme support valide. Remarque : ces opérations peuvent aussi être réalisées via l’interface graphique de gparted.
Figure 5 : Partitionnement du disque en vue d’un usage LVM.
Cette étape est destructrice pour le disque ciblé : elle efface toute structure préexistante sur $DISK. D’où l’importance d’avoir confirmé juste avant, avec lsblk, que $DISK pointe bien vers le nouveau volume (/dev/sdb). À l’issue des commandes parted, /dev/sdb1 est prêt pour la suite de la chaîne PV ? VG ? LV.
Nous enchaînons alors les trois étapes classiques de LVM (Figure 6). pvcreate ${DISK}1 initialise la partition comme volume physique, vgcreate agrège ce PV dans le groupe vg_lxd et lvcreate alloue un volume logique lxd de 32 Gio. Les messages « successfully created » confirment la réussite de chaque étape et la disponibilité du LV pour la suite.
Figure 6 : Chaînage LVM (pvcreate, vgcreate, lvcreate).
Nous formatons enfin le volume logique vg_lxd/lxd en Btrfs avec l’étiquette lxd (Figure 7). La sortie de mkfs.btrfs indique un système de fichiers de 32 Gio, un UUID unique et les profils par défaut (Data=single, Metadata=DUP) qui apportent de la redondance pour les métadonnées. Les fonctionnalités modernes (free-space-tree, no-holes, skinny-metadata) sont activées automatiquement et adaptées aux noyaux récents.
Figure 7 : Création du système de fichiers Btrfs sur le LV lxd.
Pourquoi ces variables ? Elles évitent les erreurs de frappe et permettent de rejouer facilement la préparation du stockage : DISK cible le nouveau VDI, VG et LV nomment le groupe et le volume logique, SIZE fixe la capacité demandée par le TP et MNT pointe vers le chemin LXD (issu de l’installation snap).
Figure 4 : Déclaration des variables shell pour automatiser la préparation du stockage LXD.
Partitionnement, LVM et formatage
Avec ces variables en place, enchaînez le schéma PV ? VG ? LV (Figures 5 et 6) avant de formater en Btrfs (Figure 7).
sudo parted "$DISK" --script mklabel gpt
sudo parted "$DISK" --script mkpart primary 1MiB 100%
sudo parted "$DISK" --script set 1 lvm on
sudo pvcreate ${DISK}1
sudo vgcreate "$VG" ${DISK}1
sudo lvcreate -L "$SIZE" -n "$LV" "$VG"
sudo mkfs.btrfs -L lxd /dev/mapper/${VG}-${LV}
La Figure 9 illustre l’ajout de l’entrée persistante dans /etc/fstab. L’usage de l’UUID garantit un montage stable au démarrage, indépendamment des noms /dev/sdX. Le test grep -qF rend l’opération idempotente et évite les doublons, tandis que les champs finaux 0 2 demandent à systemd d’effectuer un fsck après la racine.
Figure 9 : Ajout idempotent de l’entrée fstab via l’UUID.
Une fois mount -a exécuté, contrôlez le résultat comme dans la Figure 10 : lsblk -f, mount, df -h et btrfs filesystem df doivent confirmer la présence du volume vg_lxd-lxd monté en Btrfs sur $MNT avec l’étiquette lxd. Les options rw,relatime,space_cache=v2,subvol=/ montrent que le backend est prêt pour LXD.
Figure 10 : Contrôle du montage Btrfs et de l’espace disponible.
LSBLK OUTPUT (extrait)
sdb 40G disk
+-sdb1 40G part
pvcreate /dev/sdb1 --> Physical volume "/dev/sdb1" successfully created
vgcreate vg_lxd ... --> Volume group "vg_lxd" successfully created
lvcreate ... -n lxd --> Logical volume "lxd" created
mkfs.btrfs ... --> UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Après ces vérifications, le volume Btrfs de 32 Gio est monté et persistant grâce à l’entrée fstab : même si systemd signale d’exécuter daemon-reload, le montage est effectif. Nous pouvons désormais initialiser LXD en choisissant btrfs comme backend et en pointant sur ce chemin pour y stocker images, conteneurs et snapshots.