One of the types of units that systemd supports is mount units (see 'man systemd.mount'). Normally you set up all your mounts with
/etc/fstab
entries and you don't have to think about them, but under some specialized circumstances you can wind up needing to create real
.mount
service files for some mounts.
How to specify most filesystems is pretty straightforward, but it's not quite clear how you specify Linux bind mounts . Since I was just wrestling repeatedly with this today, here is what you need to put in a systemd
.mount
file to get a bind mount:
[Mount] What=/some/old/dir Where=/the/new/dir Type=none Options=bind
This corresponds to the mount command '
mount --bind /some/old/dir
/the/new/dir
' and an
/etc/fstab
line of '
/some/old/dir /some/new/dir
none bind
'. Note that the type of the mount is
none
, not
bind
as you might expect. This works because current versions of
mount
will accept arguments of '
-t none -o bind
' as meaning 'do a bind mount'.
(I don't know if you can usefully add extra options to the
Options
setting or if you'd need an actual script if you need to, eg, make a bind mountpoint read-only. If you can do it in
/etc/fstab
you can probably do it here.)
A fully functioning
.mount
unit will generally have other stuff as well. What I've wound up using on Fedora 20 (mostly copied from the standard
tmp.mount
) is:
[Unit] DefaultDependencies=no Conflicts=umount.target Before=local-fs.target umount.target [Mount] [[ .... whatever you need ...]] [Install] WantedBy=local-fs.target
Add additional dependencies, documentation, and so on as you need or want them. For what it's worth, I've also had bind mount units work without the three
[Unit]
bits I have here.
Note that this assumes a 'local' filesystem, not a network one. If you're dealing with a network filesystem or something depending on one, you'll need to change bits of the targets (systemd documentation suggests to
remote-fs.target
).