Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71639
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 134
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-27 22:31
个人简介

梦想是要有的,万一实现了呢!

文章分类

全部博文(22)

文章存档

2015年(22)

分类: 服务器与存储

2015-05-03 17:35:54

硬链接到底占不占用磁盘空间?
查了很多资料都说  硬链接不占用磁盘空间,
于是乎,我做了如下实验,竟意外地发现有的硬链接也占用了磁盘空间!!!
文件系统是 ext4,centos虚拟机。
不多说,往下看吧。。。


新建了一个目录 inode_dir
[root@Gypsy_110 inode_dir]# du -sb ; df -i .
4096    .
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda5      152304    24 152280    1% /tmp


目录文件初始化大小为4096B,用了24个inode


拷贝一个文件过来
[root@Gypsy_110 inode_dir]# cp -a /etc/passwd .
[root@Gypsy_110 inode_dir]# ls -l
总用量 4                            ---->  对应的当前目录所有文件大小总和,单位是k字节
-rw-r--r--. 1 root root 904 5月   3 00:31 passwd      ---->  passwd 实际大小904B
[root@Gypsy_110 inode_dir]# du -sb ; df -i .
5000    .                                             ---->  4096B + 904B = 5000B
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda5      152304    25 152279    1% /tmp         ---->  用了1个inode


做个硬链接
[root@Gypsy_110 inode_dir]# ln passwd passwd.hd
[root@Gypsy_110 inode_dir]# du -sb ; df -i .
5000    .      ----> 不占用磁盘空间
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda5      152304    25 152279    1% /tmp         ----> inode用掉的数还是25,所以未占用inode
[root@Gypsy_110 inode_dir]# ls -li passwd passwd.hd
25 -rw-r--r--. 2 root root 904 5月   3 00:31 passwd   ----> 二者inode号一样
25 -rw-r--r--. 2 root root 904 5月   3 00:31 passwd.hd  


鸟哥如是说:
因此,通常情况下,设置硬链接文件时,不会占用磁盘空间和inode。
新建一个硬链接只是在某个目录(硬链接所在的当前目录)下的block里多写入一条关联数据而已。
只有在当前目录的block刚好填满时,才有可能为当前目录新增一个block来记录文件名和inode的关联记录
因为硬链接所用掉的关联数据量很小,所以说硬链接通常不会改变inode和磁盘空间大小


软连接
[root@Gypsy_110 inode_dir]# ln -s passwd passwd.so
[root@Gypsy_110 inode_dir]# ls -li passwd passwd.hd passwd.so
25 -rw-r--r--. 2 root root 904 5月   3 00:31 passwd
25 -rw-r--r--. 2 root root 904 5月   3 00:31 passwd.hd
26 lrwxrwxrwx  1 root root   6 5月   3 19:03 passwd.so -> passwd       ----> inode号为26
[root@Gypsy_110 inode_dir]# du -sb ; df -i .
5006    .                             ----> 磁盘空间增加了6B,说明这个软连接大小为6B
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda5      152304    26 152278    1% /tmp      ----> inode用掉的数变为26,所以占用1个inode


软连接是一个 独立的文件,拥有自己的inode和block
passwd.so 这个软连接的大小是 6B ,也就是他所连接的源文件的文件名的个数(每个字符占用1B)


为了验证这个想法又做了一个实验:
[root@Gypsy_110 test]# du -sb ; df -i .
69730   .
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda5      152304    26 152278    1% /tmp
[root@Gypsy_110 test]# ln -s /tmp/inode_dir/passwd passwd.so
[root@Gypsy_110 test]# du -sb ; df -i .
69751   .
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda5      152304    27 152277    1% /tmp
[root@Gypsy_110 test]# echo "21+69730" |bc
69751
[root@Gypsy_110 test]#
这个软连接的目标文件是 /tmp/inode_dir/passwd   大小为 21B   证实了以上结论
软连接的block里记录的就是 目标文件的文件名,使用时是通过该文件名找到正确的目录,
然后找到该目录的block,然后从该block里找到文件名所对应的真正inode。
最后找到目标文件的block。


最后又做了个实验:

[root@Gypsy_110 inode_dir]# ll
总用量 4   ----> 当前目录总大小
-rw-r--r-- 1 root root 904 5月   3 21:02 passwd
[root@Gypsy_110 inode_dir]# du -sb; df -i .
5000    .                                                  ----> 原占用磁盘 5000B
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda5      152304    24 152280    1% /tmp              ----> 用掉了24个inode


[root@Gypsy_110 inode_dir]# ln passwd passwd.hd            ----> 目标文件也在当前目录
[root@Gypsy_110 inode_dir]# ll
总用量 8                                                   ----> 当前目录总大小增加4K
-rw-r--r-- 2 root root 904 5月   3 21:02 passwd
-rw-r--r-- 2 root root 904 5月   3 21:02 passwd.hd
[root@Gypsy_110 inode_dir]# du -sb; df -i .
5000    .                                                  ----> 不增加磁盘占用
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda5      152304    24 152280    1% /tmp              ----> 不占用inode


以上都很顺利,问题来了!!!!

[root@Gypsy_110 inode_dir]# ln /tmp/test/1.txt 1.txt.hd    ----> 目标文件不在当前目录
[root@Gypsy_110 inode_dir]# ll
总用量 12   ----> 当前目录总大小增加4K
-rw-r--r-- 2 root root  24 5月   3 19:28 1.txt.hd
-rw-r--r-- 2 root root 904 5月   3 21:02 passwd
-rw-r--r-- 2 root root 904 5月   3 21:02 passwd.hd
[root@Gypsy_110 inode_dir]# du -sb; df -i .
5024    .   ----> 增加了24B(即目标文件的大小)
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda5      152304    24 152280    1% /tmp   ----> 不占用inode

[root@Gypsy_110 inode_dir]# ls -li 1.txt.hd /tmp/test/1.txt
27 -rw-r--r-- 2 root root 24 5月   3 19:28 1.txt.hd
27 -rw-r--r-- 2 root root 24 5月   3 19:28 /tmp/test/1.txt
[root@Gypsy_110 inode_dir]# ls -li passwd passwd.hd
17 -rw-r--r-- 2 root root 904 5月   3 21:02 passwd
17 -rw-r--r-- 2 root root 904 5月   3 21:02 passwd.hd


硬链接这块貌似矛盾啊,到底是怎么回事呢?

小弟愚钝,请读者不吝赐教!



阅读(4688) | 评论(1) | 转发(0) |
1

上一篇:awk

下一篇:关于目录连接数量的思考

给主人留下些什么吧!~~

hitwh_Gypsy2015-05-03 17:45:45

.