Partager un volume avec un conteneur LXC sur Proxmox VE

Nous allons voir comment partager des données du serveur PVE avec un conteneur LXC.

Partager un volume avec un conteneur LXC sur Proxmox VE
proxmox proxmoxve pve lxc share

Au sommaire :

  • 1-Créer un conteneur LXC non privilégié
  • 2-Ajouter un disque au système hôte
  • 3-Rendre visible le disque au conteneur

1-Créer un conteneur LXC non privilégié

Téléchargez un template Ubuntu 22.04 LTS.

Vous devriez le trouver à cet endroit.

Cliquez sur "Create CT".

General

  • CT ID : choisissez un identifiant disponible
  • Hostname : nommez votre conteneur
  • Password/Confirm password : choisissez un mot de passe et confirmez le
  • SSH public key (recommandé) : indiquez votre clé SSH publique pour vous connecté sans mot de passe

Décochez les cases "Nesting" (pas besoin de créer des conteneurs dans un conteneur) et "Unprivileged container" car nous souhaitons que le conteneur puisse accéder à des ressources du système hôte comme certains point de montage.

Template

  • Storage : sélectionnez le stockage qui contient le template
  • Template : sélectionnez le template Ubuntu 22.04 LTS

Disks

  • Storage : sélectionnez "local-lvm"
  • Disk size (GiB) : laissez la taille par défaut

CPU

  • Cores : laissez par défaut

Memory

  • Memory (Mib)/Swap (Mib) : laissez la taille par défaut

Network

  • IPv4/CIDR : indiquez une adresse IP statique.
  • Gateway (IPv4) : Indiquez la passerelle de votre réseau local.

DNS

  • DNS domain/DNS servers : laissez par défaut ou indiquez celui que vous préférer (Cloudflare/Google pour l'exemple).

Vérifiez que tout est bon puis validez.

Ensuite, il va falloir ajouter un disque SATA/USB au système hôte et rendre accessible ce dernier.

2-Ajouter un disque au système hôte

Proxmox VE : disques SATA/USB (partie 4)
Au sommaire : * 1-Ajouter un disque * 2-Ajouter un périphérique SATA * 3-Ajouter un disque USB 1-Ajouter un disque Étape suivante. Vous allez apprendre comment ajouter un disque supplémentaire (SSD, disque dur) à votre serveur. Cela vous permettra de mettre à disposition de votre serveur Proxmox VE un plus grand espace de stockage.

Branchez bien votre disque, allez sur le terminal de votre serveur et tapez la commande "lsblk", vous devriez trouver le disque sous le nom "/dev/sdb".

Via l'interface web, vous pouvez le localiser dans "nomduserveur\Disks". Proxmox VE vous permet de faire un wipe disk (formatage en profondeur) ainsi qu'une vérification des infos SMART.

Tapez la commande "cfdisk /dev/sdb" puis sélectionnez comme label "gpt".

Cliquez sur "New" pour créer une nouvelle partition.

Validez en appuyant sur "Entrée".

Retenez bien le nom de la partition nouvellement crée qui est "/dev/sdb1".

Appliquez les changements avec "write", validez par "yes" puis quittez avec "Quit" pour synchroniser le tout.

Passez au formatage. Revenez au terminal et tapez la commande "mkfs.ext4 /dev/sdb1" (make filesystem ext4 /dev/sb1) pour formater la partition au format ext4 (le plus répandu sur Linux)..

Pour en savoir plus sur le format ext4.

ext4 — Wikipédia

Il vous faut maintenant rendre le volume accessible :

  • Créez un dossier (par exemple storage1) dans /mnt (mount, le point de montage le plus utilisé sur Linux),
  • Montez le volume "/dev/sdb1" dans "/mnt/storage1"

Vous voyez avec la commande "df -h" que le volume est bel et bien monté et fait bien 32 Go.

Le hic, c'est qu'au redémarrage du serveur, le volume ne sera pas monté automatiquement. Pour qu'il soit monté en permanence, il faut ajouter une ligne au fichier /etc/fstab.

Vous avez deux choix :

  • Soit indiquer le point de montage (/dev/sdb1),
  • Soit indiquer l'identifiant du volume,

Choisissez plutôt la seconde option car c'est la meilleure pratique à adopter. Si vous indiquez le point de montage qui est "/dev/sdb1" au lieu de l'identifiant et que vous changez l'emplacement du disque un de ces jours, le point de montage peut changer (/dev/sdc1 ou /dev/sdd1 exemple) et donc votre volume sera inaccessible (pas folle la guêpe).

Pour affichez le UUID du volume "/dev/sdb1", tapez la commande "blkid /dev/sdb1".

Ouvrez le fichier /etc/fstab et ajoutez les deux lignes suivantes dont le UUID du volume.

# <file system>                                 <mount point>   <type>     <options>          <dump>  <pass>
UUID="96a01552-0059-421b-968e-afa19dda4b56"     /mnt/storage1   ext4       defaults           0       2

Enregistrez les modifications avec "CTRL+O", validez par "Entrée" puis quittez par "CTRL+X".

Pour mieux comprendre comment monter un volume dans "/etc/fstab".

/etc/fstab / Wiki / Debian-facile
debian,linux,debian-facile,debianfacile

3-Rendre visible le disque au conteneur

Si je tape la commande "blkid /dev/sdb1" (un disque dur 2 To connecté en USB sur mon serveur PVE), je peux obtenir l'identifiant pour l'ajouter au fichier "/etc/fstab".

Dans ma configuration, le volume "sdb1" est monté dans "/mnt/retronas" si je tape la commande "lsblk".

Mais si je tape la commande "blkid /dev/sdb1" dans le conteneur, aucun ID n'en ressort donc impossible de l'ajouter au fichier /etc/fstab" côté conteneur.

Donc comment faire pour que le point de montage "mnt/retronas" côté système hôte soit accessible dans un conteneur LXC ?

Dans le conteneur LXC, commencez par créer le dossier qui va accueillir le point de montage. De préférence, faites en sorte que le nom soit identique des deux côtés (hôte et LXC).

mkdir /mnt/retronas 

Puis ouvrez le fichier de configuration de votre conteneur LXC (conteneur 107 pour ma part).

nano /etc/pve/lxc/107.conf

Enfin, ajoutez la ligne suivante en pensant bien à l'adapter à votre configuration.

lxc.mount.entry = /mnt/retronas mnt/retronas none bind 0 0

Pour ma part, j'indique que le point de montage "mnt/retronas" où est monté le disque dur 2 To connecté en USB côté système hôte doit être visible dans le conteneur LXC dans le point de montage "/mnt/retronas".

Sauvegardez le tout (Ctrl+O), redémarrez le conteneur et normalement vous devriez avoir le point de montage qui apparait.

Sources

How to make a drive mount avaialble inside a container?
I intend to use the mount inside the container for a postgres database. I have been unable to make the drive available inside the container. So far I have: mounted /dev/sdb to /mnt/psql on the host