一起深入理解Linux文件系统与日志文件

深入理解Linux文件系统与日志文件

block与inode

inode和block概述

  • 文件数据包含元信息与实际数据,元信息存储inode,实际数据存储在block
  • 文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
  • inode不包含文件名。文件名是存放在目录当中的。Linux系统中一切皆文件,因此目录也是一种文件。
  • 每个inode都有一个号码,操作系统用inode号码来认别不同的文件。Linux系统内部不使用文件名,而使用inode号码来认别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
  • 所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码。通过inode号码,获取inode信息,根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据
  • block(块)
    • 连续的八个扇区组成一个block(4k)
    • 是文件存取的最小单位
      操作系统在读取硬盘时,是一次性连续读取多个扇区,即一个块一个块的读取
  • inode(索引节点)
    • 中文译名为“索引节点”,也称“i节点”
    • 用于存储文件元信息

inode的内容

  • inode包含文件的元信息
    • 文件的字节数
    • 文件拥有者的User ID
    • 文件的Group ID
    • 文件的读、写、执行权限
    • 文件的时间戳
    • 但不包含文件名
  • 用stat命令可以查看某个文件的inode信息
    例如:stat qz.txt
  • Linux系统文件三个主要的时间属性
    • ctime(change time)
      最后一次改变文件或目录(属性)的时间
    • atime(access time)
      最后一次访问文件或目录的时间
    • mtime(modify time)
      最后一次修改文件或目录(内容)的时间
  • 每个indoe都有一个号码,操作系统用inode号码来识别不同的文件
  • Linux系统内部不使用文件名,而使用Indoe号码来识别文件
  • 对于用户,文件名只是indoe号码便于识别的别称
  • 目录也是一种文件

inode的号码

  • 用户通过文件名打开文件时,系统内部的过程
    • 系统先找到这个文件名对应的inode号码
    • 通过indoe号码,获取inode信息
    • 根据inode信息,找到文件数据所在的block,读出数据
  • 查看inode号码的方法
    • ls -i(查看文件名对应的inode号码)
      例如:ls -i qz.txt
    • stat(查看文件inode信息中的inode号码)
      例如:stat qz.txt

inode的大小

  • inode也会消耗硬盘空间,每个inode的大小一般为128字节或256字节
  • 格式化文件系统时会确定inode的总数
  • 格式化的时候,操作系统会自动将硬盘分成两个区。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息
  • df -i(可以查看每个硬盘分区的inode总数和已经使用的数量)

inode的特殊作用

  • 由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
    1.当文件名包含特殊字符,可能无法正常删除文件,这时直接删除inode,能够起到删除文件的作用
    2.移动或重命名文件时,只改变文件名,不影响inode号码
    3.打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
    4.文件数据被修改后,会生成一个新的inode号码
  • 使用find命令可以删除inode号
    find ./ -inum 52201242 -exec rm -i {} ;
    find ./ - inum 55156844 -delete

inode节点耗尽故障处理

fdisk /dev/sdb
使用fdisk创建分区/dev/sdb1,因为实验用,所以分区大小30M即可
mkfs.ext4 /dev/sdb1
格式化(使用ext4文件类型,因为更准确)
mkdir /test
创建目录
mount /dev/sdb1 /mnt
挂载
df -i
查看
for ((i=1; i<=7680; i++));do touch /test/file$i;done
使用for命令通过循环的方式创建目录
touch {1…7680}.txt
或者使用touch命令创建目录
df -i
df -hT
查看还有多少空间
rm -rf /test/*
删除该文件后即可恢复
df -i
df -hT
查看

访问文件的流程示意图

用户访问文件 系统查找文件对应的inode 判断用户是否具备访问权限 指向对应的数据block 返回Permission denied

未完待续

未完待续

未完待续

未完待续

未完待续

硬链接与软链接

恢复误删除的文件

Linux主要包含的日志文件

Linux系统的日志消息级别

Linux系统中用户日志的查询命令

who

w

users

last

lastb

上一篇:linux下删除乱码文件、目录


下一篇:linux(日志)