【问题标题】:get filesystem mount point in kernel module在内核模块中获取文件系统挂载点
【发布时间】:2020-04-27 21:33:47
【问题描述】:

我想在我的内核模块中获取文件系统的文件系统挂载点,这是一个可堆叠的文件系统。 例如。如果 /home/ab/abc 是一个文件并且 /home 安装在不同的文件系统上,我希望有一个到 /home 的 dentry 或 path 结构。 我想在一个模块中执行此操作而不修改内核代码。 例如/home/user/ 中有一个文件,现在我想知道这个文件在哪个分区。例如,此文件可能位于与“/”相同的分区中,或者此文件可能位于安装在 /home 或 /home/user 上的另一个分区中。

【问题讨论】:

    标签: linux filesystems linux-kernel kernel-module


    【解决方案1】:

    您可以从current->namespace 获取文件系统列表。通过迭代current->namespace->list(项目为struct vfsmount),您可以获得所有已挂载的文件系统。 vfsmount->mnt_mountpoint 是你想要的目录条目。

    您可以按照prints /proc/mounts(例如base.c/mountstats_opennamespace.c/m_start)的代码获取更多详细信息(例如需要一些锁定)。

    不过,我不知道你是否可以在内核模块中做到这一点。

    【讨论】:

    • 感谢您的回复。实际上我想知道如何知道特定文件的挂载点。如果你能看一下,我已经编辑了这个问题。
    • @gaurav 请注意任何给定的 inode 都可能有多个挂载点。
    【解决方案2】:

    如果有人仍然需要“取消引用”给定路径到其挂载点,那么 follow_up 函数正是这样做的 :) 它在 struct 路径 上运行并相应地将其更改为 .mnt 条目。也许有人会觉得它很方便!

    编辑:我在 5.6 内核版本中使用过它。我不知道它是否总是可用(

    【讨论】:

    • 能否详细说明如何获取给定路径的挂载点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多