文件系统和日志分析

69 阅读10分钟

日志 内核及系统日志由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf

Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下

Inode和block

文件是存储在硬盘上的,硬盘的最小存储单位叫做"扇区”,每个扇区存储512字节

  • block(块):一般连续八个扇区组成一个"块",一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
  • inode:每个文件都有一个inode号码,操作系统用inode号码来识别不同的文件。inode不包含文件名。

文件数据包括实际数据元信息文件数据存储在block中,文件元信息存在inode中。而文件名是存放在目录当中的。 因此,一个文件必须占用一个inode,并且至少占用一个block。
Linux系统中一切皆文件,因此目录也是一种文件。
Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码使于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。

访问文件过程

image.png

  1. 用户在Linux系统中试图访问一个文件
  2. 系统会先根据文件名去查找它对应的inode号码
  3. 通过inode号码,获取inode信息
  4. 根据inode信息,看该用户是否具有访问这个文件的权限
  5. 如果有权限,就指向相对应的数据block,并读取数据;如果没有权限,拒绝访问

查看inode号的方法

  • ls -i命令:查看文件名对应的inode号码
    ls -i 文件名

image.png

  • stat命令:查看文件inode信息中的inode号码
    stat 文件名

image.png

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

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

inode号数量有限

每个文件系统(分区)中inode号数量是有限的,可使用df -i查看。
tips:inode号也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。

image.png

inode号被占满

  1. 建立一个新的分区 image.png

  2. 创建足够多的文件将inode号占满

  3. inode号已经被占满

  4. 此时无法再在该分区创建文件

Linux系统中特殊现象

由于inode号码与文件名分离,Linux系统有以下几种特有现象:

  1. 文件名包含特殊字符,可能无法正常删除。这时根据inode删除,能够起到删除文件的作用
  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码
  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名
  4. 使用vi编辑器修改文件数据保存后,会生成一个新的inode号码

文件名包含特殊字符,无法正常删除文件

如果rm 文件名删除不了文件,可通过inode号删除文件(通过find查找删除)。

文件名包含特殊符号,不好删除

image.png

vi编辑器修改文件数据生成一个新的inode号码的原因

原因:在编辑文件时,会有一个.文件名.swp的隐藏文件,当保存退出后,该文件会替代原文件。

  1. 创建一个新的文件 image.png
  2. vim编辑该文件,发现该目录下多了个.123.swp的文件 image.png
  3. 保存退出,发现文件123的inode号改变 image.png
  4. 发现.123.swp的文件已经消失 image.png

恢复EXT类型文件

操作前的准备:(ext4只能在centos6中,实验用ext3)
编译安装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

模拟删除并执行恢复操作

  1. 安装依赖包 image.png
  2. 建立新分区,格式化,挂载 image.png image.png
  3. 编译安装 image.png image.png
  4. 如果出现下图所示问题,那是因为gcc组件不完整,执行安装。 执行yum install gcc gcc-c++即可 image.png image.png image.png
  5. 建立extundelete软链接 image.png
  6. 建立几个新文件 image.png
  7. 查看文件系统/dev/sdb2下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录 image.png image.png
  8. 删除文件 image.png image.png
  9. 发现有文件被删除,先解挂载,以免后面写入的数据覆盖 image.png
  10. 输入该文件恢复命令,发现当前目录多了RECOVERED_FILES,这里面包含被恢复的文件,数据也还在文件内 image.png image.png

xfs类型文件备份和恢复

CentOS 7系统默认采用xfs类型的文件,xfs类型的文件可使用xfsdump与xfsrestore工具进行备份恢复。
xfsdump的备份级别有两种:0表示完全备份;1-9表示增量备份。xfsdump的备份级别默认为0。

  • 完全备份:指备份你所指定的所有文件,不管它以前有没有备份过
  • 增量备份:指只备份新增加的文件或者内容发生变化的文件

xfsdump 的命令格式为:xfsdump -f 备份存放位置 要备份文件的路径或设备

xfsdump命令常用的选项

选项作用
-f指定备份文件目录
-L指定标签session label
-M指定设备标签media label
-s备份单个文件,-s 后面不能直接跟路径

xfsdump使用限制

  1. 只能备份己挂载的文件系统
  2. 必须使用root的权限才能操作
  3. 只能备份XFS文件系统
  4. 备份后的数据只能让xfsrestore解析
  5. 不能备份两个具有相同UUID的文件系统(可用blkid命令查看)

备份过程

  1. 创建分区,格式化,建立文件系统,挂载 image.png image.png image.png
  2. 复制文件和创建目录及文件 image.png
  3. 开始备份操作 image.png image.png image.png
  4. 完成操作 image.png
  5. 删除分区中所有目录和文件 image.png
  6. 进行恢复操作 image.png
  7. 回到被删文件的分区,发现数据已复原 image.png
备份操作的选项

用了标签可直接完成操作,不用交互。

选项作用
-L指定标签
-M指定备份的设备标签

日志文件

日志的作用

日志文件是用于记录Linux系统中各种运行消息的文件,相当于Linux主机的日记”。(用于记录系统、程序运行中发生的各种事件)
日志文件对于诊断和解决系统中的间题很有帮助。通过阅读日志,有助于诊断和解决系统故障日志文件的分类,系统一旦出现问题时及时分析日志就会有据可寻。

日志文件的分类

  • 内核及系统日志

    • 由系统服务rsyslog统一进行管理,日志格式基本相似
    • 主配置文件/etc/rsyslog.conf
  • 用户日志:记录系统用户登录及退出系统的相关信息

  • 程序日志:由各种应用程序独立管理的日志文件,记录格式不统一

日志的保存位置及主要日志文件

默认保存位置:/var/log

主要日志文件位置记录信息
内核及公共消息日志./var/log/messages记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等
计划任务日志./var/log/cron记录crond计划任务产生的事件信息
系统引导日志./var/log/dmesg记录Linux系统在引导过程中的各种事件信息
邮件系统日志./var/log/maillog记录进入或发出系统的电子邮件活动
用户登录日志./var/log/lastlog记录用户认证相关的安全事件信息

内核及系统日志

系统由rsyslog所定的规则,将日志写到对应文件,规则在rsyslog.conf配置文件中。

查看rsyslog.conf配置文件
规则配置格式:[设备.级别 动作] image.png image.png

设备字段说明

设备字段作用
auth用户认证时产生的日志
authprivssh、ftp等登录信息的验证信息
daemon一些守护进程产生的日志
ftpFTP产生的日志
lpr打印相关活动
markrsyslog服务内部的信息,时间标识
news网络新闻传输协议(nntp)产生的消息
syslog系统日志
uucpUnix-to-Unix copy两个unix之间的相关通信
console针对系统控制台的消息
cron系统执行定时任务产生的日志
kern系统内核日志
local0~local7自定义程序使用
mail邮件日志
user用户进程

Linux系统内核日志消息的优先级别
数字等级越小,优先级越高,消息越重要

数字等级英文标识作用
0emerg(紧急)会导致主机系统不可用的情况。如系统崩溃
1alert(警告)必须马上采取措施解决的问题。如数据库被破坏
2crit(严重)比较严重的情况。如硬盘错误,可能会阻碍程序的部分功能
3err(错误)运行出现错误。不是非常紧急,尽快修复的
4warning(提醒)可能影响系统功能,需要提醒用户的重要事件。不是错误,如磁盘用了85%等
5notice(注意)不会影响正常功能,但是需要注意的事件
6info(信息)一般信息
7debug(调试)程序或系统调试信息等
none没有优先级,不记录任何日志消息

例子解释

  • “mail.info /var/log/maillog”比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中
  • “mai1.-info /var/log/maillog”明确指定日志级别为info,保存至/var/log/maillog
  • “mail.!info /var/1og/maillog”除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog
  • “* .info /var/log/maillog”所有facility的info级别,保存至/var/log/maillog
  • “mail.* /var/log/maillog”mail的所有日志级别信息,都保存至/var/loq/maillog
  • “mail.notice;news.info /var/log/maillog”mail的notice以上记得日志级别和news的info以上的级别保存至/vax/1og/maillog
  • “mail,news.crit -/var/log/maillog”mail和news的crit以上的日志级别保存/var/log/maillog中;"-"代表异步模式

日志记录的一般格式 image.png

用户登录日志

保存了用户登录、退出系统等相关信息

  • /var/log/secure:与用户验证相关的安全性事件
  • /var/log/lastlog:最近的用户登录事件
  • /var/log/wtmp:用户登录、注销及系统开、关机事件
  • /var/run/utmp:当前登录的每个用户的详细信息

分析工具

  • users、who、w、last、lastb image.png
  • last命令用于查询成功登录到系统的用户记录 image.png
  • lastb命令用于查询登录失败的用户记录 image.png

程序日志

由相应的应用程序独立进行管理
Web服务:/var/log/httpd/

  • 记录客户访问事件:access_log
  • 记录错误事件:error_log

日志管理策略

  • 及时作好备份和归档

  • 延长日志保存期限

  • 控制日志访问权限

    • 日志中可能会包含各类敏感信息,如账户、口令等
  • 集中管理日志

    • 将服务器的日志文件发到统一的日志文件服务器

    • 便于日志信息的统一收集、整理和分析

    • 杜绝日志信息的意外丢失、恶意篡改或删除