Linux系统inode和block知识详解
1. inode和block概述
在每个Linux存储设备或存储设备的分区被格式化(ext3,ext4等)之后,一般都有两部分:一部分是inode,另一部分是block。block是用来存储实际数据的,而inode用来存储这些数据的属性信息,包括文件的大小、属主、归属的用户组、读写权限、文件类型、修改时间,还包含指向文件实体的指针功能(inode节点到block的对应关系)等,但并不包含文件名。文件名一般被存储在其所在目录的block里面。
inode除了记录文件属性信息外,还会为每个文件进行信息索引,因此就有了inode的数值,用ls -li命令可以看到输出信息的第一列就是每个文件的索引数值:
[root@Howden ~]# ls -li total 64 26 -rw-r--r--. 1 root root 585 Feb 20 23:29 70-persistent-net.rules 147011 -rw-------. 1 root root 1206 Oct 17 13:46 anaconda-ks.cfg 151004 -rw-r--r-- 1 root root 137 Oct 17 14:02 ifcfg-eth0.ori 130308 -rw-r--r--. 1 root root 30148 Oct 17 13:46 install.log 130309 -rw-r--r--. 1 root root 7119 Oct 17 13:45 install.log.syslog 157559 -rw-r--r-- 1 root root 823 Feb 25 19:49 optimise_sysctl 157552 -rw-r--r-- 1 root root 1150 Nov 23 2013 sysctl.conf.ori
2. 访问文件的简单流程
当一个用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它的inode,看该用户是否具有访问这个文件的权限。如果有,就指向相对应的文件数据block;如果没有权限,就返回Permission denied。
3. inode的大小
由于inode要存放文件的属性信息,所以它也是有大小的。inode的默认大小在CentOS 5.x系统中是128字节,而在CentOS 6.x中是256字节。inode的大小在创建存储设备的文件系统时是可以指定的,而在格式化之后就不能更改了。不过一般工作环境中不会有这个需求。可以用dumpe2fs命令来查看当前系统中的inode大小:
[root@Howden ~]# dumpe2fs /dev/sda3 | grep -i "inode size" dumpe2fs 1.41.12 (17-May-2010) Inode size: 256 [root@Howden ~]# dumpe2fs /dev/sda1 | grep -i "inode size" dumpe2fs 1.41.12 (17-May-2010) Inode size: 128 [root@Howden ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 9.2G 5.0G 3.7G 58% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 194M 29M 155M 16% /boot
我的系统是CentOS 6.5,可以看出,/boot分区的默认inode大小仍然是128,而根分区(常规分区)是256。
4. block的大小
在ext3或者ext4文件系统中,block的大小一般是1k,2k或者4k。在我的CentOS 6.5系统中,引导分区的block大小是1k,常规分区是4k:
[root@Howden ~]# dumpe2fs /dev/sda1 | grep -i "block size" dumpe2fs 1.41.12 (17-May-2010) Block size: 1024 [root@Howden ~]# dumpe2fs /dev/sda3 | grep -i "block size" dumpe2fs 1.41.12 (17-May-2010) Block size: 4096
5. inode和block的数量
如果想查看磁盘中inode的数量和使用情况,可以用df -i命令:
[root@Howden ~]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 610800 110679 500121 19% / tmpfs 61778 1 61777 1% /dev/shm /dev/sda1 51200 38 51162 1% /boot
也可以用dumpe2fs命令查看某个分区中inode和block的总量:
[root@Howden ~]# dumpe2fs /dev/sda3 | grep -i "inode count" dumpe2fs 1.41.12 (17-May-2010) Inode count: 610800 [root@Howden ~]# dumpe2fs /dev/sda3 | grep -i "block count" dumpe2fs 1.41.12 (17-May-2010) Block count: 2438912 Reserved block count: 121945
6. 文件、inode和block之间的对应关系
磁盘读取文件数据是以block为单位读取的。一个文件无论多大都必须占用一个inode和至少一个block,一个block只能被一个文件使用,而一个inode可以被多个文件占用(硬链接)。
7. block大小的选择
由于一个block只能被一个文件使用,因此block并非越大越好。block越大,对于小文件(1k以下或者至少是4k以下)非常多的应用会十分浪费空间,但是对于大文件较多的应用,如视频等多媒体文件的读取,可以提升读取的效率,因为block越大,同样大小的文件需要读取的block数量就会越少,从而减少磁盘IO消耗。而如果block太小,就会降低磁盘读取大文件的效率,因为需要读更多数量的block。实际上,对于ext3/ext4文件系统,block的大小只有三种选择:1k、2k、4k。
8. 如何改变inode和block的大小
只能在格式化的时候改变inode和block的大小,具体命令如下(以ext4文件系统为例):
[root@Howden ~]# mkfs.ext4 -b 2048 -I 2048 /dev/sda2
关于生产环境中文件系统类型和block大小如何选择,可以参考这篇博客:http://blog.csdn.net/liuaigui/article/details/5521024
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。