linux的文件属性(一)

1.linux的文件属性

Linux系统里一切皆文件!

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

执行ls -lih命令的结果:

[root@centos6 ~]# ls -lih

total 52K

273914 -rw-r--r--. 1 root root    8 May 16  2018 123.log

273899 -rw-------. 1 root root 1.1K May 15  2018 anaconda-ks.cfg

261150 drwxr-xr-x. 2 root root 4.0K Apr 16 01:18 cheshi

261124 -rw-r--r--. 1 root root  22K May 15  2018 install.log

261125 -rw-r--r--. 1 root root 5.8K May 15  2018 install.log.syslog

273901 drwxr-xr-x. 7 root root 4.0K Apr 15 00:23 oldboy

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

第二列:文件类型及权限(共有11个字符,第1个字符代表文件类型,后9个字符为文件权限,最后一个字符.selinux相关的标识):

第三列:硬链接个数;

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

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

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

第七、八、九列:文件或目录的修改时间;

第十列:文件名或目录名(文件名不算文件的属性);

2. 索引节点号inode

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

   创建文件系统会生成两部分:1.Inode(很多个)存储数据属性信息,inode主要包括件类型、权限属性、链接数、所归属的用户和所属组、最近修改时间,还包含指向文件实体的指针的功能(inode节点--block的对应关系)等,但不包括文件名 2.Block(很多个)

 sata查看指定文件属性   

[root@centos6 ~]# stat /etc/passwd

  File: `/etc/passwd'

  Size: 1056            Blocks: 8          IO Block: 4096   regular file

Device: 803h/2051d      Inode: 10896       Links: 1

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

Access: 2018-05-15 21:00:25.133999712 +0800

Modify: 2018-05-15 21:00:25.124999713 +0800

Change: 2018-05-15 21:00:25.126999712 +0800

 查看当前目录下的inode

[root@centos6 ~]# ls -i

273914 123.log          261150 cheshi       261125 install.log.syslog

273899 anaconda-ks.cfg  261124 install.log  273901 oldboy  

因为inode要存放文件的属性信息,所以每个inode本事是有大小的,CentOS5默认是128字节,CentOS6,默认是256字节,inode的大小在分区被格式化创建文件之前定下来的。

  [root@centos6 ~]# dumpe2fs /dev/sda1|grep -i "inode size"

dumpe2fs 1.41.12 (17-May-2010)

Inode size:               128

  [root@centos6 ~]# dumpe2fs /dev/sda3|grep -i "inode size"

dumpe2fs 1.41.12 (17-May-2010)

Inode size:               256

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

[root@centos6 ~]# df -i

Filesystem     Inodes IUsed  IFree IUse% Mounted on

/dev/sda3      579360 55370 523990   10% /

tmpfs          126507     1 126506    1% /dev/shm

/dev/sda1       51200    38  51162    1% /boot

磁盘空间是否存满,是由两项参数决定的:

1. inode是否满了 2.block是否满了 任何一项满了,都无法存放数据

磁盘满了的特征(no space left on device)

有关inode的小结:

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

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

3. ext3/ext4文件系统的block存放的是文件的实际内容。

4. inode是磁盘上的一块存储空间,entOS5默认是128字节,CentOS6,默认是256字节。

5. inode的表现形式一串数字,不同的文件对应的inode在文件系统是唯一的。

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

7. ext3/ext4文件系统下,一个文件被创建后至少要占用一个inode

8. ext3/ext4文件系统下,正常情况一个文件占用且只能占用一个inode

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

10. 如果一个文件很大(10G),需要占多个block,如果文件很小(0.01K),也需要占一个block,并且这个block的剩余空间就浪费了,即无法在存储其他的数据。

11. inode大小和总量查看

dumpe2fs /dev/sda3|egrep -i "block size|Inode size"

dumpe2fs /dev/sda3|egrep -i "block count|inode count"

默认block count大于inode count的数量

12. 查看inode的总量和使用量

命令 df -i

13. 查看文件inode信息的方法

ls -li或者stat /etc/passwd

14. 如何生成指定的inode大小

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

有关Block的知识:

1. 磁盘读取数据是按block为单位读取

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

3. 如果要提升磁盘I/O性能,那么尽可能一次性读取数据尽量多

4. 一个block只能存放一个文件内容,无论内容有多小。

5. Block并非越大越好,block太大对于存放小文件存放就会浪费磁盘空间

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

7. block太大 例如4K,文件都是0.1K的,大量浪费磁盘空间,但是访问性能会提高

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

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

10. 企业里文件都会比较大(大于4K),block设置大一些会提升磁盘访问效率

11. ext3/ext4文件系统,一般都设置为4K。

文件删除恢复ext3grep,应该养成好的习惯,先备份再操作,万一出错要能快速还原,不容易还原的,先通过测试环境测试,然后再操作。

    

案例:

1.一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别可以写入多少个?

     inode是存放文件属性信息的(也包含指向文件实体的指针),centos6默认是256字节

     block是存放文件实际内容的,默认大小1K(boot)或4K(非系统分区默认给4K)

     一个文件至少要占用一个inode及一个block

默认情况下,inode数量是足够的,而block数量消耗的会更快。

2. 如果磁盘写入数据提示错误no space left on device,通过df -h查看磁盘空间发现没满,请问是什么原因?什么情况下会导致这个问题发生?

答:可能是inode数量被占满,发生的原因小文件太多。

猜你喜欢

转载自blog.csdn.net/qq_41816540/article/details/80358684