【问题标题】:Why is sshfs not shown in /proc/filesystems?为什么 sshfs 没有显示在 /proc/filesystems 中?
【发布时间】:2014-08-24 09:18:53
【问题描述】:

关于高级 linux 编程状态的books 之一:

/proc/filesystems 条目显示内核已知的文件系统类型。请注意,此列表不是很有用,因为它不完整:文件系统可以作为内核模块动态加载和卸载。/proc/filesystems 的内容仅列出静态链接到内核或当前加载的文件系统类型.其他文件系统类型可能在系统上作为模块可用,但可能尚未加载。

现在,我有:

➜  ~  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)
➜  ~  

但是……

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

【问题讨论】:

  • sshfs 是 fuse 文件系统,因此在用户空间执行。期望内核知道这件事很奇怪。
  • @KonstantinV.Salikhov FUSE(用户空间中的文件系统)文档 (fuse.sourceforge.net/doxygen/) 指出:FUSE 是一个可加载的内核模块。如果是,那内核为什么不知道呢?
  • Fuse 本身是一个内核模块,但不是使用 fuse 基础架构构建的文件系统

标签: linux filesystems kernel proc sshfs


【解决方案1】:

sshfs 使用FUSE 基础架构在用户空间中实现。内核不知道用户空间文件系统是一个独立的实体。然而,FUSE 内核端基础架构本身为内核所知。在我的系统上:

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

注意最后两行;内核知道fuse 文件系统,它本质上是一个适配器接口,允许用户空间进程提供文件系统服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2014-11-30
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多