您的位置:首页 > 运维架构 > Linux

06-Linux基础入门(五)-文件和目录的属性及权限之inode与block

2018-02-05 17:43 771 查看
一、Linux中的文件-文件属性概述(在Linux里一切皆文件)

Linux系统中的文件或目录的属性主要包括:索引节点(inode)、文件类型、权限属性、链接数、所归属的用户和用户组、最近修改时间等内容。

下列我们看下执行ls -lhi命令结果:

[root@centos6 ~]# ls -lhi

total 40K

789556 -rw——-. 1 root root 1.2K 1月 27 19:28 anaconda-ks.cfg

783363 -rw-r–r–. 1 root root 22K 1月 27 19:28 install.log

783364 -rw-r–r–. 1 root root 5.8K 1月 27 19:26 install.log.syslog

文字解释:

第一列:inode索引节点编号(类似于人的身份证,全国唯一),系统读取文件时首先通过文件名找到inode,然后才能读取到文件内容;

第二列:文件类型及权限(共11个字符,第一个字符为类型,后9个字符为文件权限(r:read 可读,w:write 可写,x:execute 可执行),第2-4个字符为所有者权限,第5-7个字符为所属用户组权限,第8-10个字符为其他人权限,最后一个字符“.”是与SELinux相关的标识);

第三列:硬链接个数(详细参看ln命令的讲解);

第四列:文件或目录所属的用户(属主),在Linux里面文件和程序存在必须要有用户和组满足相应的存在需求;

第五列:文件或目录所属的组;

第六列:文件或目录的大小;

第七、八、九列:文件或目录的修改时间,默认情况下月日时分;

第十列:实际的文件名或目录名(严格的说文件名不算文件的属性);

二、关于inode

1、概述

硬盘要存储数据首先要分区,然后格式化创建文件系统,最后存储数据。

inode,中文意思是索引节点(index node)。在每个Linux存储设备或存储设备的分区(存储设备可以是硬盘、软盘、U盘……)被格式化为ext4(CentOS6.9)文件系统后,一般都有两部分:第一部分是Inode(很多个),第二部分是Block(很多个)。

这个Block是用来存储实际数据用的,例如:照片,视频等普通文件数据。

而inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode的属性信息包括不限于文件大小、属主(用户)、归属的用户组、文件权限、文件类型、修改时间,还包括指向文件实体的指针的功能(inode节点–block的对应关系)等,但是inode里边唯独不包含文件名。

inode除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,即可通过inode的值最快的找到相对应的文件实体、文件,inode和block之间的文件关系见下图:



打个比方,一本书相当于一块磁盘或分区,书的目录相当于inode,每页的文字和图片相当于block。

因为inode要存放文件的属性信息,所以每个inode本身是有大小的,CentOS5 系列inode的默认大小是128字节,而CentOS6系列inode的默认大小是256字节,inode的大小在分区被格式化创建文件系统之后定下来的,格式化以后就无法更改inode大小,格式化前可以通过参数指定inode大小,但是一般工作环境没这个要求。

• 显示inode参数

ls -li 或 stat 文件名(查看文件详细属性)

• 查看inode

[root@centos ~]# dumpe2fs /dev/sda1 |grep -i “inode size”

dumpe2fs 1.41.12 (17-May-2010)

Inode size: 128

[root@centos ~]# dumpe2fs /dev/sda2 |grep -i “inode size”

dumpe2fs 1.41.12 (17-May-2010)

dumpe2fs: Bad magic number in super-block 当尝试打开 /dev/sda2 时

[root@centos ~]# dumpe2fs /dev/sda3 |grep -i “inode size”

dumpe2fs 1.41.12 (17-May-2010)

Inode size: 256

• 查看文件系统inode总量以及剩余量

df -i

• 查看磁盘的使用量

df -h

磁盘空间是否满了(no space left on device),是由两项参数决定的:

第一个是inode是否满了,第二个是block是否满了,任何一项满了,都无法存放数据。

2、小结

①磁盘被分区格式化为ext4文件系统后会生成一定数量的inode和block。

②inode称为索引节点,它的作用是存放文件的属性信息以及作为文件的索引(指向文件的实体)。

③ext3/etx4文件系统的block存放的是文件的实际内容。

④inode是磁盘上的一块存储空间,centos6非启动分区inode默认大小是256字节,centos5是128字节。

⑤inode的表现形式是一串数字,不同的文件对应的inode(一串数字)在文件系统里是唯一的。

⑥inode节点号相同的文件,互为硬链接文件,可以认定是一个文件的不同入口。

⑦ext3/etx4文件系统下,一个文件被创建后至少要占用一个inode和一个block。

⑧ext3/etx4文件系统下,正常情况下一个文件占用且只能占用一个inode。

⑨block是用来存储实际数据的,每个block的大小一般有1k,2k,4k几种,其中引导分区等为1k,其他普通分区多为4k。(CentOS6)

⑩如果一个文件很大,可能占多个Block。如果文件很小,至少占一个,并且这个block的剩余空间就浪费了,即无法在存储其它数据了。

⑪inode大小和总量查看

[root@centos ~]# dumpe2fs /dev/sda3 |egrep -i “block size|inode size”

[root@centos ~]# dumpe2fs /dev/sda3 |egrep -i “block count|inode count”

默认情况下 block count一般会大于inode count。

⑫查看inode的总量和使用量

df -i

⑬查看文件的inode的信息方法

ls -li 或 stat /etc/hosts

⑭如何生成及指定inode大小

格式化命令:mkfs.ext4 -b 2048 -i 256 /dev/sdb

三、关于block

①磁盘读取数据是按block为单位读取的。

②一个文件可能占用多个block,但是每读取一个block就会消耗一次磁盘I/O。

③如果要提升磁盘IO性能,那么就要尽可能一次性读取数据尽量的多。

④一个block只能存放一个文件的内容,无论内容有多小。如果block默认是4K大小,那么存放一个1K的文件,剩余3K就不能存放别的文件,只能浪费了。

⑤block并非越大越好,block太大对于存放小文件就会浪费磁盘空间,例如:1000K的文件,block的大小为4k,占用250个block,如果block默认为1k,则需要占1000个block,则消耗IO分别为250次和1000次。

⑥根据业务需求,确定默认的block大小,如果是大文件(大于16K)一般设置block大一点,小文件(小于1k)一般设置block小一点。

⑦block太大,例如4k,文件都是0.1k的,大量浪费磁盘空间,但是访问性能高。

⑧block太小,例如1k,文件都是1000k,消耗大量磁盘IO。

⑨block大小的设置也是格式化分区时候确定的,命令mkfs.ext4 -b 2048 -I 256 /dev/sdb。

⑩企业里文件都会比较大(一般会大于4k),block设置大一些会提升磁盘的访问效率。

⑪ext3/ext4文件系统(CentOS5和6),一般都设置为4K。

四、文件删除恢复ext3grep,应该多养成好习惯,先备份在操作,要能快速还原,不容易还原的,先通过多套测试环境测试,然后在操作。

五、总结

①磁盘被分区格式化文件系统后,会分为inode和block两部分内容。

②inode存放文件的属性以及指向文件实体的指针,文件名不在inode里,一般在上级目录的block里。

③访问文件,通过文件名→inode→blocks。

④inode一般情况默认大小256B,block大小为1,2,4k,默认是4k,注意,引导分区等特殊分区除外。

⑤通过df -i查看inode的数量及使用情况,dumpe2fs /dev/sda3查看inode及block的大
4000
小及数量

⑥一个文件至少要占用一个inode及一个block,多个文件可以占用一个inode(硬链接),相同文件。

⑦一个block只能被一个文件使用,如果文件很小block很大,剩余空间浪费,无法继续被其他文件使用。

⑧block不是越大越好,要根据业务的文件大小进行选择,一般CentOS6就是4K。

⑨可以在格式化的时候改变inode及block大小。

欢迎关注

新浪微博:https://weibo.com/yougazhang0506

微信公众平台:张雨嘉



我的网站:http://www.zhangyujia.cn

51CTO博客:http://blog.51cto.com/11099293

CSDN博客:http://blog.csdn.net/u013260195

GitHub:https://github.com/zhangyujia0506/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux inode block
相关文章推荐