OpenVZ · 9 min read · Oct 11, 2025

OpenVZ : Montage des périphériques/partitions/répertoires hôtes dans un conteneur avec des montages de liaison (Debian/Ubuntu)

OpenVZ : Montage des périphériques/partitions/répertoires hôtes dans un conteneur avec des montages de liaison (Debian/Ubuntu)

Version 1.0
Auteur : Falko Timme
Suivez-moi sur Twitter

Parfois, vous vous trouvez dans une situation où vous devez monter un disque dur, une partition ou un répertoire de l’hôte OpenVZ à l’intérieur d’un conteneur OpenVZ - par exemple, vous ajoutez un SSD rapide à l’hôte et souhaitez y placer les bases de données MySQL de votre conteneur pour rendre MySQL plus rapide. Ce tutoriel explique comment vous pouvez monter des périphériques/partitions/répertoires hôtes dans un conteneur OpenVZ avec des montages de liaison.

Je ne donne aucune garantie que cela fonctionnera pour vous !

1 Remarque préliminaire

Dans ce tutoriel, j’ai un conteneur OpenVZ avec l’ID de conteneur 101 qui exécute MySQL. J’ajoute un deuxième disque dur à l’hôte et je veux mettre le répertoire MySQL du conteneur /var/lib/mysql sur le deuxième disque dur.

2 Préparation de l’hôte

Hôte :

Si vous avez ajouté un nouveau disque dur à l’hôte, vous devriez le voir dans la sortie de…

fdisk -l

… et vous devriez voir qu’il n’est pas formaté (à moins que vous n’ayez créé des partitions dessus auparavant) - dans cet exemple, le disque dur est /dev/sdb :

root@server1:~# fdisk -l  
   
 Disque /dev/sda : 32.2 Go, 32212254720 octets  
 255 têtes, 63 secteurs/piste, 3916 cylindres  
 Unités = cylindres de 16065 * 512 = 8225280 octets  
 Taille du secteur (logique/physique) : 512 octets / 512 octets  
 Taille I/O (minimum/optimal) : 512 octets / 512 octets  
 Identifiant de disque : 0x00029d5c  
   
    Périphérique Démarrer Fin Blocs Id Système  
 /dev/sda1 * 1 3793 30461952 83 Linux  
 /dev/sda2 3793 3917 992257 5 Étendu  
 /dev/sda5 3793 3917 992256 82 Linux swap / Solaris  
   
 Disque /dev/sdb : 32.2 Go, 32212254720 octets  
 255 têtes, 63 secteurs/piste, 3916 cylindres  
 Unités = cylindres de 16065 * 512 = 8225280 octets  
 Taille du secteur (logique/physique) : 512 octets / 512 octets  
 Taille I/O (minimum/optimal) : 512 octets / 512 octets  
 Identifiant de disque : 0x00000000  
   
 Le disque /dev/sdb ne contient pas de table de partition valide  
 root@server1:~#

Créons une seule partition dessus :

fdisk /dev/sdb

root@server1:~# fdisk /dev/sdb
Le périphérique ne contient ni table de partition DOS valide, ni étiquette de disque Sun, SGI ou OSF
Création d’une nouvelle étiquette de disque DOS avec l’identifiant de disque 0x31e0dc4b.
Les modifications resteront en mémoire uniquement, jusqu’à ce que vous décidiez de les écrire.
Après cela, bien sûr, le contenu précédent ne sera pas récupérable.

Avertissement : le drapeau invalide 0x0000 de la table de partition 4 sera corrigé par w(rite)

AVERTISSEMENT : le mode compatible DOS est obsolète. Il est fortement recommandé de
désactiver le mode (commande ‘c’) et de changer les unités d’affichage en
secteurs (commande ‘u’).

Commande (m pour l’aide) : <– n
Action de commande
e étendu
p partition primaire (1-4)
<– p
Numéro de partition (1-4) : <– 1
Premier cylindre (1-3916, valeur par défaut 1) : <– ENTRER
Utilisation de la valeur par défaut 1
Dernier cylindre, +cylindres ou +taille{K,M,G} (1-3916, valeur par défaut 3916) : <– ENTRER
Utilisation de la valeur par défaut 3916

Commande (m pour l’aide) : <– t
Partition sélectionnée 1
Code hexadécimal (tapez L pour lister les codes) : <– L

0 Vide 24 NEC DOS 81 Minix / ancien Lin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 caché C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 41 PPC PReP Boot 85 Linux étendu c7 Syrinx
5 Étendu 42 SFS 86 ensemble de volumes NTFS da Données Non-FS
6 FAT16 4d QNX4.x 87 ensemble de volumes NTFS db CP/M / CTOS / .
7 HPFS/NTFS 4e QNX4.x 2ème partie 88 Linux texte brut de Dell Utilitaire
8 AIX 4f QNX4.x 3ème partie 8e Linux LVM df BootIt
9 AIX amorçable 50 OnTrack DM 93 Amoeba e1 accès DOS
a Gestionnaire de démarrage OS/2 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT
f W95 Ext’d (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
11 FAT12 caché 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 diagnostic Compaq 61 SpeedStor a9 NetBSD f4 SpeedStor
14 FAT16 caché <3 63 GNU HURD ou Sys ab démarrage Darwin f2 DOS secondaire
16 FAT16 caché 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 HPFS/NTF caché 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b FAT3 caché W95 75 PC/IX bb Boot Wizard caché fe LANstep
1c FAT3 caché W95 80 Ancien Minix be démarrage Solaris ff BBT
1e FAT1 caché W95
Code hexadécimal (tapez L pour lister les codes) : <– 83

Commande (m pour l’aide) : <– w
La table de partition a été modifiée !

Appel de ioctl() pour relire la table de partition.
Synchronisation des disques.
root@server1:~#

Ensuite, il devrait y avoir la partition /dev/sdb1 :

fdisk -l
root@server1:~# fdisk -l  
   
 Disque /dev/sda : 32.2 Go, 32212254720 octets  
 255 têtes, 63 secteurs/piste, 3916 cylindres  
 Unités = cylindres de 16065 * 512 = 8225280 octets  
 Taille du secteur (logique/physique) : 512 octets / 512 octets  
 Taille I/O (minimum/optimal) : 512 octets / 512 octets  
 Identifiant de disque : 0x00029d5c  
   
    Périphérique Démarrer Fin Blocs Id Système  
 /dev/sda1 * 1 3793 30461952 83 Linux  
 /dev/sda2 3793 3917 992257 5 Étendu  
 /dev/sda5 3793 3917 992256 82 Linux swap / Solaris  
   
 Disque /dev/sdb : 32.2 Go, 32212254720 octets  
 255 têtes, 63 secteurs/piste, 3916 cylindres  
 Unités = cylindres de 16065 * 512 = 8225280 octets  
 Taille du secteur (logique/physique) : 512 octets / 512 octets  
 Taille I/O (minimum/optimal) : 512 octets / 512 octets  
 Identifiant de disque : 0x31e0dc4b  
   
    Périphérique Démarrer Fin Blocs Id Système  
 /dev/sdb1 1 3916 31455238+ 83 Linux  
 root@server1:~#

Formatons-le avec ext4…

mkfs.ext4 /dev/sdb1

… et montons-le sur /mnt/sdb1 :

mkdir /mnt/sdb1  
 mount /dev/sdb1 /mnt/sdb1

Vous devriez voir /dev/sdb1 dans la sortie de…

mount

… maintenant :

root@server1:~# mount  
 /dev/sda1 sur / type ext3 (rw,errors=remount-ro)  
 tmpfs sur /lib/init/rw type tmpfs (rw,nosuid,mode=0755)  
 proc sur /proc type proc (rw,noexec,nosuid,nodev)  
 sysfs sur /sys type sysfs (rw,noexec,nosuid,nodev)  
 udev sur /dev type tmpfs (rw,mode=0755)  
 tmpfs sur /dev/shm type tmpfs (rw,nosuid,nodev)  
 devpts sur /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)  
 /dev/sdb1 sur /mnt/sdb1 type ext4 (rw)  
 root@server1:~#

Pour que /dev/sdb1 soit monté automatiquement au démarrage, ajoutez-le à /etc/fstab :

vi /etc/fstab

| [...] /dev/sdb1 /mnt/sdb1 ext4 errors=remount-ro 0 1 |

3 Préparation du conteneur

Conteneur :

Comme nous voulons déplacer /var/lib/mysql vers la nouvelle partition, nous devons d’abord arrêter MySQL, nous assurer qu’il ne démarre pas automatiquement lorsque le conteneur est démarré, créer une sauvegarde de /var/lib/mysql et un nouveau répertoire /var/lib/mysql vide :

/etc/init.d/mysql stop  
 update-rc.d -f mysql remove
mv /var/lib/mysql/ /var/lib/mysql_bak  
 mkdir /var/lib/mysql  
 chown mysql:mysql /var/lib/mysql  
 chmod 700 /var/lib/mysql

4 Création d’un script de montage de liaison pour le conteneur sur l’hôte

Hôte :

Sur l’hôte, nous créons maintenant le script de montage de liaison /etc/vz/conf/101.mount (assurez-vous de remplacer 101 par l’ID de conteneur correct !) comme suit :

vi /etc/vz/conf/101.mount

| #!/bin/bash . /etc/vz/vz.conf . ${VE_CONFFILE} SRC=/mnt/sdb1 DST=/var/lib/mysql if [ ! -e ${VE_ROOT}${DST} ]; then mkdir -p ${VE_ROOT}${DST}; fi mount -n -t simfs ${SRC} ${VE_ROOT}${DST} -o ${SRC} |

Vous devez ajuster les variables SRC et DST selon vos besoins. SRC est le répertoire que nous voulons monter dans le conteneur (/mnt/sdb1 dans cet exemple), et DST est le point de montage dans le conteneur.

Si vous souhaitez ajouter des options de montage comme noatime, vous pouvez ajouter l’option -o à la ligne de montage, par exemple comme suit :

| #!/bin/bash . /etc/vz/vz.conf . ${VE_CONFFILE} SRC=/mnt/sdb1 DST=/var/lib/mysql if [ ! -e ${VE_ROOT}${DST} ]; then mkdir -p ${VE_ROOT}${DST}; fi mount -o noatime -n -t simfs ${SRC} ${VE_ROOT}${DST} -o ${SRC} |

Rendez le script exécutable…

chmod +x /etc/vz/conf/101.mount

… et redémarrez le conteneur (c’est pourquoi nous avons désactivé les liens de démarrage système de MySQL pour le conteneur au chapitre trois - /var/lib/mysql est vide en ce moment, ce qui entraînera des erreurs MySQL) :

vzctl restart 101

5 Utilisation du montage de liaison dans le conteneur

Conteneur :

Après que le redémarrage du conteneur soit terminé, vous pouvez vous connecter au conteneur et vérifier si le nouveau montage existe :

mount
root@test:~# mount  
 /dev/simfs sur / type simfs (rw,relatime)  
 /dev/simfs sur /var/lib/mysql type simfs (rw,relatime)  
 proc sur /proc type proc (rw,relatime)  
 sysfs sur /sys type sysfs (rw,relatime)  
 tmpfs sur /lib/init/rw type tmpfs (rw,nosuid,relatime,mode=755)  
 tmpfs sur /dev/shm type tmpfs (rw,nosuid,nodev,relatime)  
 devpts sur /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620)  
 root@test:~#
df -h
root@test:~# df -h  
 Système de fichiers Taille Utilisé Dispo Uti% Monté sur  
 /dev/simfs 1.0G 381M 644M 38% /  
 /dev/simfs 30G 172M 28G 1% /var/lib/mysql  
 tmpfs 128M 0 128M 0% /lib/init/rw  
 tmpfs 128M 0 128M 0% /dev/shm  
 root@test:~#

Allez dans le répertoire /var/lib :

cd /var/lib  
 ls -la
root@test:/var/lib# ls -la  
 total 72  
 drwxr-xr-x 18 root    root    4096 Jul 17 10:25 .  
 drwxr-xr-x 13 root    root    4096 Feb 13  2011 ..  
 drwxr-xr-x  5 root    root    4096 Jul 17 10:16 apt  
 drwxr-xr-x  2 root    root    4096 Oct 16  2010 aptitude  
 drwxr-xr-x  2 root    root    4096 Feb 13  2011 dhcp  
 drwxr-xr-x  7 root    root    4096 Jul 17 10:16 dpkg  
 drwxr-xr-x  2 root    root    4096 Jan  1  2011 initscripts  
 drwxr-xr-x  2 root    root    4096 Jan  1  2011 insserv  
 drwxrwsr-x  2 libuuid libuuid 4096 Feb 13  2011 libuuid  
 drwxr-xr-x  2 root    root    4096 Apr 17  2010 logrotate  
 drwxr-xr-x  2 root    root    4096 Dec 14  2010 misc  
 drwxr-xr-x  4 root    root    4096 Jul 17 10:53 mysql  
 drwx------  3 mysql   mysql   4096 Jul 17 10:24 mysql_bak  
 drwxr-xr-x  2 root    root    4096 Feb 13  2011 pam  
 drwxr-xr-x  2 root    root    4096 Jul 17 10:23 quota  
 drwxr-xr-x  2 root    root    4096 Jul 17 10:52 update-rc.d  
 drwxr-xr-x  2 root    root    4096 Jul 17 10:53 urandom  
 drwxr-xr-x  3 root    root    4096 Feb 13  2011 vim  
 root@test:/var/lib#

Comme vous le voyez, le nouveau répertoire /var/lib/mysql a de mauvaises permissions/propriétés - corrigeons cela (les nouvelles permissions/propriétés devraient être conservées même après un redémarrage du conteneur) :

chown mysql:mysql /var/lib/mysql  
 chmod 700 /var/lib/mysql

Maintenant, déplaçons les bases de données de notre sauvegarde vers /var/lib/mysql :

cp -pfr /var/lib/mysql_bak/* /var/lib/mysql

Puis démarrez MySQL :

/etc/init.d/mysql start

C’est tout ! Une dernière chose que vous devriez faire est de recréer les liens de démarrage système de MySQL afin qu’il démarre automatiquement lorsque le conteneur est démarré :

update-rc.d mysql defaults

6 Liens

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.