How to use bind mounts in linux

Tags: , , , , , , , , ,

Have you ever dealt with a system that wasn’t partitioned properly when it was built and now it has gone into production? You’ll probably be hard pressed to find the time and patience to rebuild the system any time soon. Luckily there is a way to step around many of the limitations of a poorly partitioned system. How? With bind mounts.

Bind mounting is quite simple. Instead of mounting a block device (formatted with a file system) into a particular path you are mounting one path into another path.

For example: Let’s say you have a small /var but a very large /opt partition and you need additional space for your growing log files.

First, shut down the services writing to log files, then…

mv /var/log /opt/var_log
mkdir /var/log
mount -o bind /opt/var_log /var/log

You will now see this reflected when running the mount command:

# mount | grep var
/opt/var_log on /var/log type none (rw,bind)

At this point you are ready to restart the previously stopped services.

If you want this to persist across reboots, you’ll just need to update your /etc/fstab with the bind mount as well.

# /etc/fstab
/opt/var_log              /var/log                 none    bind    0 0

And there you have it! Its not beautiful, but it will help you keep the lights on until you can get a long-term fix in place.

12 Responses to “How to use bind mounts in linux”

  1. Setup VSFTPD with custom multiple directories and (virtual) users accounts on Ubuntu (no database required) Says:

    [...]  [...]

  2. GNU/Linux bind mount « Giovanni’s Blog Says:

    [...] Like this:LikeBe the first to like this.   [...]

  3. Jeff Williams Says:

    This would be better accomplished with symbolic links, i.e.:

    mv /var/log /opt/var_log
    ln -s /opt/var_log /var/log

    Bind mounts are more useful for when you can’t use symlinks, i.e. linking a directory inside a chroot or VM.



    Keith Reply:

    That’s another approach, but it has it’s own set of problems as well. Keep in mind that a symlink is just a file. In my case I want /var/log to function exactly as it would if there was a filesystem mounted there.

    Take backups as one example. It’s a common use case to explicitly define the directories that will be included in backups. So, if your backup system is expecting /var/log to be a directory containing logs, and it’s changed to a symlink, you will have effectively disabled backups of your logs. Instead, you’ll have only a backup of the symlink file itself.

    What I’m trying to say is that if the problem would be solved by repartitioning or growing a filesystem, but you can’t afford the immediate downtime to reconfigure the system, bind mounts are a useful stopgap solution.


    jj Reply:

    My backups usually do NOT cross mount points, so I can backup root without everything else. If “find” treats it as a mount point, it won’t be crossed by most backup programs or scripts. But I see your point if the mount-directory itself is specified to a backup program that can’t be told to follow symbolic links.


  4. NIK Says:

    Yes!that was exactly that i was searching for. Thanks


  5. swa Says:

    If i want to mount across the server. can someone suggest me the command.


  6. Juan Rial Says:

    Bind mounts are useful as more than a stopgap measure. An example would be under Android, where this is used by the S2E application to extend older phones’ limited storage (think HTC desire with only 148MB available for apps/data/cache) by creating a second partition on the SD card and bind-mounting folders in there onto the corresponding folders of the internal memory.

    Well, technically, it’s still a stopgap measure: it helps you along until you can justify plonking down another couple of hundred dollars on a new phone. ;)


  7. Peter Woo Says:

    I like this bind mount but why is it described as a stop-gap measure? It appears to be elegant. Suppose I have disk full on my disk1, and trying to relocate some directories to disk2. By using bind mount, I don’t need to worry about partition sizing but just with one disk2 partition housing the several directories from disk1, and bind mount to disk2′s directories accordingly. Did I miss something more crucial?


  8. Mike Says:

    I had a production server hitting a NAS storage through a NFS mount. In order to reproduce the behavior in QA without buying a NAS, we just faked it with a bind mount. Test program doesn’t know the difference.


  9. z666z666z Says:

    Maybe this is stupid question… but maybe bind mount can solve it.

    I have:
    -Linux Ubuntu Server running over Android (as a process)
    -With RDP Android Application i can access Linux X desktop
    -Both Android and Linux share the / (if i access Read&Write from Android or from Linux to / i go to same place, very bad security in case of damage)
    -I can access as normal user and/or root to both Android and Linux

    I want:
    -Protect Android /, so Linux / is not Android / (chroot may help)
    -Access Android / on Read&Write from insed cush chroot Linux

    What steps must i follow?

    -Android is very poor, i can not run many Linux commands on it (they not exists)
    -Linux is loop mounted by an Android executable (i tried to do it with terminal commands and i can not, Android mount command does not understand loop)
    -Linux runs as an Android process
    -I can run such Linux as an RDP server or as a full command line terminal, so i can run normal Linux commands inside it as user and when needed as root (full mount command, etc)
    -From Linux command prompt i can see Android / as / (shared between Android and Linux, no chroot done)… i want to avoid this
    -I want not to loose access to Android / from inside Linux, but not as Linux /, instead as /mnt/AndroidRoot/

    Any help is wellcome


  10. Home dir showing (some) contents of two drives. Says:

    […] As you can see from the last keyword on that line, its a 'bind' mount… try this […]

Join the Conversation