文件系统结构

文件系统结构

Linux文件系统由三部分组成 : 文件名,inode,block

Linux文件系统: ext3,ext4,xfs

windows文件系统: FAT32,NTFS

文件名:

[root@xuegod63 ~]# cp /etc/passwd a.txt

[root@xuegod63 ~]# ls a.txt  # a.txt 就是文件名

 inode的内容

inode包含文件的元信息,具体来说有以下内容:

  * 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

  * 文件的读、写、执行权限

  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  * 链接数,即有多少文件名指向这个inode

  * 文件数据block的位置

可以用stat命令,查看某个文件的inode信息:

[root@xuegod63 ~]# stat a.txt

  File: ‘a.txt’

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

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

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access最近访问时间: 2018-05-16 14:55:36.061095050 +0800

Modify最近更改时间: 2018-05-16 14:55:36.062095050 +0800

Change最近改动时间: 2018-05-16 14:55:36.062095050 +0800

 Birth创建时间: -

[root@xuegod63 ~]#  ll /etc/passwd  #ll 其实就是查看passwd的inode信息

-rw-r--r--. 1 root root 2053 Sep 19  2017 /etc/passwd  #ll查看到时间是ctime时间

互动:

ctime是什么?  是创建时间吗? 不会:1

mtime : modify time  修改文件内容的时间

atime  : access time   访问文件内容的时间

ctime指inode上一次文件属性变动的时间,change time 。 比如: chmod +x  a.sh

mtime指文件内容上一次变动的时间,modify time  。如:echo aa >> a.sh 或vim  a.sh 修改内容

atime指文件上一次查看文件的时间,access time 。 如:  cat  a.sh

例2:测试mtime时间,黑客先修改时间,再植入木马程序,防止 find / -mtime 查看木马文件

[root@xuegod63 ~]# stat a.txt  #查看时间

[root@xuegod63 ~]# date -s '13:42'

[root@xuegod63 ~]# vim a.txt   #写入aaaa,vim会修改mtime和atime时间

[root@xuegod63 ~]# stat a.txt  #查看时间

[root@xuegod63 ~]# chmod +x a.txt  #修改ctime,有时黑客忘记修改ctime时间了,所以你可以find / -ctime 查看木马文件

[root@xuegod63 ~]# stat a.txt  #查看时间

inode的大小

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

inode号码

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

 Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

例1: 使用ls -i命令,可以看到文件名对应的inode号码

[root@xuegod63 ~]# ls -i a.txt

440269 a.txt

例2:查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。

[root@localhost ~]# df -i

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/sda2             640848  151010  489838   24% /

tmpfs                 145579       1  145578    1% /dev/shm

/dev/sda1              51200      38   51162    1% /boot

注:由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

目录文件

Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。 

目录文件的结构非常简单,就是一系列目录项的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

[root@xuegod63 ~]# ls -id /etc

8388673 /etc

例:ls -i命令列出整个目录文件,即文件名和inode号码:

[root@xuegod63 ~]# ls -i /etc

block块大小

block 是真正存储数据的地方。

block文件系统 中最小的存储单位

扇区 是  磁盘 中最小的存储单位

image.png

在linux下中叫:block,在windows中叫:簇

互动:为什么要有block,直接使用扇区可以吗?

操作系统读取硬盘的时候,不会一个个扇区(512字节)地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是1KB,即连2个 sector扇区组成一个 block。或4K。

情景: 如果没有block? 会怎么样?

夜深人静,下了3.6G  cang.avi 的电影,一次读512B , 寻址次太多,太慢了。。。 

结果。。。你懂得 。。。?

结果:  avi看成了 jpg

例1:格式化修改磁盘,修改簇大小

image.png


实战:簇和block大小设定

image.png

簇和block调大:

优点: 速度快,节约寻址时间,缺点:空间浪费

比如: 2T硬盘, 前1.5T,使用4K, 把剩下的500G格式化成64K簇。用空间换时间

例2:查看Linux系统块大小

[root@xuegod63 ~]# stat /etc/passwd | grep IO

大小:2053       块:8          IO 块:4096 普通文件

#block到是4K

总结:

硬盘的结构:ZBR 区位记录

inode(inode表中主要看inode号)

inode号唯一标识一个文件(一个文件系统里面)

inode用完了,文件就不能创建了。

inode数据量设置大一些:可以创建多个文件。占用空间比较大

inode数据量设置小一些:可以创建很少文件。占用空间比较小

block

block设置大:效率高,利用率低。

block设置小:效率低,利用率高。

版权声明:
作者:WaterBear
链接:https://l-t.top/1433.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>