首页 > 代码库 > 关于硬链接与软连接占用磁盘空间问题的分析研究

关于硬链接与软连接占用磁盘空间问题的分析研究


在学习过硬链接和软连接的知识后,我们在做实验的过程中会发现,创建的硬链接会占用磁盘的空间,而我们学习过成中了解到,硬链接只是创建一个文件与源文件相同的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

关于硬链接与软连接占用磁盘空间问题的分析研究