Recently, I discovered you can mount partitions using systemd.mount by writinga mount unit file. In this blog post, we”ll talk about systemd.mount & how you can use it to mount partitions.
Systemd is gradually becoming the de facto init system & service manager replacing the old sysV init scripts & upstart. Recently, I discovered you can mount partitions using systemd.mount by writing your own .mount systemd unit file.
After RTFM’ing, I realized, under the hood, systemd just runs mount command to
mount the specified partition with the specified mount options listed in the
mount unit file. Basically, you need to specify the following options in your unit file:
* **What=** a partition name, path or UUID to mount * **Where=** an absolute path of a directory i.e. path to a mount point. **If the mount point is non-existent, it will be created** * **Type=** file system type. In most cases mount_command auto-detects the file system * **Options=** Mount options to use when mounting
In the end, you can convert your typical fstab entry such as this:
UUID=86fef3b2-bdc9-47fa-bbb1-4e528a89d222 /mnt/backups ext4 defaults 0 0
[Mount] What=/dev/disk/by-uuid/86fef3b2-bdc9-47fa-bbb1-4e528a89d222 Where=/mnt/backups Type=ext4 Options=defaults
So I wrote a simple systemd mount unit file — /etc/systemd/system/mnt-backups.mount — which didn’t work at first because I fell victim to one of the systemd.mount pitfalls:
Mount units must be named after the mount point directories they control. Example: the mount point **/home/lennart** must be configured in a unit file **home-lennart.mount**.
Huh? Yes that’s right! The unit filename should match the mount point path.
mnt-backups.mount mount unit file:
[Unit] Description=Mount System Backups Directory [Mount] What=/dev/disk/by-uuid/86fef3b2-bdc9-47fa-bbb1-4e528a89d222 Where=/mnt/backups Type=ext4 Options=defaults
Reload systemd daemon & start the unit:
#!/bin/bash systemctl daemon-reload systemctl start mnt-backups.mount
And just like any other unit, you can view its status using systemctl status mnt-backups.mount:
**# systemctl status mnt-backups.mount** ● mnt-backups.mount - Mount System Backups Directory Loaded: loaded (/etc/systemd/system/mnt-backups.mount; enabled; vendor preset: disabled) Active: active (mounted) since Mon 2015-08-31 08:09:15 EAT; 2 days ago Where: /mnt/backups What: /dev/sdc Process: 744 ExecMount=/bin/mount /dev/disk/by-uuid/86fef3b2-bdc9-47fa-bbb1-4e528a89d222 /mnt/backups -n -t ext4 -o defaults (code=exited, status=0/ SUCCESS)
Aug 31 08:09:15 localhost systemd: Mounting Mount System Backups Directory... Aug 31 08:09:15 localhost systemd: Mounted Mount System Backups Directory.
After a reboot, I noticed the unit wasn’t started & as result the mount point dir. was empty. The unit file was missing an [Install] section which contains
installation information such as unit dependencies(WantedBy=, RequiredBy=),
aliases(Alias=), additional units(Also=), e.t.c for the specified unit. In this
case, I set the unit to start in multi-user runlevel a.k.a multi-user.target.
Oh, did you know you can change runlevel using systemctl isolate $RUN_LEVEL.target? Read_more about systemd runlevels/targets.
Here’s the complete /etc/systemd/system/mnt-backups.mount unit file with an [Install] section:
[Unit] Description=Mount System Backups Directory [Mount] What=/dev/disk/by-uuid/86fef3b2-bdc9-47fa-bbb1-4e528a89d222 Where=/mnt/backups Type=ext4 Options=defaults [Install] WantedBy=multi-user.target
As always, enable the unit to start automatically during boot.
#!/bin/bash systemctl enable mnt-backups.mount