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

分享于:2018-12-18 14:56:12

在学习过硬链接和软连接的知识后,我们在做实验的过程中会发现,创建的硬链接会占用磁盘的空间,而我们学习过成中了解到,硬链接只是创建一个文件与源文件相同的inode号,那怎么还会占用磁盘空间呢?技术分享带着疑问,跟随夹克来进行一些实验进行验证并得出结论:

首先我们再来回顾一下关于 硬链接与软连接的知识:

硬链接的特点:


1、创建硬链接会增加额外的记录项以引用文件

2、对应用于同一文件系统上的一个物理文件

3、每个目录引用相同的inode 号

4、创建时链接数递增

5、删除文件时,递减链接数,当链接数为0时,该文件已被删除

6、硬链接的建立是不能越驱动器或分区的

语法为:ln filename linkname

软链接的特点:


1、与硬链接最大的不同就是,软链接并不使用相同的inode号,同时也不增加或减少目标文件inode的引用计数

2、创建的链接只是对应的指向源文件的路径,所以可以对目录进行链     接,硬链接中只能对文件进行链接,

3、既然软链接是指向的一个文件的路径,所以可以跨越分区进行。

4、语法为:ln –s filenamelinkname


硬链接测试:

从上面我们对硬链接和软链接的特点分析可知道,硬链接所创建的是一个使用相同的inode号,根据我们的理解,两个相同的文件对应一个inode号,指向硬盘中相同的数据群块,但是我们通过下面一个实验发现有些蹊跷,一起来看看吧!

在/app目录下创建一个文件,我这里创建了一个4.9G大的文件,


1.png

接下来我们来设置一个硬链接:

1.png

咦?怎么大小变成9.8G了呢?这完全是翻倍了呀!小伙伴们是不是有了疑问,统计的数据反应出硬链接占用了同的空间,我刚开始也很郁闷,一度怀疑是不是硬链接也占用了空间,所以随后我又查了两个文件的inode 号,如下:

1.png

表明两个文件公用的是一个inode号,所以证明它们指向的是同一个数据块(在文件系统中一个inode号对应一个数据块群),并没有重新占用其他的数据块,所以也并不是复制了相同的文件,同时当改变其中一个文件的数据后,查看与之硬链接的文件其数据也是随之同步的,这迹象也表明对应的是一个数据块,而正真的问题并不是硬链接的问提,是这个ll –h 或者 ls –h这命令进行统计文件总大小的时候并不是从磁盘进行统计的,而是根据文件属性中的大小叠加得来的。而硬链接的文件属性中的大小就是就是inode号对应的数据块的大小,所以total中进行统计就把各个文件属性中的大小加起来作为总和,这种统计是不标准,也不具有代表性的,正真的查看某个文件夹占用磁盘空间大小命令是:du –h   这个命令是从磁盘上进行统计,不会被文件的属性中大小影响,所以更准确,测试结果如下图所示:

1.png


从上面的测试中,我们看到真实的磁盘容量并没有改变,所以可以得出结论:

硬链接并不占用磁盘空间!技术分享

软链接测试:

对于软链接就更好理解了,并没有出现想上面出现的问题,我们同样在/app目录下创建一个软链接,显示如下图:

1.png

从上面的测试结果我们看到,软链接的inode号并不一样,链接的文件所占用的空间也是极小的,这个链接文件C1的数据中仅存储了一个路径而已,所以这部分大小只是路径的大小。

从上面两个实验,我们可以得出一个结论:技术分享

硬链接不占用磁盘空间,软链接占用的空间只是存储路径所占用的极小空间。


来源:http://www.mamicode.com/info-detail-1914045.html