文件系统如何存取文件的
1、根据文件名,通过Directory里的对应关系,找到文件对应的Inode number
2、再根据Inode number读取到文件的Inode table
3、再根据Inode table中的Pointer读取到相应的Blocks
这里有一个重要的内容,就是Directory,他不是我们通常说的目录,而是一个列表,记录了一个文件/目录名称对应的Inode number。如下图
[root@yufei ~]# watch -n 1 "df -i;df"
Every 1.0s: df -i;df Tue Apr 5 21:57:38 2011
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 960992 105415 855577 11% /
tmpfs 63946 1 63945 1% /dev/shm
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 2747612 11603116 20% /
tmpfs 255784 0 255784 0% /dev/shm
[root@yufei test]# ls -li
total 4
977 drwxr-xr-x. 2 root root 4096 Apr 5 16:48 testdir
976 -rw-r--r--. 3 root root 0 Apr 5 18:54 testfile
976 -rw-r--r--. 3 root root 0 Apr 5 18:54 testfile.hard
976 -rw-r--r--. 3 root root 0 Apr 5 18:54 testfile.hard1
978 lrwxrwxrwx. 1 root root 8 Apr 5 17:03 testfile.soft -> testfile
我们先记录以上的信息
先看复制文件的情况
[root@yufei test]# cp testfile testfile.cp
[root@yufei test]# ls -li
976 -rw-r--r--. 3 root root 0 Apr 5 21:50 testfile
979 -rw-r--r--. 1 root root 0 Apr 5 21:58 testfile.cp
我们只对比这两个文件,发现Inode number不一样,我们再来看看inodes和blocks的剩余情况
Every 1.0s: df -i;df Tue Apr 5 22:02:49 2011
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 960992 105416 855576 11% /
tmpfs 63946 1 63945 1% /dev/shm
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 2747620 11603108 20% /
tmpfs 255784 0 255784 0% /dev/shm
发现inodes减少了一个,而blocks也少了,这就说明,复制文件是创建文件,并占Inode和Block的。
文件创建过程是:先查找一个空的Inode,写入新的Inode table,创建Directory,对应文件名,向block中写入文件内容
关于移动文件和删除文件的实验,大家可以自己动手来实践吧。我直接给出相应的说明。
移动文件,他分两种情况:
在同一个文件系统中移动文件时
创建一个新的文件名和Inode的对应关系(也就是在Directory中写入信息),然后在Directory中删除旧的信息,更新CTIME,其他的信息如Inode等等均无任何影响
在不同文件系统移动文件时
先查找一个空的Inode,写入新的Inode table,创建Directory中的对应关系,向block中写入文件内容,同时还会更改CTIME。
删除文件
他实质上就是减少link count,当link count为0时,就表示这个Inode可以使用,并把Block标记为可以写,但并没有清除Block里面数据,除非是有新的数据需要用到这个block。
最后我们来做个总结:
1、一个Inode对应一个文件,而一个文件根据其大小,会占用多块blocks。
2、更为准确的来说,一个文件只对应一个Inode。因为硬链接其实不是创建新文件,只是在Directory中写入了新的对应关系而已。
3、当我们删除文件的时候,只是把Inode标记为可用,文件在block中的内容是没有被清除的,只有在有新的文件需要占用block的时候,才会被覆盖
转载于:https://blog.51cto.com/txidc/1558848