文件都是储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector),也是硬盘的划分单位。每个扇区储存512字节(相当于0.5KB)。


      硬盘的瓶颈就是在于IO,如果一次只读一个扇区,io 就特别高。所以读取的时候都是一次性连续读取8个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"(block)的大小,最常见的是4KB,其次是8K。以4K为例:

  1block=4K=8扇区(可以这样理解)


   [root@test2 ~]# ls -li fighter

   130828 -rw-r--r--. 1 root root 0 Apr 18 16:37 fighter


    文件系统读取都是基于INODE号,系统不会辨认文件名fighterer,而是会读取138028的inode号 ,也叫索引节点。

   

   索引节点主要包括下面这些信息:

        * 文件的字节数

  * 文件iNode号

  * 文件的读、写、执行权限

        *文件的属组和属主 

  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  * 链接数,即有多少文件名指向这个inode


我们可以用stat 查看文件inode信息 


[root@test2 ~]# stat fighter

  File: `fighter'

  Size: 0         Blocks: 0          IO Block: 4096   regular empty file

Device: 802h/2050dInode: 130828      Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2015-04-18 16:37:29.382997819 +0800

Modify: 2015-04-18 16:37:29.382997819 +0800

Change: 2015-04-18 16:37:29.382997819 +0800


     很多时候我们在电脑创建文件,通过文件名打开文件。实际上,系统内部把这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。因为Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件

  

   软硬链接的区别;

 

  硬链接是基于索引节点创建的,相当于COPY一份文件,而软链是基于文件创建的,相当于WINDOWS下的快捷方式。

 

  我们可以用实验来看看两种方式的区

[root@test2 ~]# touch test1

 [root@test2 ~]# echo aaaaa >> test1

[root@test2 ~]# ls -li

 131070 -rw-r--r--. 1 root root     0 Apr 18 17:59 test1

[root@test2 ~]# cat test1

aaaaa

 

创建一个硬链接

 [root@test2 ~]# ln test1 test1_hard 

 [root@test2 ~]# ls -li

 total 100

131070 -rw-r--r--. 2 root root     0 Apr 18 17:59 test1

131070 -rw-r--r--. 2 root root     0 Apr 18 17:59 test1_hard

注意: inode 号没变,但是硬链接次数变为了2

 

[root@test2 ~]# cat test1

aaaaa

 

如果我们删除源文件 

 [root@test2 ~]# rm test1

rm: remove regular empty file `test1'? y

[root@test2 ~]# ls -li

total 100

131070 -rw-r--r--. 1 root root     0 Apr 18 17:59 test1_hard

文件存在,只是链接数变为了1,每删一次减少1


 [root@test2 ~]# cat test1

aaaaa

文件还是存在的 


 看一下软链接,还是这样的步骤:

touch test2

 [root@test2 ~]# echo 123456 >> test2

[root@test2 ~]# ls -li

total 100

 131070 -rw-r--r--. 1 root root     0 Apr 18 17:59 test1_hard

131071 -rw-r--r--. 1 root root     0 Apr 18 18:11 test2

 

[root@test2 ~]# cat test2

123456

 

[root@test2 ~]# ln -s test2 test2_ruan

[root@test2 ~]# ls -li

total 100

 131070 -rw-r--r--. 1 root root     0 Apr 18 17:59 test1_hard

131071 -rw-r--r--. 1 root root     0 Apr 18 18:11 test2

131072 lrwxrwxrwx. 1 root root     5 Apr 18 18:11 test2_ruan -> test2


 [root@test2 ~]# cat test2

 123456

 

[root@test2 ~]# rm  test2

rm: remove regular empty file `test2'? y


 [root@test2 ~]# ls -li 

total 100

131070 -rw-r--r--. 1 root root     0 Apr 18 17:59 test1_hard

131072 lrwxrwxrwx. 1 root root     5 Apr 18 18:11 test2_ruan -> test2

 

[root@test2 ~]# cat test2

cat: test2: No such file or directory


软链接变成红色,而且内容没有了,这就相当于WINDOWS下删掉了程序,但是快捷方式还存在,但是打不开,因为里面已经没有内容了


还有一点重要的区别是硬链接不能链接文件夹只能链接文件,而软链接都可以。


编译过程中经常要软链接文件夹,这样做是为了方便升级。


 实际中会遇到的问题


     系统提示磁盘空间不足,用df -h命令查看磁盘使用情况,发现还有剩余空间,但是无法创建文件。


原因分析:

      可能 分区目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。 

 用df -i查看分区的索引节点(inode),会发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。 

 解决方案:(3个)

  1、如果不是要保留的文件,只需要删除目录中的部分文件,释放出分区的一部分inode。

  2、用软连接将空闲分区中的目录连接到已经满了的分区,使用未满分区的inode来缓解已满分区inode不足的问题:

  # ln -s 已满目录  未满目录名

      3.扩展分区,扩容。 

 本文只作为自己学习和后期复习之用。如有技术基础论述错误或者错别字语病等不当之处,敬请指出,不胜感激,拜谢