文件都是储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector),也是硬盘的划分单位。每个扇区储存512字节(相当于0.5KB)。
硬盘的瓶颈就是在于IO,如果一次只读一个扇区,io 就特别高。所以读取的时候都是一次性连续读取8个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"(block)的大小,最常见的是4KB,其次是8K。以4K为例:
1block=4K=8扇区(可以这样理解)
[[email protected] ~]# 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信息
[[email protected] ~]# 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下的快捷方式。
我们可以用实验来看看两种方式的区
[[email protected] ~]# touch test1
[[email protected] ~]# echo aaaaa >> test1
[[email protected] ~]# ls -li
131070 -rw-r--r--. 1 root root 0 Apr 18 17:59 test1
[[email protected] ~]# cat test1
aaaaa
创建一个硬链接
[[email protected] ~]# ln test1 test1_hard
[[email protected] ~]# 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
[[email protected] ~]# cat test1
aaaaa
如果我们删除源文件
[[email protected] ~]# rm test1
rm: remove regular empty file `test1‘? y
[[email protected] ~]# ls -li
total 100
131070 -rw-r--r--. 1 root root 0 Apr 18 17:59 test1_hard
文件存在,只是链接数变为了1,每删一次减少1
[[email protected] ~]# cat test1
aaaaa
文件还是存在的
看一下软链接,还是这样的步骤:
touch test2
[[email protected] ~]# echo 123456 >> test2
[[email protected] ~]# 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
[[email protected] ~]# cat test2
123456
[[email protected] ~]# ln -s test2 test2_ruan
[[email protected] ~]# 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
[[email protected] ~]# cat test2
123456
[[email protected] ~]# rm test2
rm: remove regular empty file `test2‘? y
[[email protected] ~]# 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
[[email protected] ~]# 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.扩展分区,扩容。
本文只作为自己学习和后期复习之用。如有技术基础论述错误或者错别字语病等不当之处,敬请指出,不胜感激,拜谢
iNode 软链接和硬链接总结