Open main menu

OpenVZ Virtuozzo Containers Wiki β

Changes

Bind mounts

3,323 bytes removed, 13:17, 20 November 2017
m
Better wording to clarify that the additional script is not a replacement for the one above, but rather needs to be run first.
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.
== Filesystem layout ==OpenVZ uses two directories. Assuming our container is numbered 777, these directories are: * <code>VE_PRIVATE</code>: $VZDIR/private/777* <code>VE_ROOT</code>: $VZDIR/root/777 {{Note|<code>$VZDIR</code> is usually <code>/vz</code>, on Debian systems however this is <code>/var/lib/vz</code>. In this document this This is further referred to as <code>$VZDIR</code> -- substitute it with what how you have.}} <code>VE_PRIVATE</code> is a place for all the container files. <code>VE_ROOT</code> is the mount point to which <code>VE_PRIVATE</code> is mounted during container start (or when you run <code>vzctl mount</code> {{Warning|If you want to do a bind mount for container, you need to ''can make host system'use s <code>VE_ROOT</code>''' (not <code>VE_PRIVATE<mnt/code>!) and '''make sure that container is mounted''' (this can be checked using <code>vzctl statusdisk</code>).}} == Manual mount example == 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:* <code>${VEID}</code> -- container ID (like <code>777</code>).* <code>${VE_CONFFILE}</code> -- container configuration file (like <code>/etc/vz/conf/777.conf</code>) 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>.  lang=== 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"bash">) #!/bin/bash source /etc/vz/vz.conf source ${VE_CONFFILE} mount -n --bind /mnt/disk ${VE_ROOT}/mnt/disk After 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:  #!/bin/bash source /etc/vz/vz.conf source ${VE_CONFFILE} umount ${VE_ROOT}/mnt/disk777
{{Note|<code>''CTID'echo '#!/bin/bash.umount</code> script is not strictly required, since vzctl tries to unmount everything on CT stopetc/vz/vz. But you'd better have it anywayconf.${VE_CONFFILE}SRC=/mnt/diskDST=/mnt/diskif [ ! -e ${VE_ROOT}${DST} ]; then mkdir -p ${VE_ROOT}${DST}; fimount -n -t simfs ${SRC} ${VE_ROOT}${DST} -o ${SRC}' > /etc/vz/conf/${CTID}.mount
umount scripts could cause trouble and errors on VM start and might not be required if using the -n option on mount. [http:chmod +x /etc/vz/conf/forum${CTID}.openvz.orgmount</index.php?t=msg&goto=37800&&srch=using+-n+and+no+umount+script#msg_37800 read forum post]source>
== ReadIf you want read-only bind mounts ==mount, add <code>-r</code> option to mount command.
Since Linux kernel 2.6.26{{Note|When specifying destination directory, bind mounts can be made read-onlyalways use /vz/root/ or ${VE_ROOT} env. The trick is variable <nowiki>(avoid using /vz/private)</nowiki>}}{{Note|When binding directories from one container to first mount as usualanother, and then remount it read-only:make sure you have proper boot order (See [[Man/vzctl.8|BOOTORDER]] param.)}}
mount -n --bind /home $VZDIR/root/777/home
mount -n --bind -oremount,ro $VZDIR/root/777/home
In Debian 2.6.32-5-openvz-686 kernel '''Instruction above will not work on OpenVZ 7 until you need run the script below to add the sourcedirectory alsoenable Bind mounts: mount -n --bind -oremount,ro '''/home''' $VZDIR/root/777/home
Sometimes it is usefull to have a folder read<source lang="bash">cat <<'EOF' > /etc/vz/conf/vps.mount#!/bin/bash. ${VE_CONFFILE}VE_MOUNT=$(echo ${VE_CONFFILE} | sed 's/\.conf$/.mount/')[ -only mounted in a VPS, but also be able to put files in that directoryx ${VE_MOUNT} ] && . If you want that, just create an other directory and simlink the read only files into that folder:${VE_MOUNT}exit 0EOF
mkdir chmod +x /addfileshereln -s etc/homevz/* conf/addfilesherevps.mount</source>
== See also ==
* {{Man|vzctl|8}} (ACTION SCRIPTS section)
* [[NFS]]
* [[FUSE]]
1
edit