Open main menu

OpenVZ Virtuozzo Containers Wiki β

Changes

Bind mounts

2,893 bytes removed, 12:44, 11 July 2011
fixed to use simfs, use -n, don't do umount script
Recent Linux kernels support an operation called 'bind mounting' which makes part of a mounted filesystem visible at some other mount point. See 'man mount' for more information.
 
Bind mounts can be used to make directories on the hardware node visible to the container.
{{Warning|If you want to do a bind mount for container, you need to '''use <code>VE_ROOT</code>''' (not <code>VE_PRIVATE</code>!) and '''make sure that container is mounted''' (this can be checked using <code>vzctl status</code>).}}
== Manual mount example Mounting == On the [[HN]] we have a directory <code>/home</code> which we wish to make available (shared) to container 777. The correct command to issue on the HN is:
mount --bind /home $VZDIR/root/777/home The container must be started (or at least mounted) and the destination directory must exist. The container will see this directory mounted like this:  # df Filesystem 1K-blocks Used Available Use% Mounted on simfs 10485760 298728 10187032 3% / ext3 117662052 104510764 7174408 94% /home During the container stop vzctl unmounts that bind mount, so you have to mount it again when you start the container for the next time. Luckily there is a way to automate it. == Make the mount persistent == Put a mount script in OpenVZ configuration directory (<code>/etc/vz/conf/</code>) with the name <code>''CTID''.mount</code> (where <code>''CTID''</code> is container ID, like 777). This script will be executed every time you run <code>vzctl mount</code> or <code>vzctl start</code> for a particular container. If you need to the same for all containers, use the global mount script named <code>vps.mount</code>.
From any mount script you can use the following environment variables:
Now, in order to get the value of <code>VE_ROOT</code> you need to source both the global OpenVZ configuration file, and then the container configuration file, in that particular order. This is the same way vzctl uses to determine <code>VE_ROOT</code>.
=== Mount script example ===
=== Mount script example ===
Here is an example of such a mount script (it can either be <code>/etc/vz/conf/vps.mount</code> or <code>/etc/vz/conf/''CTID''.mount</code>)
<source lang="bash">
CTID=777
cat << EOF > /etc/vz/conf/${CTID}.mount
#!/bin/bash
source /etc/vz/vz.conf
source ${VE_CONFFILE}
mount -n --bind t simfs /mnt/disk ${VE_ROOT}/mnt/disk -o /mnt/disk</source>EOFAfter creating script please make it executable by issuing "chmod +x CTID.mount" at command line otherwise vm fails to start === Unmount script example ===For unmounting a filesystem, <code>/etc/vz/conf/vps.umount</code> or <code>/etc/vz/conf/''CTID''.umount</code> script can be used in the same way: <source lang="bash">#!/bin/bashsource /etc/vz/vz.confsource ${VE_CONFFILE}umount ${VE_ROOT}/mnt/disk</source>{{Note|<code>''CTID''.umount</code> script is not strictly required, since vzctl tries to unmount everything on CT stop. But you'd better have it anyway.}} umount scripts could cause trouble and errors on VM start and might not be required if using the -n option on mount. [http://forum.openvz.org/index.php?t=msg&goto=37800&&srch=using+-n+and+no+umount+script#msg_37800 read forum post] When mounting whitout <code>-n</code> option, <code>umount</code> script become required, but display errors,because of recursivity of umount procedure initiated before by libvzctl. Even if no option <code>-n</code> was specified at mount, and no <code>umount</code> script was run,system file <code>/etc/mtab</code> could become wrong in the HN, causing trouble to commands like df. == Read-only bind mounts == Since Linux kernel 2.6.26, bind mounts can be made read-only. The trick is to first mount as usual, and then remount it read-only: <source lang="bash">mount -n --bind /home $VZDIR/root/777/homemount -n --bind -oremount,ro $VZDIR/root/777/home</source>With some kernels you need to add the sourcedirectory also: mount -n --bind -oremount,ro '''/home''' $VZDIR/root/777/home Sometimes it is usefull to have a folder read-only mounted in a VPS, but also be able to put files in that directory. If you want that, just create an other directory and simlink the read only files into that folder:  vzctl exec2 777 "mkdir /addfileshere && ln -s /home/* /addfileshere/" Now the /addfileshere folder is fully writable and it even feels like it is possible to delete files (but that are only the simlinks).
== See also ==