硬链接的实现和debugfs工具
来源:互联网 发布:淘宝优惠券内容怎么写 编辑:程序博客网 时间:2024/06/13 07:51
有兴趣想研究下文件系统硬链接的实现。硬链接在linux文件系统里,就是给一个普通文件起一个别名。跟软连接(符号链接symbolic link)不同,硬链接要求源文件、目标文件必须在同一个挂载点下面,新建一个硬链接,磁盘文件系统的inode并不会增加,例如123.txt跟321.txt互为硬链接,具有相同的inode号:
查看了VFS的代码,文件的name是存在struct dentry中的:
dentry只是VFS构造的内存数据结构,并不会持久化存储在磁盘文件系统上。
因此这个inode两个不同的name,很可能是存在文件的父目录中。证明着一点需要一个小工具:debugfs
首先得到123.txt和321.txt的父目录的inode为26935302,然后利用debugfs把inode为26935302的文件的content导出到一个文件dir.dmp中:
用hexdump工具查看文件26935302中究竟有哪些东西。
可以看到,123.txt跟321.txt两个文件名都是以asc方式存储的。
两个文件的inode号26935303,转换为16进制,以小字节序方式表示,刚好是中间的红色方框里面的数据:
01 9B 00 07。
在类似ext2、ext3的文件系统中,通过pathname打开一个文件时,需要对文件全路径名做lookup。最简单的情况假如一层目录,那么要做的事情是根据顶层目录的inode,把目录的content导入到内存,然后在这个content中查根据文件的名字做查找,最后才能找到匹配的name的inode号。如果每次lookup一个pathname都这样做,效率实在太低,因此VFS才有了dcache(dentry cache)的机制。
这里还发现debugfs的另外一个作用:
debugfs 1.41.9 (22-Aug-2009)
107753475
查看inode文件在文件系统中的的LBA(logical block address),其实就是这个文件的data部分在文件系统中的逻辑块号。
有了这个逻辑块号,通过直接访问文件系统的设备文件/dev/sda3,就可以读取文件的内容,下面是部分代码,有兴趣可以试下。
x = 107753475;
y = 4096;
off_set = x*y;
printf("off_set:%llu,%lld\n",off_set,off_set);
fd = open("/dev/sda3",O_RDONLY);
if(fd > 0)
{
printf("open success\n");
res = lseek64(fd,off_set,SEEK_SET);
if( res == off_set)
{
printf("res:%lld\n",res);
printf("lseek success!\n");
res = read(fd,buf,10);
if(res == 10)
{
printf("read sucess!%s\n",buf);
for( i=0;i<10;i++)
printf("%x\n",buf[i]);
}
- 硬链接的实现和debugfs工具
- 软链接和硬链接的区别
- 软链接和硬链接的区别
- 硬链接和软链接的区别
- Linux的软链接和硬链接
- 硬链接和软链接的区别
- linux的硬链接和软链接
- Linux的硬链接和软链接
- 硬链接和软链接的区别
- 文件的软链接和硬链接
- linux的硬链接和软链接
- 硬链接和符号链接的区别
- 硬链接和符号链接的区别
- 硬链接和符号链接的区别
- 硬链接和符号链接的区别
- 软链接和硬链接的区别
- 硬链接和软链接的区别
- 硬链接和符号链接的区别
- 【Deep Learning学习笔记】Efficient Estimation of Word Representations in Vector Space_google2013
- Eclipse 默认设置的换行长度
- 2^n
- C++笔记 explicit构造函数
- 【stagefrightpalyer】2 awesomeplayer结构分析
- 硬链接的实现和debugfs工具
- 字符集和字符编码(Charset & Encoding)
- Poj 2392(dp)
- python抓取网页出现 ^M 解决办法
- maven 的 oracle的Missing artifact com.oracle:******:jar:11.2.0.2.0
- 模板方法模式实现组合查询
- Linux下Apache与Tomcat的完全分布式集群配置(负载均衡)
- 读写配置文件代码(配置文件包含段名)
- 浏览器文件下载和图片显示(流形式)