Bind mount fails when path contains a symlink
Hello
On RHEL7.9, I have the following /etc/fstab that is working fine :
/files/foo /opt/symlink/foo none bind 0 0
while /opt/symlink is a symlink to /opt/bar
When I try to do the same on RHEL8.5, during the boot, I have the "Press enter for maintenance (or type control-d to continue)" message.
I type Ctrl+D to continue, then after boot, the FS is mounted, but I can see in journalctl -xe the following :
Nov 24 13:28:59 server2.example.com systemd[1]: opt-symlink-foo.mount: Mount path /opt/symlink/foo is not canonical (contains a symlink).
-- Subject: Mount point is not empty
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- The directory /opt/symlink/foo is specified as the mount point (second field in
-- /etc/fstab or Where= field in systemd unit file) and is not empty.
-- This does not interfere with mounting, but the pre-exisiting files in
-- this directory become inaccessible. To see those over-mounted files,
-- please manually mount the underlying file system to a secondary
-- location.
Nov 24 13:28:59 server2.example.com systemd[1]: opt-symlink-foo.mount: Failed to run 'mount' task: Too many levels of symbolic links
Nov 24 13:28:59 server2.example.com systemd[1]: opt-symlink-foo.mount: Failed with result 'resources'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
So, apparently, having a symlink in the second field seems to be invalid, while it was OK on RHEL7.9.
Digging further, I found the /run/systemd/generator/opt-symlink-foo.mount, showing that it did understand and expand my symlink :
[Unit]
SourcePath=/etc/fstab
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
Before=local-fs.target
[Mount]
# Canonicalized from /opt/symlink/foo
Where=/opt/bar/foo
What=/files/foo
Type=none
Options=bind
In /etc/fstab, if I use the real path (without symlink), the boot is OK, and the FS is mounted correctly.
So, what's the right way to mount a bind volume when the path contains a symlink ?