Search code examples
linuxfilesystemskernelprocsshfs

Why is sshfs not shown in /proc/filesystems?


One of the books on advanced linux programming states:

The /proc/filesystems entry displays the file system types known to the kernel. Note that this list isn't very useful because it is not complete: File systems can be loaded and unloaded dynamically as kernel modules.The contents of /proc/filesystems list only file system types that either are statically linked into the kernel or are currently loaded. Other file system types may be available on the system as modules but might not be loaded yet.

Now, I have:

➜  ~  ps -C sshfs
  PID TTY          TIME CMD
 8123 ?        00:00:00 sshfs
➜  ~  mount | grep sshfs
root@ss1: on /home/wani/tmp type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
➜  ~  

But ...

➜  ~  cat /proc/filesystems | grep sshfs
➜  ~  

Solution

  • sshfs is implemented in userspace using the FUSE infrastructure. Userspace filesystems are not known to the kernel as a separate entity. The FUSE kernel-side infrastructure itself, however, is known to the kernel. On my system:

    $ cat /proc/filesystems
    nodev   sysfs
    nodev   rootfs
    nodev   ramfs
    ...
            ext4
            cramfs
    ...
    nodev   fuse
    nodev   fusectl
    ...
    

    Note the last two lines; the kernel is aware of a fuse filesystem, which is essentially an adapter interface that lets filesystem services to be provided by userspace processes.