免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3118 | 回复: 8
打印 上一主题 下一主题

[文件系统] 请问如何判断inode跟inode number是否是同一个文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-11 00:19 |只看该作者 |倒序浏览
不是通过stat命令的方式
我是想在用户层获得文件的inode number后
在内核里判断某个inode是否跟这个inode number对应。

谢谢~

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2013-01-11 09:47 |只看该作者
回复 1# xiongweixie
你这是什么需求。

纯粹从技术上来讲,用户态获取之后,把这个数值告诉内核呗。


   

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
3 [报告]
发表于 2013-01-11 10:04 |只看该作者
直接告诉文件名不就得了, 还搞什么 ino

论坛徽章:
0
4 [报告]
发表于 2013-01-11 13:28 |只看该作者
@Godbach

斑竹,好像用inode number是不是反而可能不唯一了呢?不同的filesystem inode number都是从0开始编码的.

用文件名反而是唯一的.

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
5 [报告]
发表于 2013-01-11 13:30 |只看该作者
文件名不唯一,多个不同的文件,可以硬连接到同一个inode。      所以设备号+inode才是唯一的。

论坛徽章:
0
6 [报告]
发表于 2013-01-12 01:21 |只看该作者
回复 2# Godbach

我想找 内存中page跟文件的关系 文件是虚拟机中的文件, page 跟 文件 可以通过address_space 结构联系起来
虚拟机的img文件mount到主机后,里面的inode number跟主机的是一样的
比如虚拟机中有个1.txt文件,在主机中的mnt/.../1.txt  的inode number是一样的

可能优先会想到文件名,如果是主机的操作系统中打开文件的话,是可以通过文件名的。但是虚拟机中的文件不行。
因为虚拟机中的文件打开的文件名(全路径),在主机内核中是无法知道的。
所以就找到了inode number相同这个共性。
就要判断于page相对应的inode的inode number。

希望我解释清楚了。

主机就是安装虚拟机的操作系统。
   

论坛徽章:
0
7 [报告]
发表于 2013-01-12 01:22 |只看该作者
回复 3# zylthinking


    问题描述见6楼

   谢谢您的帮助~

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
8 [报告]
发表于 2013-01-12 02:24 |只看该作者
本帖最后由 zylthinking 于 2013-01-12 02:39 编辑
xiongweixie 发表于 2013-01-12 01:22
回复 3# zylthinking



说的不很清楚, 下面这些路径不知对你有无帮助,

page->mapping->host, 既然你的 page 是从文件来的,那应该能得到一个 inode, 就是不知道这个 inode 是你主机的还是虚拟机上的, 看你的  page 数据哪个上面的而定, 而且这个 inode 也不保证不是另一个设备的宁恰好相同 ino 的文件

下面两个能得到 page 所来自文件的设备的挂载点及文件的 dentry, 可以利用这个一直上溯到 /, 能拼一个全路径出来, vma 是从 page 的虚拟地址的来的,
同样不知道得到的是你主机上的全路径还是虚拟机上的, 应该同样看你这个 page 是哪里的而定
vma->vm_file->f_vfsmnt
vma->vm_file->f_dentry

论坛徽章:
0
9 [报告]
发表于 2013-01-13 22:53 |只看该作者
回复 8# zylthinking


    谢谢您的帮助

1.page->mapping->host, 既然你的 page 是从文件来的,那应该能得到一个 inode, 就是不知道这个 inode 是你主机的还是虚拟机上的, 看你的  page 数据哪个上面的而定, 而且这个 inode 也不保证不是另一个设备的宁恰好相同 ino 的文件

2.下面两个能得到 page 所来自文件的设备的挂载点及文件的 dentry, 可以利用这个一直上溯到 /, 能拼一个全路径出来, vma 是从 page 的虚拟地址的来的,
同样不知道得到的是你主机上的全路径还是虚拟机上的, 应该同样看你这个 page 是哪里的而定
vma->vm_file->f_vfsmnt
vma->vm_file->f_dentry

我的疑问,

第一个,我想到的也是这个方法。能找到inode,但是不知道inode的编号。现在内核改了,以前的inode有个成员保存inode number信息的。所以现在的问题就是通过inode获取inode number。

第二个,这样的话效率太低。不太可行。

现在我的想法是,1 通过page找到inode 然后找到inode number,就知道是不是了。这里存在不同文件系统的inode number相同的情况,概率较低。可以暂时忽略。
2 在文件被打开时,用户层的文件打开是调用 filp_open 这个函数,通过文件打开调用的函数,要是能获得inode number的话,可以在哪里判断inode number是否是要找的那个文件,然后在address_space 结构中flag 一下。 在page中 再检验address_space 是否被flag了。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP