Linux文件的属性(上半部分)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux⽂件的属性(上半部分)
第⼋节 Linux ⽂件的属性(上半部分)
标签(空格分隔):Linux实战教学笔记
第1章 Linux中的⽂件
1.1 ⽂件属性概述(ls -lhi)
linux⾥⼀切皆⽂件
Linux系统中的⽂件或⽬录的属性主要包括:索引节点(inode),⽂件类型,权限属性,链接数,所归属的⽤户和⽤户组,最近修改时间等内容:
⽂字解释:
第⼀列:inode索引节点编号(相当于⼈的⾝份证,全国唯⼀)
第⼆列:⽂件类型及权限
第⼆列共11个字符:其中第⼀个字符为⽂件类型,随后的9个字符为⽂件的对应权限,最后⼀个字符点号“.”是和selinux有关的⼀个标识;
第三列:硬链接个数(详细参看ln命令的讲解);
相当于超市的多个⼊⼝,可以从不同的⽂件⼊⼝进⼊⽂件,还可以互为备份(消防通道)
第四列:⽂件或⽬录所属的⽤户⽂件的所有者(属主);
linux⾥⾯⽂件和程序的存在必须要有⽤户和组满⾜相应的存在需求。
第五咧:⽂件或⽬录所属的组
第六列:⽂件或⽬录的⼤⼩;
第七⼋九列:⽂件或⽬录的修改时间:默认⽉⽇时分
第⼗列:实际的⽂件或⽬录名
⽂件名不算⽂件的属性
下⾯我们以chensiqi⽂件为例进⾏说明,具体列的内容参考下上⾯的图:
1736707 -rwx-xr-x- 1 root root 35 Oct 28 11:29 chensiqi
inode索引节点编号:1736707
⽂件类型,⽂件类型是-,表⽰这是⼀个普通⽂件;
⽂件权限:⽂件权限是rwxr-xr-x,表⽰⽂件属主可读,可写,可执⾏,⽂件归属的⽤户组可读可执⾏,其他⽤户可执⾏。
硬链接个数:表⽰chensiqi这个⽂件没有其它的硬链接,因为连接数是1,就是他本⾝;
⽂件属主:这个⽂件所属的⽤户,这⾥意思是chensiqi⽂件被root⽤户拥有,注意,是第⼀个root;
⽂件属组:这个⽂件所属的⽤户组,在这⾥是root⽤户组,是显⽰信息⾥的第⼆个root
⽂件⼤⼩:⽂件⼤⼩是35个字节
⽂件修改时间:这⾥的时间是该⽂件最后被更新(包括⽂件创建,内容更新,⽂件名更新等)的时间,可⽤如下命令查看⽂件的修改,访问,创建的时间
1.2 索引节点inode
1.2.1 inode 概述
硬盘要存储数据,⾸先要分区,然后格式化创建⽂件系统,最后挂载,才能存数据。
Inode,中⽂意思是索引节点(index node)。
在每个linux存储设备或存储设备的分区(存储设备可以是硬盘,软盘,U盘...)被格式化为ext4(CentOS6.8)⽂件系统后,⼀般⽣成两部分:第⼀部分是Inode(很多个),第⼆部分是Block(很多个)。
这个Block是⽤来存储实际数据⽤的,例如:照⽚,视频等普通⽂件数据。
⽽inode就是⽤来存储这些数据属性信息的(也就是ls -l的结果),inode属性信息包括不限于⽂件⼤⼩,属主(⽤户),归属的⽤户组,⽂件权限,⽂件类型,修改时间,还包含指向⽂件实体的指针功能(inode节点--block的对应关系)等,但是,inode⾥⾯唯独不包含⽂件名本⾝
*⾝份证号 ==== inode号
⾝⾼体重三围有没有头发(属性)====inode*
Inode除了记录⽂件属性的信息外,还会为每个⽂件进⾏信息索引,所以就有了inode的数值。
操作系统根据指令,即可通过inode的值最快的找到相对应的⽂件实体。
⽂件,inode,block之间的关系见下图:
为了能让⼤家更形象的理解,我举个例⼦。
假如有⼀本书,存储设备和分区就相当于这本书,Block相当于书中的每⼀页内容,
⽽inode就相当于这本书前⾯的⽬录,⼀本书有很多内容,⼀个知识点可能有多页,如果想查找某部分或某知识点的内容,我们⼀般先查书的⽬录,通过⽬录能更快的找到我们想要看的知识点的内容。
虽然不太恰当,但还是⽐较形象。
当我们⽤ls查看某个⽬录或⽂件时,如果加上-i参数,就可以看到inode节点了;
【root@chensiqi /】# ls -i
上图第⼀列inode值259615;查看⼀个⽂件或⽬录的inode,通过ls命令的-i参数即可。
因为inode要存放⽂件的属性信息,所以每个inode本⾝是有⼤⼩的,Centos5系列inode的默认⼤⼩是128字节,⽽Centos6系列inode 的默认⼤⼩是256字节,inode的⼤⼩在分区被格式化创建⽂件系统之后定下来的,格式化以后就⽆法更改inode⼤⼩,格式化前可以通过参数指定inode的⼤⼩,但是⼀般企业⼯作环境没这个需求。
不同Centos版本inode⼤⼩不同
查看⽂件系统inode总量以及剩余量
【root@chensiqi /】# df -i
查看磁盘使⽤量
[root@chensiqi /]# df -h
Inode:存放⽂件的属性+⽂件内容的位置(block的位置) df - l 查看使⽤量
Block:存放实际数据
1.2.2 企业案例模拟:
模拟磁盘满的情况
磁盘满的⼀个特征(no space left on device)
1.block 满了磁盘空间满了
2.inode 满了创建⼀个⽂件就需要⼀个inode
1.2.3 有关inode的⼩结
学会给阶段性的知识做⼩结是学好linux运维的好习惯。
1. 诞⽣:磁盘被分区并格式化为ext4⽂件系统后,会⽣成⼀定数量的inode和block
2. inode称为索引(⽬录)节点,它的作⽤是存放⽂件的属性信息以及作为⽂件的索引(指向⽂件的实体block)
3. ext3/ext4 ⽂件系统的block 存放的是⽂件的实际内容(数据)。
4. inode是磁盘上的⼀块存储空间,CentOS6⾮启动分区inode默认⼤⼩256字节,CentOS5是128字节
5. inode的表现是形式⼀串数字,不同的⽂件对应的inode(⼀串数字)在⽂件系统⾥是唯⼀的。
6. inode节点号相同的⽂件,互为硬链接⽂件,可以认为是⼀个⽂件的不同⼊⼝。
7. ext3/ext4⽂件系统下,⼀个⽂件⾄少要占⽤⼀个inode和⼀个block。
(⽂件size⽐较⼤)
8. ext3/ext4⽂件系统下,正常情况⼀个⽂件占⽤且只能占⽤⼀个inode(⼈和⾝份证号)
9. block是⽤来存储实际数据的,每个block的⼤⼩⼀般有1k,2k,4k⼏种。
其中引导分区等为1k,其他普通分区多为4K(CentOS6)
10. 如果⼀个⽂件很⼤(⾼清⼤⽚4G),需要占⽤多个block,如果⽂件很⼩(0.01k),⾄少占⼀个block,并且这个block的剩余空间就
浪费了,即⽆法在存储其他数据
1.2.4 有关Block的知识⼩结
1. 磁盘读取数据是按block为单位读取的
2. ⼀个⽂件可能占⽤多个block。
每读取⼀个block就会消耗⼀次磁盘I/O
3. 如果要提升磁盘I/O性能,那么就要尽可能⼀次性读取数据尽量的多。
4. ⼀个block只能存放⼀个⽂件的内容,⽆论内容多⼩。
如果block默认是4K⼤⼩,那么存放⼀个1K的⽂件,剩余3K就不能存放别的⽂
件,只能浪费了
5. Block并⾮越⼤越好。
Block太⼤对于存放⼩⽂件就会浪费磁盘空间,例如:1000K的⽂件,Block⼤⼩为4K,占⽤250个Block,如果
Block默认为1K,则需要占⽤1000个Block。
访问效率谁更⾼?消耗I/O分别为250次和1000次。
6. 根据业务需求,确定默认的block⼤⼩,如果是⼤⽂件(⼤于16K)⼀般设置block⼤⼀点,⼩⽂件(⼩于1K)⼀般设置block⼩⼀点
7. block太⼤,例如4K,⽂件都是0.1K的,⼤量浪费磁盘空间,但是访问性能⾼
8. block太⼩,例如1K,⽂件都是1000K,消耗⼤量磁盘I/O
9. 企业⾥⽂件都会⽐较⼤(⼀般会⼤于4K),block设置⼤⼀些会提升磁盘访问效率。
10. ext3/ext4⽂件系统(CentOS5和CentOS6),⼀般都设置为4K。
当前的⽣产环境⼀般设置为4K,特殊的业务,如视频可以加⼤block⼤⼩
Block块越⼤对于单个的⼩⽂件多(0.5K)的业务,会⾮常浪费空间,因为,⼀个⽂件⽆论多⼤都会必须占⽤⾄少⼀个
inode和⼀个block,磁盘读取数据是按Block为单位读取的,但是对于⼤⽂件,可以提升读取的效率,因为如果block太⼩,
就要读多个block,这样就消耗磁盘I/O,如果block⼤,则会读较少的aBlock就读完数据,从⽽减少磁盘I/O
Block块太⼩⼜会影响硬盘读取⼤⽂件数据的效率,Block块越⼩,同样存储⼀个⽂件就需要更多的Block,这样硬盘读取数
据时就要读取多个block,因此效率就越低。
Block分⼤了,浪费空间,分⼩了,影响磁盘读取性能
1.2.5 inode与block总的⼩结
1. 磁盘被分区格式化⽂件系统后,会分为inode和block两部分内容
2. inode存放⽂件的属性以及指向⽂件实体的指针(block的位置),⽂件名不在inode⾥,⼀般在上级⽬录的block⾥
3. 访问⽂件的过程,通过⽂件名(上⼀级⽬录的block)--->inode--->blocks
4. inode centos6⼀般情况默认⾮启动分区⼤⼩256B,block⼤⼩1,2,4K,默认是4K,注意,引导分区等特殊分区除外
5. 通过df -i 查看inode的数量及使⽤情况,dumpe2fs /dev/sda3 查看inode及block的⼤⼩及数量
6. ⼀个⽂件⾄少要占⽤⼀个inode及⼀个block,多个⽂件可以占⽤同⼀个inode(硬链接),相同⽂件
7. ⼀个block只能被⼀个⽂件使⽤,如果⽂件很⼩block很⼤,剩余空间浪费,⽆法继续被其他⽂件使⽤
8. block不是越⼤越好,要根据业务的⽂件⼤⼩进⾏选择,⼀般CentOS6就是默认4K
9. 可以在格式化的时候改变inode及block的⼤⼩
1.2.6 企业⾯试题⼀:
⼀个100M(100000K)的磁盘分区,分别写⼊1K的⽂件或写⼊1M的⽂件,分别可以写多少个?
1K⽂件虽⼩,但是block⼀般默认4K,即使1K的数据也会占⽤4K⼤⼩,⽐如⼤家创建⼀个空⽂件,然后du -sk 看看⼤⼩是
多少。
(如果⼤家此时认为应该100000/4的话,那么你就掉坑了-_-!别忘了存储数据,消耗的不光是block还有
inode,inode默认只有256K(centos6),每个⽂件⾄少占⽤⼀个block的同时还会占⽤⼀个inode)
1M的数据他刚好能被4整除。
所以不会浪费空间,⼤约为100个左右,inode充⾜。
总上对于⼤⽂件⼀般inode是⾜够的,⼤⽂件基本也不会浪费空间,整除就可以;但是对于⼩⽂件来说,inode是不⾜够
的,因此能够存储的数量就是inode的数量
1.27 企业⾯试题⼆:
如果向磁盘写⼊数据提⽰如下错误:No space left on device,通过df -h查看磁盘空间,发现没满,请问可能原因是什么?企业场景什么情况下会导致这个问题发⽣?
磁盘没满但是不能卸乳⽂件,最可能的原因就是inode被耗尽了
企业⼯作中邮件临时队列/var/spool/clientmquene或/var/spool/postfix/maildrop这⾥很容易被⼤量⼩⽂件占满导致No space
left on device的错误。
clientmquene⽬录只有安装了sendmail服务,才会有,是sendmail的临时队列。
centos5.8默认就会
装sendmail,centos6默认没有sendmail,但是有postfix
1.3⽂件类型及⽂件扩展名
1.3.1 ⽂件类型介绍
windows扩展名让系统区分不同⽂件类型,扩展名错误导致⽂件⽆法打开。
linux通过扩展名让⼈区分⽂件类型,为了易读,错误也可以正常使⽤
例如:
windows图⽚⽂件扩展名:jpg,jpeg,png,gif等
⽂本⽂件扩展名:doc,docx,txt,pdf
1.3.2 Linux中的⽂件类型
对于这⾥我不想说太多,因为实在感觉对于实际应⽤意义不⼤,⼤家只需要知道通过ls -l查看⽬录的时候,
1,如果权限那⾥是-rw--r--r--,第⼀个字符是‘-’就代表是普通⽂件
2,如果第⼀个字符是d例如drw--r--r--.就代表是个⽂件夹
3,如果第⼀个字符是l例如lrw--r--r--,就代表是个软链接
1.3.3 软连接
软连接⽂件可通过:
ln -s 源⽂件名新⽂件名的⽅式来创建(如果不使⽤-s,则会创建硬链接,但不适合⽬录)
这个软连接和windows的快捷⽅式是相似的。
1.3.4 Linux下扩展名的作⽤
在linux中,虽然扩展名没什么意义,但是为了兼容windows,同时,便于我们⼤多数windows⽤户区分⽂件的不同,所以,我们还是习惯通过扩展名来表⽰不同⽂件的类型。
如下:
1. tar,tar.gz,tgz,zip,tar.bz表⽰压缩⽂件,创建命令⼀般为tar,gzip,unzip等
2. .sh表⽰shell脚本⽂件,通过shell语⾔开发的程序
3. .pl表⽰perl语⾔⽂件,通过perl语⾔开发的程序
4. .py表⽰python语⾔⽂件,通过python语⾔开发的程序
5. .html,.htm,.php,.jsp,.do表⽰⽹页语⾔的⽂件
6. .conf表⽰系统的配置⽂件
7. .rpm表⽰rpm安装包⽂件
1.4 知识扩展(企业实际经验)
问题: Linux⽂件系统如何选择?
通过综合使⽤多种标准⽂件系统Benchmarks对Ext3,Ext4,Reiserfs,XFS,JFS,Reiser4的性能测试对⽐,对不同应⽤选择合适的⽂件系统给出以下⽅案,供⼤家参考。
1. ⼤量⼩⽂件(LOSF,Lost of small files)I/O应⽤(如⼩图⽚)
Reiserfs(⾸选),Ext4⽂件系统适合这类负载特征,IO调度算法选择deadline,block size=4096,ext4关闭⽇志功能
reiserfs mount参数:-o defaults,async,noatime,nodiratime,notail,data=writeback
ext4 mount参数:-o defaults,async,noatime,nodiratime,data=writeback,barrier=0
关闭ext4⽇志:tune2fs -O^has_joumal /dev/sdXX
2.⼤⽂件I/O应⽤(如视频下载,流媒体)
EXT4⽂件系统适合此类负载特征,IO调度算法选择anticipatory,block size=4096,关闭⽇志功能,启⽤extent(default)mount参数:-o defaults,async,noatime,nodiratime,data=writeback,barrier=0
关闭ext4⽇志:tune2fs -O^has_joumal /dev/sdXX
3.SSD⽂件系统选择
EXT4/Reiserfs可以作为SSD⽂件系统,但未对SSD做优化,不能充分发挥SSD性能,并影响SSD使⽤时间
Btrfs对SSD作了优化,mount通过参数启⽤。
但Btrfs扔处于试验阶段,⽣产环境谨慎使⽤
JFFS2/Nilfs2/YAFFS是常⽤的flash file system,在嵌⼊式环境⼴泛应⽤,建议使⽤。
性能⽬前还未作测试评估
简单分析⼀下选择Reiserfs和ext4⽂件系统的原因
1、Reiserfs
⼤量⼩⽂件访问,衡量指标是IOPS,⽂件系统性能瓶颈在于⽂件元数据操作、⽬录操作、数据寻址。
reiserfs对⼩⽂件作了优化,并使⽤B+ tree组织数据,加速了数据寻址,⼤⼤降低了open/create/delete/close等系统调⽤开销。
mount时指定
noatime,nodiratime,notail,减少不必要的inode操作,notail关闭tail package功能,以空间换取更⾼性能。
因此,对于随机的⼩I/O读写,reiserfs是很好的选择。
2、Ext4
⼤⽂件顺序访问,衡量指标是IO吞吐量,⽂件系统性能瓶颈在于数据块布局(layout)、数据寻址。
Ext4对ext3主要作了两⽅⾯的优化:
⼀:是inode预分配。
这使得inode具有很好的局部性特征,同⼀⽬录⽂件inode尽量放在⼀起,加速了⽬录寻址与操作性能。
因此在⼩⽂件应⽤⽅⾯也具有很好的性能表现。
⼆:是extent/delay/multi的数据块分配策略。
这些策略使得⼤⽂件的数据块保持连续存储在磁盘上,数据寻址次数⼤⼤减少,显著提⾼I/O吞吐量。
因此,对于顺序⼤I/O读写,EXT4是很好的选择。
另外,XFS性能在⼤⽂件⽅⾯也相当不错。