在内核模块中获取文件系统挂载点

问题描述 投票:4回答:2

我想在我的内核模块中获取一个文件系统的挂载点,这是一个可堆叠的文件系统。例如,如果homeababc是一个文件,而home挂载在不同的文件系统上,我想有一个dentry或路径结构到home。我想在不修改内核代码的情况下,在一个模块中实现这个功能。例如,在homeuser中有一个文件,现在我想知道这个文件在哪个分区。例如,这个文件可能在和""一样的分区,或者这个文件可能在另一个挂载在home或homeuser上的分区。

linux filesystems linux-kernel kernel-module
2个回答
7
投票

你可以从以下地方获得文件系统的列表 current->namespace. 通过迭代 current->namespace->list (正在审议的项目) struct vfsmount)你可以得到所有挂载的文件系统。vfsmount->mnt_mountpoint 是你想要的目录条目。

您可以按照以下代码进行操作 prints /proc/mounts (例如 base.c/mountstats_open, namespace.c/m_start)以获得更多的细节(例如需要一些锁定)。

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


0
投票

如果有人仍然需要 "取消引用 "给定的路径到它的挂载点,那么有一个 跟进 函数,它就是做这个事情的 :) 它的工作原理是 结构路径 并据此改变它的 .mnt 条目。也许有人会觉得很方便!

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

© www.soinside.com 2019 - 2024. All rights reserved.