Bootstrap

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

一、了解Linux

在处理Linux系统出现的各种故障时,故障的症状是最易发现的,而导致这一故障的原因才是最终排除故障的关键。熟悉Linux系统中常见的日志文件,了解一般故障的分析与解决办法,将有助于管理员快速定位故障点,“对症下药“、并及时解决各种系统问题。另外,Linux系统中通过分区、格式化来创建文件系统,而文件系统的运行又与 block 和 inode 有关。
下面深入的了解Linux系统的文件系统和日志文件分析,并通过一些实例介绍常见系统故障的分析与排除过程。由于故障现象的不确定性,在进行一些模拟故障的操作之前,一定要提前做好数据备份。

二、inode 和 block 概述

  • 文件数据包括元信息与实际数据
  • 文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
  • block(块)
    • 连续的八个扇区组成一个 block
    • 是文件存取的最小单位
  • inode(索引节点)
    • 中文译名为“索引节点”,也叫 i 节点
    • 用于存储文件元信息

在这里插入图片描述

操作系统的文件数据除了实际内容之外,通常含有非常多的属性,例如Linux操作系统的文件权限(rwx)与文件属性(所有者、群组、时间参数等)。文件系统通常会将这两个部分内容分别存放在 inode 和 block 中。

元信息:文件的属性用 ls 创建者属主权限的创建日期文件的大小

实际数据:就是文件编写的内容

8比特=1字节
1024字节=1KB

block(块)一个扇区是512字节
两个扇区是1024字节=1KB

4K在block中,字节(4k)为文件最小的存储单位
block(块)就是数据(=block(块)大小)

下标为索引节点(inode)

在这里插入图片描述
“drwx------. 15 dart dart 4096 4月 8 17:05 dart”为元信息(=文件的属性)(目录不算元信息)
数组、属主为权限

一个文件必须带有inode(inode不包含文件名)(必须至少占用一个block(块))
Linux一切皆文件
文件名存放在目录上(目录也是一种文件)
每个inode都会有一个inode号是用操作系统来识别不同文件
Linux内部不能使用文件名的,使用inode号来识别的
每一个inode号对应一个文件名

三、inode的内容

  • inode包含文件的元信息
    • 文件的字节数
    • 文件拥有者的User ID
    • 文件的大Group ID
    • 文件的读、写、执行权限
    • 文件的时间戳
    • ……
  • 用 stat 命令可以查看某个文件的 inode 信息
    • 示例:stat aa.txt
      在这里插入图片描述
      直接可以调看inode号
      在这里插入图片描述

      查询整个磁盘 df -i
      在这里插入图片描述

小结:

inode是节点
属于元信息(文件属性:大小、权限、时间戳)

block(块)的大小
数据文件:编写文件的内容

文件数据 存在块中
文件元信息 存在 inode

四、Linux系统文件三个主要的时间属性

  • ctime(change time)
    • 最后一次改变文件或目录(属性)的时间
  • atime(access time)
    • 最后一次访问文件或目录的大时间
  • mtime(modify time)
    • 最后一次修改文件或目录(内容)的时间

ctime 表示文件的状态时间
atime 表示文件访问的时间(只要文件内容被访问了,就会更新时间)
mtime 表示文件修改的时间(文件内容被修改了,就会更新时间)

五、inode 的内容

  • 目录文件的结构
    • 目录也是一种文件
    • 目录文件的结构
文件名1inode号码1
文件名2inode号码1
…………

每一行称为一个目录项

  • 每个 inode 都有一个号码,操作系统用 inode 号码来识别不同的文件
  • Linux 系统内部不使用文件名,而使用 inode 号码来识别文件
  • 对于用户,文件名只是 inode 号码便于识别的别称

六、inode的号码

  • 用户通过文件名打开文件时,系统内部的过程
    1、系统找到这个文件名对应的 inode号码
    2、通过 inode 号码,获取 inode 信息
    3、根据 inode 信息,找到文件数据所有的 block ,读出数据

  • 查看 inode 号码的方法

    • ls -i命令:查看文件名对应的 inode 号码
      在这里插入图片描述
    • stat 命令:查看文件 inode 信息中的 inode 号码

    在这里插入图片描述

移动不会改变 inode 号码

在这里插入图片描述

复制会变 inode 号码

在这里插入图片描述

删除inode号

find ./ -inum 134296860 查找inode号下的文件名
使用find 在当前目录下 去查找 i n(number) um(inum=去查找inode)

在这里插入图片描述

find ./ -inum 134296860 -exec rm - i {} \;
查到inode号通过 -exec命令调用把查到的结果放到 {} 中 通过 -exec命令调用杜记,用 rm -i 去删除 {} (节点号)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
删除了就找不到(获取不到)文件或目录了

文件名和inode号删除任意一种都行

在这里插入图片描述

文件存储小结

  • 硬盘分区后的结构
    在这里插入图片描述
  • 访问文件的简单流程

在这里插入图片描述

七、inode的大小

  • inode 也会消耗硬盘空间
    • 每个 inode 的大小
    • 一般是128字节或256字节
  • 格式化文件系统时确定 inode 的总数
  • 使用 df -i 命令可以查看每个硬盘分区的 inode 总数和已经使用的数量

inode号会消耗磁盘空间
格式化的时候,操作系统会分块,分两个区
一个为数据区
一个为inode区
通常情况下只关注inode有多少个(inode总数)
不关心inode大小

八、inode 的特殊作用

  • 由于 inode 号码与文件名分离,导致一些 Unix/Linux 系统具有以下的现象
    • 当文件名包含特殊字符,可能无法正常删除文件,直接删除 inode ,也可以删除文件
    • 移动或者重命名文件时,只改变文件名,不影响 inode 号码
    • 打开一个文件后,系统通过 inode 号码来识别该文件,不再考虑文件名

链接文件

  • 为文件或目录建立链接文件
  • 链接文件分类
软链接(又称符号链接)硬链接
删除原始文件后失效仍旧可用
使用范围适用于文件或目录只可用于文件
保存位置与原始文件可以位于不同的文件系统中必须与原始文件在同一个文件系统(如一个Linux分区)内
  • 硬链接
    ln 源文件 目标位置
  • 软链接
    ln [-s] 源文件或目标… 链接文件或目标位置

8.1 恢复EXT类型的文件

(案例)

  • 编译安装 extundelete 软件包

    • 安装依赖包
      e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm
      e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm

    • 配置、编译及安装
      extundelete-0.2.4.tar.bz2
      (只支持ext3、ext4)

  • 模拟删除并执行恢复操作

8.2 恢复XFS类型的文件

  • xfsdump 命令格式

    • xfsdump -f 备份存放位置 要备份的路径或设备文件
  • xfsdump备份级别(默认为0)
    0:完全备份
    1~9:增量备份

  • xfsdump常用选项:-f、-L、-M、-s

-f指定备份文件目录
-L指定标签session label
-M指定设备标签media labe……
-s备份单个文件,-s后面不能直接跟路径
  • xfsrestore 命令格式
    xfsrestore -f 恢复文件的位置 存放恢复后文件的位置

  • 模拟删除并执行恢复操作

8.3 xfsdump 使用限制

  • 只能备份已挂载的文件系统
  • 必须使用 root 的权限才能操作
  • 只能备份XFS文件系统
  • 备份后的数据只能让 xfsrestore 解析
  • 不能备份两个具有相同 UUID 的文件系统

九、日志文件

9.1 日志的功能

  • 用于记录系统、程序运行中发生的各种事件
  • 通过阅读日志,有助于诊断和解决系统故障

9.2 日志文件的分类

  • 内核及系统日志
    由系统服务 rsyslog 统一进行管理,日志格式基本相似
  • 用户日志
    记录系统用户登录及退出系统的相关信息
  • 程序日志
    由各种应用程序独立管理的日志文件,记录格式不统一

日志记录 内容包括
历史事件:时间,地点,人物,事件,日志级别

9.3 日志保存位置

  • 默认位于:/var/log 目录下

主要日志文件介绍

内核及公共消息日志· /var/log/messages
计划任务日志· /var/log/cron
系统引导日志· /var/log/dmesg
邮件系统日志· /var/log/maillog
用户登录日志· /var/log/lastlog; ·/var/log/secure ; ·/var/log/wtmp ;·/var/run/btmp
;