OpenVZ Tutorial · 6 min read · Oct 11, 2025
OpenVZ: Montare Dispositivi/Partizioni/Direttori Host In Un Contenitore Con Bind Mounts (Debian/Ubuntu)
OpenVZ: Montare Dispositivi/Partizioni/Direttori Host In Un Contenitore Con Bind Mounts (Debian/Ubuntu)
Versione 1.0
Autore: Falko Timme
Seguimi su Twitter
A volte ti trovi in una situazione in cui devi montare un disco rigido, una partizione o una directory dall’host OpenVZ all’interno di un contenitore OpenVZ - ad esempio, aggiungi un SSD veloce all’host e vuoi mettere i database MySQL del tuo contenitore su di esso per rendere MySQL più veloce. Questo tutorial spiega come puoi montare dispositivi/partizioni/direttori host in un contenitore OpenVZ con bind mounts.
Non rilascio alcuna garanzia che questo funzionerà per te!
1 Nota Preliminare
In questo tutorial ho un contenitore OpenVZ con l’ID contenitore 101 che sta eseguendo MySQL. Aggiungo un secondo disco rigido all’host e voglio mettere la directory MySQL del contenitore /var/lib/mysql sul secondo disco rigido.
2 Preparare L’Host
Host:
Se hai aggiunto un nuovo disco rigido all’host, dovresti vederlo nell’output di…
fdisk -l… e dovresti vedere che non è formattato (a meno che tu non abbia creato partizioni su di esso in precedenza) - in questo esempio il disco rigido è /dev/sdb:
root@server1:~# fdisk -l
Disco /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Dimensione del settore (logico/fisico): 512 bytes / 512 bytes
Dimensione I/O (minima/ottimale): 512 bytes / 512 bytes
Identificatore disco: 0x00029d5c
Dispositivo Boot Inizio Fine Blocchi Id Sistema
/dev/sda1 * 1 3793 30461952 83 Linux
/dev/sda2 3793 3917 992257 5 Esteso
/dev/sda5 3793 3917 992256 82 Linux swap / Solaris
Disco /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Dimensione del settore (logico/fisico): 512 bytes / 512 bytes
Dimensione I/O (minima/ottimale): 512 bytes / 512 bytes
Identificatore disco: 0x00000000
Disco /dev/sdb non contiene una tabella di partizione valida
root@server1:~#Creiamo una singola partizione su di esso:
fdisk /dev/sdbroot@server1:~# fdisk /dev/sdb
Il dispositivo non contiene né una tabella di partizione DOS valida, né un’etichetta disco Sun, SGI o OSF
Costruendo una nuova etichetta disco DOS con identificatore disco 0x31e0dc4b.
Le modifiche rimarranno in memoria solo fino a quando non decidi di scriverle.
Dopo di che, ovviamente, il contenuto precedente non sarà recuperabile.
Attenzione: flag non valido 0x0000 della tabella di partizione 4 sarà corretto da w(rite)
AVVISO: la modalità compatibile con DOS è deprecata. È fortemente consigliato
spegnere la modalità (comando ‘c’) e cambiare le unità di visualizzazione in
settori (comando ‘u’).
Comando (m per aiuto): <– n
Azione comando
e esteso
p partizione primaria (1-4)
<– p
Numero partizione (1-4): <– 1
Primo cilindro (1-3916, valore predefinito 1): <– ENTER
Utilizzando il valore predefinito 1
Ultimo cilindro, +cilindri o +dimensione{K,M,G} (1-3916, valore predefinito 3916): <– ENTER
Utilizzando il valore predefinito 3916
Comando (m per aiuto): <– t
Partizione selezionata 1
Codice esadecimale (tipo L per elencare i codici): <– L
0 Vuoto 24 NEC DOS 81 Minix / vecchio Lin bf Solaris
1 FAT12 39 Piano 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 nascosto C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 41 PPC PReP Boot 85 Linux esteso c7 Syrinx
5 Esteso 42 SFS 86 NTFS volume set da Non-FS dati
6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt
9 AIX avviabile 50 OnTrack DM 93 Amoeba e1 accesso DOS
a OS/2 Boot Manag 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 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 63 GNU HURD o Sys ab Darwin boot f2 DOS secondario
16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT
1e Hidden W95 FAT1
Codice esadecimale (tipo L per elencare i codici): <– 83
Comando (m per aiuto): <– w
La tabella delle partizioni è stata modificata!
Chiamando ioctl() per rileggere la tabella delle partizioni.
Sincronizzando i dischi.
root@server1:~#
Dopo, dovrebbe esserci la partizione /dev/sdb1:
fdisk -lroot@server1:~# fdisk -l
Disco /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Dimensione del settore (logico/fisico): 512 bytes / 512 bytes
Dimensione I/O (minima/ottimale): 512 bytes / 512 bytes
Identificatore disco: 0x00029d5c
Dispositivo Boot Inizio Fine Blocchi Id Sistema
/dev/sda1 * 1 3793 30461952 83 Linux
/dev/sda2 3793 3917 992257 5 Esteso
/dev/sda5 3793 3917 992256 82 Linux swap / Solaris
Disco /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Dimensione del settore (logico/fisico): 512 bytes / 512 bytes
Dimensione I/O (minima/ottimale): 512 bytes / 512 bytes
Identificatore disco: 0x31e0dc4b
Dispositivo Boot Inizio Fine Blocchi Id Sistema
/dev/sdb1 1 3916 31455238+ 83 Linux
root@server1:~#Formattiamolo con ext4…
mkfs.ext4 /dev/sdb1… e montiamolo su /mnt/sdb1:
mkdir /mnt/sdb1
mount /dev/sdb1 /mnt/sdb1Dovresti vedere /dev/sdb1 nell’output di…
mount… ora:
root@server1:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sdb1 on /mnt/sdb1 type ext4 (rw)
root@server1:~#Per avere /dev/sdb1 montato automaticamente all’avvio, aggiungilo a /etc/fstab:
vi /etc/fstab| [...] /dev/sdb1 /mnt/sdb1 ext4 errors=remount-ro 0 1 |
3 Preparare Il Contenitore
Contenitore:
Poiché vogliamo spostare /var/lib/mysql nella nuova partizione, dobbiamo prima fermare MySQL, assicurarci che non venga avviato automaticamente quando il contenitore viene avviato, creare un backup di /var/lib/mysql e una nuova directory vuota /var/lib/mysql:
/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 Creare Uno Script Di Bind Mount Per Il Contenitore Sull’Host
Host:
Sull’host ora creiamo lo script di bind mount /etc/vz/conf/101.mount (assicurati di sostituire 101 con il corretto ID del contenitore!) come segue:
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} |
Devi regolare le variabili SRC e DST in base alle tue esigenze. SRC è la directory che vogliamo montare nel contenitore (/mnt/sdb1 in questo esempio), e DST è il punto di montaggio nel contenitore.
Se vuoi aggiungere opzioni di montaggio come noatime, puoi aggiungere l’opzione -o alla riga di montaggio, ad esempio come segue:
| #!/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} |
Rendi lo script eseguibile…
chmod +x /etc/vz/conf/101.mount… e riavvia il contenitore (ecco perché abbiamo disabilitato i collegamenti di avvio di sistema di MySQL per il contenitore nel capitolo tre - /var/lib/mysql è vuoto in questo momento, il che porterà a errori di MySQL):
vzctl restart 1015 Utilizzare Il Bind Mount Nel Contenitore
Contenitore:
Dopo che il riavvio del contenitore è terminato, puoi accedere al contenitore e controllare se il nuovo mount esiste:
mountroot@test:~# mount
/dev/simfs on / type simfs (rw,relatime)
/dev/simfs on /var/lib/mysql type simfs (rw,relatime)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,relatime,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,relatime)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620)
root@test:~#df -hroot@test:~# df -h
Filesystem Size Used Avail Use% Mounted on
/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:~#Vai alla directory /var/lib:
cd /var/lib
ls -laroot@test:/var/lib# ls -la
totale 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#Come vedi, la nuova directory /var/lib/mysql ha permessi/proprietà errati - correggiamoli (i nuovi permessi/proprietà dovrebbero essere mantenuti anche dopo un riavvio del contenitore):
chown mysql:mysql /var/lib/mysql
chmod 700 /var/lib/mysqlOra spostiamo i database dal nostro backup di nuovo in /var/lib/mysql:
cp -pfr /var/lib/mysql_bak/* /var/lib/mysqlPoi avvia MySQL:
/etc/init.d/mysql startQuesto è tutto! L’ultima cosa che dovresti fare è ricreare i collegamenti di avvio di sistema di MySQL in modo che si avvii automaticamente quando il contenitore viene avviato:
update-rc.d mysql defaults6 Link
- OpenVZ: http://openvz.org/
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.