linux下文件操作inode,block的变化

   在“浅谈linux性能调优之三:分区格式化之前的考虑”
           http://my.oschina.net/sharelinux/blog/143522    一文中我说了inode与block的关系,现在说一下linux下文件操作底层inode与block发生了什么变化:

1.创建好文件系统并挂载:inode,block信息如下:
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sdb5              28112      11   28101    1% /test5
/dev/sdb6              28112      11   28101    1% /test6
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sdb5               108837      5663     97555   6% /test5
/dev/sdb6               108865      5663     97581   6% /test6
2.在/test5下创建一个testfile文件:后信息如下:
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sdb5              28112      12   28100    1% /test5
/dev/sdb6              28112      11   28101    1% /test6
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sdb5               108837      5664     97554   6% /test5
/dev/sdb6               108865      5663     97581   6% /test6
结论:创建一个文件时,占用一个inode,至少一个block
3.从/test5复制文件testfile到/test6/testfile.cp
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sdb5              28112      13   28099    1% /test5
/dev/sdb6              28112      12   28100    1% /test6
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sdb5               108837      5664     97554   6% /test5
/dev/sdb6               108865      5664     97580   6% /test6
结论:复制应该等于建立的过程
4.移动/test5/testfile到/test6/
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sdb5              28112      12   28100    1% /test5
/dev/sdb6              28112      13   28099    1% /test6
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sdb5               108837      5664     97554   6% /test5
/dev/sdb6               108865      5664     97580   6% /test6
结论:/test5 inode减少一个, /test6 inode增加一个,/test5 block应该不变,/test6应该减少一个 可能因为文件大小
5.在/test6下删除testfile
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sdb5              28112      12   28100    1% /test5
/dev/sdb6              28112      12   28100    1% /test6
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sdb5               108837      5664     97554   6% /test5
/dev/sdb6               108865      5664     97580   6% /test6
结论:删除文件时,只删除inode节点,不销毁block块中的数据,同时这也是数据恢复的基础


硬链接
---------------------------------
    刚才说过,当系统要读取某个文件时,它会先读inode table,然后根据inode的信息到数据区域将数据取出备用。硬链接就是再建立一个inode链接到文件放置的Block块。也就是说,进行硬链接时,实际上您的文件内容不会改变,只是原来的inode与后来添加的inode均可指定到该文件存放的地点,因此,读取两个inode的结果都是读取同一个文件的内容。不过,这样一来就有个问题,因为inode会链接到Block块,而"目录"本身仅消耗inode,这样,硬链接就不能链接目录。所以,硬链接有两个最大的限制:
    (1) 不能跨文件系统,因为不同的文件系统有不同的inode table;
    (2) 不能链接目录。


软链接(符号链接)
---------------------------------
    相对于硬链接,符号链接比较好理解,基本上,它是再建立一个独立文件,而这个文件会让数据读取操作指向它链接的那个文件。由于只是利用文件作为指向的动作,所以,当源文件被删除,符号链接的文件就打不开了,屏幕会显式"无法开启某文件"。
    因此,硬链接比较安全,因为即某一个inode被删除,只要还有一个inode,该文件就能被找到。



你可能感兴趣的:(linux下文件操作inode,block的变化)