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/sdbroot@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 -lroot@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/sdb1Vous 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 removemv /var/lib/mysql/ /var/lib/mysql_bak
mkdir /var/lib/mysql
chown mysql:mysql /var/lib/mysql
chmod 700 /var/lib/mysql4 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 1015 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 :
mountroot@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 -hroot@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 -laroot@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/mysqlMaintenant, déplaçons les bases de données de notre sauvegarde vers /var/lib/mysql :
cp -pfr /var/lib/mysql_bak/* /var/lib/mysqlPuis démarrez MySQL :
/etc/init.d/mysql startC’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 defaults6 Liens
- OpenVZ : http://openvz.org/
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.