从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件

Linux文件删除原理

发布:蔺要红07-09分类: 基础知识

Linux文件删除原理:

Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count 和 i_nlink。
i_count的意义是当前文件使用者(或被调用)的数量,i_nlink 的意义是介质连接的数量(硬链接的数量);可以理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器。

当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件的硬链接的时候,对应i_nlink数就会增加。

对于删除命令rm而言,实际就是减少磁盘引用计数i_nlink。这里就会有一个问题,如果一个文件正在被某个进程调用,而用户却执行rm操作把文件删除了,那么会出现什么结果呢?当用户执行rm操作删除文件后,再执行ls或者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容。这又是为什么呢?

这是因为rm操作只是将文件的i_nlink减少了,如果没其它的链接i_nlink就为0了;但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_nlink及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行。

以上讲的i_nlink及i_count是文件删除的真实条件,但是当文件没有被调用时,执行了rm操作删除文件后是否还可以找回被删的文件呢?

前面说了,rm操作只是将文件的i_nlink减少了,或者说置0了,实际就是将文件名到inode的链接删除了,此时,并没有删除文件的实体即(block数据块),此时,如果及时停止机器工作,数据是可以找回的,如果此时继续写入数据,那么当新数据就可能会被分配到被删除的数据的block数据块,此时,文件就会被真正的回收了,那时就是神仙也没有办法了


案例:
删除文件后硬盘空间不能立即得到释放:重启对应的服务来释放i_count

案例:
Linux服务器出现:No space left on device的解决方法:需要查看系统blocks 和 Inodes

[[email protected] ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  8.0G   30G  22% /
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G   32K   16G   1% /dev/shm
tmpfs            16G  544K   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/vdb1        99G   52G   43G  55% /www
/dev/vdc1        99G  5.1G   89G   6% /www/wwwroot/www.yolf666.com/dbbackup
tmpfs           3.2G     0  3.2G   0% /run/user/0
[[email protected] ~]# df -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/vda1      2621440  90550 2530890    4% /
devtmpfs       4094891    388 4094503    1% /dev
tmpfs          4097554      2 4097552    1% /dev/shm
tmpfs          4097554    494 4097060    1% /run
tmpfs          4097554     16 4097538    1% /sys/fs/cgroup
/dev/vdb1      6553600 147843 6405757    3% /www
/dev/vdc1      6553600     30 6553570    1% /www/wwwroot/www.yolf666.com/dbbackup
tmpfs          4097554      1 4097553    1% /run/user/0
[[email protected] ~]# df 
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/vda1       41151808  8285872  30752504  22% /
devtmpfs        16379564        0  16379564   0% /dev
tmpfs           16390216       32  16390184   1% /dev/shm
tmpfs           16390216      544  16389672   1% /run
tmpfs           16390216        0  16390216   0% /sys/fs/cgroup
/dev/vdb1      103079864 53586844  44233808  55% /www
/dev/vdc1      103079864  5345712  92474940   6% /www/wwwroot/www.yolf666.com/dbbackup
tmpfs            3278044        0   3278044   0% /run/user/0



 

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站