How to automount file system using systemd unit file in CentOS/RHEL 7 & 8

In my last article I explained with the steps to mount file system without fstab by using systemd mount unit files. Now I will continue that article by explaining with the steps to automount file system using systemd automount unit files. Similar to mount unit files we also have automount systemd unit files in CentOS/RHEL 7 and 8 Linux.

NOTE:

At the time of writing this article CentOS 8 was not available but I assume the same steps to automount file system using systemd would work on CentOS 8 as similar to RHEL 8.

How to automount file system using systemd unit file in CentOS/RHEL 7 & 8

 

How to automount file system in Linux?

A unit configuration file whose name ends in ".automount" encodes information about a file system automount point controlled and supervised by systemd. Automount units may be used to implement on-demand mounting as well as parallelized mounting of file systems. If an automount point is beneath another mount point in the file system hierarchy, a dependency between both units is created automatically.

 

Dependency with /etc/fstab

Automount units may either be configured via unit files, or via /etc/fstab
If an automount point is configured in both /etc/fstab and a unit file, the configuration in the latter takes precedence.

 

Sample mount systemd unit file

In our last article we created our systemd mount unit file, now we will create our custom automount systemd unit file under the same location as we created our tmp_dir.mount file

[root@rhel-8 system]# pwd
/usr/lib/systemd/system

For the sake of this article I will again show the output snippet of my tmp_dir.mount which I created in my older article

[root@rhel-8 system]# cat tmp_dir.mount
#  This file is part of systemd.

[Unit]
Description=Test Directory (/tmp_dir)
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=/dev/disk/by-uuid/cea0757d-6329-4bf8-abbf-03f9c313b07f
Where=/tmp_dir
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target
IMPORTANT NOTE:

To automount file system using systemd unit file, it is important that systemd mount unit file is also available and in a working state. As ".automount" service will always look for mapping ".mount" service for respective partition.

 

Sample automount systemd unit file

Automount units must be named after the automount directories they control. Example: the automount point /home/lennart must be configured in a unit file home-lennart.automount. Here my pount point is under root directory hence my automount systemd unit file will be tmp_dir.automount.

Below is my sample automount systemd unit file to automount file system

[root@rhel-8 system]# cat tmp_dir.automount
[Unit]
Description=Sample automount partition
ConditionPathExists=/tmp_dir

[Automount]
Where=/tmp_dir
TimeoutIdleSec=10

[Install]
WantedBy=multi-user.target

Here,

Where=
   Takes an absolute path of a directory of the automount point. If the automount point does not exist at time that the automount point is installed, it is created. This string must be reflected in the unit filename. This option is mandatory.

DirectoryMode=
   Directories of automount points (and any parent directories) are automatically created if needed. This option specifies the file system access mode used when creating these directories. Takes an access mode in octal notation. Defaults to 0755.

TimeoutIdleSec=
   Configures an idleness timeout. Once the mount has been idle for the specified time, systemd will attempt to unmount. Takes a unit-less value in seconds, or a time span value such as "5min 20s". Pass 0 to disable the timeout logic. The timeout is disabled by default.
   
With ConditionPathExists= a file existence condition is checked before a unit is started. If the specified absolute path name does not exist, the condition will fail. If the absolute path name passed to ConditionPathExists= is prefixed with an exclamation mark ("!"), the test is negated, and the unit is only started if the path does not exist.

Once you have created your automount systemd unit file to automount file system, reload the systemd daemon

[root@rhel-8 system]# systemctl daemon-reload

 

AutoMount file system (Start systemd service)

Now let us start tmp_dir.automount service

[root@rhel-8 system]# systemctl start tmp_dir.automount

Let us check the service status. As it shows the service is running but is in (waiting) state since we had given a Time Out value of 10 seconds for idle session

[root@rhel-8 system]# systemctl status tmp_dir.automount
● tmp_dir.automount - Sample automount partition
   Loaded: loaded (/usr/lib/systemd/system/tmp_dir.automount; disabled; vendor preset: disabled)
   Active: active (waiting) since Mon 2019-09-16 18:45:59 IST; 6s ago
    Where: /tmp_dir

Sep 16 18:45:59 rhel-8.example systemd[1]: Set up automount Sample automount partition.
NOTE:

df or mount command will still not show /tmp_dir as mounted yet because automount will mount this filesystem only once someone attempts to access the mount point which is the beauty of this service.

As you see df command does not shows /tmp_dir partition yet

[root@rhel-8 ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               900M     0  900M   0% /dev
tmpfs                  915M     0  915M   0% /dev/shm
tmpfs                  915M  8.5M  907M   1% /run
tmpfs                  915M     0  915M   0% /sys/fs/cgroup
/dev/mapper/rhel-root   15G  2.1G   12G  16% /
/dev/sdc1              976M  2.6M  907M   1% /second_part
/dev/sda1              483M  258M  225M  54% /boot
tmpfs                  183M     0  183M   0% /run/user/0

Now if I access this partition using df command explicitly

[root@rhel-8 ~]# df -h /tmp_dir/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       976M  2.6M  907M   1% /tmp_dir

then the partition will get mounted automatically.

Also if you check the service status, the output snippet will give you a hint of what was happening in the backend

[root@rhel-8 ~]# systemctl status tmp_dir.automount
● tmp_dir.automount - Sample automount partition
   Loaded: loaded (/usr/lib/systemd/system/tmp_dir.automount; disabled; vendor preset: disabled)
   Active: active (waiting) since Mon 2019-09-16 18:45:59 IST; 17min ago
    Where: /tmp_dir

Sep 16 18:45:59 rhel-8.example systemd[1]: Set up automount Sample automount partition.
Sep 16 19:00:54 rhel-8.example systemd[1]: tmp_dir.automount: Got automount request for /tmp_dir, triggered by 3868 (df)
Sep 16 19:01:09 rhel-8.example systemd[1]: tmp_dir.automount: Got automount request for /tmp_dir, triggered by 1318 (bash)
Sep 16 19:02:04 rhel-8.example systemd[1]: tmp_dir.automount: Got automount request for /tmp_dir, triggered by 3903 (df)

 

My next article will have the steps to mount file system in a certain order (sequentially if required) using systemd and /etc/fstab with examples in CentOS/RHEL 7 and 8.

 

Lastly I hope the steps from the article to automount file system using systemd automount unit file on CentOS/RHEl 7 and 8 Linux was helpful. So, let me know your suggestions and feedback using the comment section.

 

Leave a Comment

Please use shortcodes <pre class=comments>your code</pre> for syntax highlighting when adding code.