Dear folks, there are file systems that although living in one partition/device support multiple heads/labels to mount on that can't be expressed as a disk partition scheme like disklabel or GPT since they all live in one partion.
A common way to mount such systems is to append the head-name to the device like f.e. mount /dev/dk0:bart /mnt mount /dev/dk0%lisa /mnt mount /dev/dk0@maggy /mnt Or whatever scheme the FS wants or is chosen. Hammer2 supports such a scheme in DragonflyBSD: mount_hammer2 /dev/serno/QM00005.s1d@ROOT /mnt mount_hammer2 -o ro /dev/serno/QM00005.s1d@2018-05-30_163833 /mnt Our current mount(8) and all other file systems uses pathadj() from sbin/mount/pathadj.c that is really a wrapper around realpath(3). Passing such a name trough realpath() results in the following when passing it trough my FS in development : # mount -t sfs /dev/dk1/bart /mnt dev: '/dev/dk1/bart' dir: '/mnt' mount_sfs: Warning: realpath /dev/dk1/bart: Not a directory canondev: '/dev/dk1' canondir: '/mnt' but also # mount -t sfs /dev/dk1@lisa / dev: '/dev/dk1@lisa' dir: '/' mount_sfs: Warning: realpath /dev/dk1@lisa: No such file or directory canondev: '/dev/dk1@lisa' canondir: '/' mount_sfs: Cannot mount /dev/dk1@lisa on /: Bad address and # mount -t sfs /dev/dk1:lisa / dev: '/dev/dk1:lisa' dir: '/' mount_sfs: Warning: realpath /dev/dk1:lisa: No such file or directory canondev: '/dev/dk1:lisa' canondir: '/' mount_sfs: Cannot mount /dev/dk1:lisa on /: Bad address Note that mount(8) itself considers any mention of '%@' in a filename to be NFS and isn't that forgiving: # mount /dev/dk1/root /mnt mount: cannot open `/dev/dk1/root': Not a directory # mount /dev/dk1@root /mnt mount_nfs: can't get net id for host "root": Temporary failure in name resolution # mount /dev/dk1:root /mnt mount_nfs: can't get net id for host "/dev/dk1": Temporary failure in name resolution My proposal is to adjust pathadj(const char *input, char *adjusted) into pathadj(const char *input, char *adjusted, char *tail) It first copies the tail from the input with the tail defined as anything after one of [$%@:&]. This does make the assumption that names with such characters are not used in /dev/. It then calls realpath() on the truncated input giving the desired result so the filesystem type associated with the device can be recovered like normal and the appropriate mount_$FS can be called with the appended tail.A Only if this fails, a fallback is provided for Sun style NFS if the result of realpath() is not found or is not a device; its hostname:mountpoint or user@hostname:mountpoint will fail to locate `user' or `hostname' and if they do exist somehow they are more like not devices. Any objections to this scheme before I try to implement it? With regards, Reinoud