diff --git a/blogs/2022/12/03/automount-nfs.md b/blogs/2022/12/03/automount-nfs.md new file mode 100644 index 0000000..0bc17a3 --- /dev/null +++ b/blogs/2022/12/03/automount-nfs.md @@ -0,0 +1,84 @@ +# Automounting network drives with NFS + +I have a NAS which supports NFS, which I use to store all of my photos, music and other media on my local network. +This gives me OS-independent to all of these files, and frees up drive space on my laptops and desktop - most of which are dual-booted. +On Windows it's fairly straightforward to establish a network drive, but on Linux-based systems - at least on the Debian- and Arch- based distros I find myself using - the process is a little more involved. + +Here I'll use `systemd` to automatically mount a shared folder when they're accessed by a client machine. +There are other ways to do this, but as my machines predimonantly run Debian- or Arch-derived Linux distributions, `systemd` is a choice that works for both. +This post is largely based on the description on the [ArchWiki](https://wiki.archlinux.org/title/NFS#As_systemd_unit). +My NAS' hostname is `sleeper-service`, and I'll be mounting the `Music` shared folder. + +## Initial mount + +Before doing anything automatically, we first need to create a `systemd` unit to mount the remote filesystem at a path in our local filesystem. +I'll mount the remote folder onto the local path `/sleeper-service/Music`. +When creating this file, pay attention to its name, as it's important for it to correspond to the path of the mountpoint. +The correct name can be determined using `systemd-escape` - pay attention to escape characters in the output, this caught me out several times. + +``` +$ systemd-escape /sleeper-service/Music +-sleeper\x2dservice-Music +$ sudo touch /etc/systemd/system/sleeper\\x2dservice-Music.mount +``` + +Don't ask me why `systemd` is like this - I think it's silly too. +After creating the unit file, we then need to edit it and fill out some information, specifying where the remote filesystem is and also when we need to initialise it. + +Here I used a name instead of an address for the `What=` part - I have an entry for `sleeper-service` configured in `/etc/hosts`, but you can equally use an IP address just as well. + +``` +[Unit] +Description=Mount music at boot + +[Mount] +What=sleeper-service:/volume1/Music +Where=/sleeper-service/Music +Options=vers=3 +Type=nfs +TimeoutSec=30 + +[Install] +WantedBy=multi-user.target +``` + +Once we've created this, we can try to manually mount the shared folder by starting the unit: + +``` +$ sudo systemctl start sleeper\\x2service-Music.mount +$ ls /sleeper-service/Music +``` + +At this stage you ought to see the contents of your shared folder. +Next, we want to set up the automount, so that this remote folder is mounted automatically when we try to access it. +To do that, we need to first stop/disable the unit we just created: + +``` +$ sudo systemctl disable sleeper\\x2dservice-Music.mount +``` + +Then, let's create an `.automount` unit with the same name as the `.mount` file we already have. +The automount unit expects the mount unit to exist alongside it - it doesn't replace it. + +``` +$ sudo touch /etc/systemd/system/sleeper\\x2dservice-Music.automount +``` + +``` +[Unit] +Description=Automount NAS music + +[Automount] +Where=/sleeper-service/Music + +[Install] +WantedBy=multi-user.target +``` + +Then, enable the new `.automount` unit to have it run automatically: + +``` +$ sudo systemctl enable sleeper\\x2dservice-Music.automount +``` + +The folder should now be automatically mounted at the target location when trying to access it.