Mounting CIFS File Shares at Boot

I had the following setup:

A NUC running debian 13 configured with a DHCP static lease. A NAS drive serving multiple file shares over CIFS.

The problem was that whenever the nuc booted, the file shares were not mounted automatically. I followed several of the ‘recommended’ approaches

  • _netdev didn’t make any difference
  • Configuring systemd mount on first use (x-systemd.automount) – I didn’t try this because it wasn’t what I really wanted. Also I’ve heard it causes issues when using the mount within namespaces.
  • Using systemd-mount(1) units to mount the share including specifying After=network-online.target – no difference

Ultimately I think the problem lay with the fact that the network-online.target had completed before dhcpcd had completed. Leaving subsequent units in a state where networking was “up” there’s a race condition since dhcp had not completed retrieving an address. This could be seen in systemctl status media-mount.mount with the following line:

mount[954]: mount error: could not resolve address for <nasdrive>.....

I think the “correct” solution for this is dbus integration for dhcpcd so that systemd can be notified when network autoconfiguration has been completed. I’ve had a look and it’s available as a separate package for some distros and it’s unclear if it is shipped by debian. I’ll have more of a dig and update this post if I find anything.

My Solution

The solution that worked for me was to move the NUC off DHCP and on to a static address whilst continuing to use the systemd-mount(1) style mounts. Although this worked it did not fix the problem entirely. DNS was still failing and I needed to change the mount to use IP rather than DNS.

So all in all it’s a bit sloppy. I feel like there’s a better solution for all of this but it’s not obvious.

Here is my working unit

# /etc/systemd/system/media-mount.mount
[Unit]
Description = mount
After = network-online.target

[Mount]
What = //192.168.1.2/mount
Where = /media/mount
Type = cifs
Options = credentials=/etc/mount.creds,vers=2.0,uid=user,gid=user

[Install]
WantedBy = multi-user.target

And then mount with systemctl enable --now media-mount.mount

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *