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

转自:https://blog.51cto.com/jk6627/1949090 @迁行 感谢原作者。

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

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

硬链接的特点:

wKioL1lvUGjQ8TirAAAnGNq3aDs576.png

      i_f48.gifl  创建硬链接会增加额外的记录项以引用文件

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

l  每个目录引用相同的inode 号

l  创建时链接数递增

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

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

l  语法为:ln filename linkname

软链接的特点:

     wKiom1lvUGjTXRJMAAAtjT6GldQ692.png

 

    i_f48.gifl与硬链接最大的不同就是,软链接并不使用相同的inode号,同时

        也不增加或减少目标文件inode的引用计数

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

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

l  语法为:ln –s filenamelinkname

硬链接测试:

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

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

wKioL1lvTvryo42DAAAOvuFDmTM298.png

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

wKioL1lvTvqiTbORAAAZIXyN4JU168.png

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

wKioL1lvT2XBfAylAAAVvciajlY492.png

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

wKiom1lvT5yjPmFAAAAZoX9y70M036.png

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

硬链接并不占用磁盘空间!i_f13.gif

软链接测试:

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

wKioL1lvT96S2u1_AAAZVO3AV04666.png

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

从上面两个实验,我们可以得出一个结论:j_0003.gif

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值