首页 > 代码库 > 关于硬链接与软连接占用磁盘空间问题的分析研究
关于硬链接与软连接占用磁盘空间问题的分析研究
在学习过硬链接和软连接的知识后,我们在做实验的过程中会发现,创建的硬链接会占用磁盘的空间,而我们学习过成中了解到,硬链接只是创建一个文件与源文件相同的inode号,那怎么还会占用磁盘空间呢?带着疑问,跟随夹克来进行一些实验进行验证并得出结论:
首先我们再来回顾一下关于 硬链接与软连接的知识:
硬链接的特点:
l 创建硬链接会增加额外的记录项以引用文件
l 对应用于同一文件系统上的一个物理文件
l 每个目录引用相同的inode 号
l 创建时链接数递增
l 删除文件时,递减链接数,当链接数为0时,该文件已被删除
l 硬链接的建立是不能越驱动器或分区的
l 语法为:ln filename linkname
软链接的特点:
l与硬链接最大的不同就是,软链接并不使用相同的inode号,同时
也不增加或减少目标文件inode的引用计数
l 创建的链接只是对应的指向源文件的路径,所以可以对目录进行链 接,硬链接中只能对文件进行链接,
l 既然软链接是指向的一个文件的路径,所以可以跨越分区进行。
l 语法为:ln –s filenamelinkname
硬链接测试:
从上面我们对硬链接和软链接的特点分析可知道,硬链接所创建的是一个使用相同的inode号,根据我们的理解,两个相同的文件对应一个inode号,指向硬盘中相同的数据群块,但是我们通过下面一个实验发现有些蹊跷,一起来看看吧!
在/app目录下创建一个文件,我这里创建了一个4.9G大的文件,
接下来我们来设置一个硬链接:
咦?怎么大小变成9.8G了呢?这完全是翻倍了呀!小伙伴们是不是有了疑问,统计的数据反应出硬链接占用了同的空间,我刚开始也很郁闷,一度怀疑是不是硬链接也占用了空间,所以随后我又查了两个文件的inode 号,如下:
表明两个文件公用的是一个inode号,所以证明它们指向的是同一个数据块(在文件系统中一个inode号对应一个数据块群),并没有重新占用其他的数据块,所以也并不是复制了相同的文件,同时当改变其中一个文件的数据后,查看与之硬链接的文件其数据也是随之同步的,这迹象也表明对应的是一个数据块,而正真的问题并不是硬链接的问提,是这个ll –h 或者 ls –h这命令进行统计文件总大小的时候并不是从磁盘进行统计的,而是根据文件属性中的大小叠加得来的。而硬链接的文件属性中的大小就是就是inode号对应的数据块的大小,所以total中进行统计就把各个文件属性中的大小加起来作为总和,这种统计是不标准,也不具有代表性的,正真的查看某个文件夹占用磁盘空间大小命令是:du –h 这个命令是从磁盘上进行统计,不会被文件的属性中大小影响,所以更准确,测试结果如下图所示:
从上面的测试中,我们看到真实的磁盘容量并没有改变,所以可以得出结论:
硬链接并不占用磁盘空间!
软链接测试:
对于软链接就更好理解了,并没有出现想上面出现的问题,我们同样在/app目录下创建一个软链接,显示如下图:
从上面的测试结果我们看到,软链接的inode号并不一样,链接的文件所占用的空间也是极小的,这个链接文件C1的数据中仅存储了一个路径而已,所以这部分大小只是路径的大小。
从上面两个实验,我们可以得出一个结论:
硬链接不占用磁盘空间,软链接占用的空间只是存储路径所占用的极小空间。
本文出自 “Linux运维” 博客,请务必保留此出处http://jk6627.blog.51cto.com/12002684/1949090
关于硬链接与软连接占用磁盘空间问题的分析研究