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/sdb

root@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 -l
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: 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/sdb1

Dovresti 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 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 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 101

5 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:

mount
root@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 -h
root@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 -la
root@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/mysql

Ora spostiamo i database dal nostro backup di nuovo in /var/lib/mysql:

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

Poi avvia MySQL:

/etc/init.d/mysql start

Questo è 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 defaults

6 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.