With my servers I prefer to have the root filesystem be a set of 2 SSDs in a ZFS mirror. That way you get bit rot detection, snapshots before significant changes, separate datasets, and redundancy. I follow the openzfs guide with a few tweaks to set this up. Then I create a dataset at
/c where I prefer to put all of my configuration files and then syslink to them at their original locations; however, this leads to an issue during boot for some services.
The issue is that only the root pool is mounted early on and nested datasets are only mounted as part of the
local-fs.target chain. This causes an issue if the service is loaded before this
systemd unit. In my case, I wanted my
systemd-networkd configration files to be stored in
/c but when
/c isn't mounted so the syslinks are bad and won't be configured.
The solution is fairly simple, we want
systemd-networkd to run after
local-fs.target. To accomplish this, you'll want to run
sudo systemctl edit systemd-networkd which will open the
override.conf file for editing. Add the following, save, and exit.
Now on your next boot, everything should work properly. This should work for most units but for generators (such as netplan.io), this won't work because they run very early in the