Linux文件系统与日志分析

一、inode和block

Ⅰ.概述

  • 文件数据包括元信息与实际数据
  • 文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
  • block(块)
    连续的八个扇区组成一个block(4K)
    是文件存取的最小单位
  • inode(索引节点)
    中文译名为“索引节点”,也叫i节点:用于存储文件元信息
  • 操作系统读取硬盘的时候,是一次性连续读取多个扇|区,即一个块一个块的读取的。
    文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在"块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode一个文件必须占用一个 inode,并且至少占用一个block
元信息 ---> inode
数据 ---> block

Ⅱ.inode

  1. erinode不包含文件名。文件名是存放在目录当中的。Linux系统中一切皆文件,因此目录也是一种文件。
  2. 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
  3. 当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息,根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。
  4. 查看文件名对应的inode号码有两种方式:ls -i 文件名 ;stat 文件名

Ⅲ、inode包含文件的元信息

  • 文件的字节数
  • 文件拥有者的User ID
  • 文件额Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳
  • 用stat命令可以查看某个文件的inode信息:

目录文件结构:目录也是一种文件

文件名1 inode号码1
文件名2 inode号码2
...... ......

Ⅳ、inode的号码

  • 用户通过文件名打开文件时,系统内部的过程
  1. 系统找到这个文件名对应的inode号码
  2. 通过inode号码,获取inode信息
  3. 根据inode信息,找到文件数据所在的block,读出数据
  4. 查看inode号码的方法
    • ls -i命令:查看文件名对应的inode号码
      ls -i aa.txt
    • ostat命令:查看文件inode信息中的inode号码
      stat aa.txt

Ⅴ、文件存储小结

硬盘分区后的结构

文件日志1.png

访问文件的简单流程

文件日志2.png

文件日志3.png

Ⅵ、inode的大小

  • inode也会消耗硬盘空间:
    每个inode的大小
    —般是128字节或256字节
  • 格式化文件系统时确定 inode 的总数
  • 使用 df -i 命令可以查看每个硬盘分区的 inode 总数和已经使用的数量
  • 通常情况下不需要关注单个inode 的大小,而是需要重点关注inode总数。

二、硬链接与软链接

Ⅰ、创建硬链接

文件日志4.png

Ⅱ、创建软链接
  • 为文件或目录建立链接文件

  • 链接文件分类:

    软链接 硬链接
    删除源文件后 失效 仍旧可用
    适用范围 适用于文件或目录 只可用于文件
    保存位置 与原始文件可以位于不同的文件系统中 必须与原始文件在同一文件系统中(如Linux分区)内

三、恢复误删除的文件

Ⅰ、恢复XFS类型文件

CentOS 7系统默认采用xfs类型的文件,xfs类型的文件可使用xfsdump与xfsrestore 工具进行备份恢复。

  • xfsdump命令格式
xfsdump -f 备份存放位置 要备份的路劲或设备文件
  • xfsdump备份级别(默认为0)

xfsdump 的备份级别有两种: 0表示完全备份;**1-9表示增量备份**。

  • xfsdump 命令常用的选项:

    • -f:指定备份文件目录
    • -L:指定标签session label
    • -M:指定设备标签media label
    • -s:备份单个文件,-s后面不能直接跟路径
  • xfsdump使用限制:

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

    xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
Ⅱ、模拟删除并执行恢复操作

文件5.png
文件6.png

四、分析日志文件

Ⅰ、日志功能

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

Ⅱ、日志文件分类

内核及系统日志:

  • 由系统服务rsyslog统一进行管理,日志格式基本相似
  • 主配置文件/etc/rsyslog.conf

用户日志:

  • 记录系统用户登录及退出系统的相关信息

程序日志:

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

日志保存位置:默认位于/var/log/

常见日志文件:

  • 内核及公共消息日志:
    /var/log/messages:记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
  • 计划任务日志:
    /var/log/cron:记录crond计划任务产生的事件信息。
  • 系统引导日志:
    /var/log/dmesg:记录Linux系统在引导过程中的各种事件信息。
  • 邮件系统日志:
    /var/log/maillog:记录进入或发出系统的电子邮件活动。
  • 用户登录日志:
    /var/ log / secure:记录用户认证相关的安全事件信息。
    /var/log/lastlog:记录每个用户最近的登录事件。二进制格式
    /var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。二进制格式
    /var/run/btmp:记录失败的、错误的登录尝试及验证事件。二进制格式

Ⅲ、内核及系统日志

由系统服务 rsyslog 统一管理

  • 软件包:rsyslog-7.4.7-16.el7.x86_64
  • 主要程序:/sbin/rsyslogd
  • 配置文件:/etc/rsyslog.conf

日志消息级别

  • 设备字段
auth 用户认证时产生的日志
authpriv ssh、ftp等登录信息的验证信息
daemon 一些守护进程产生的日志
ftp FTP产生的日志
lpr 打印相关活动
mark rsyslog服务内部的信息,时间标识
news 网络新闻传输协议(nntp)产生的信息
syslog 系统日志
uucp Unix-to-Unix Copy 两个unix之间的相关通信
console 针对系统控制台的消息
cron 系统执行定时任务产生的日志
kern 系统内核日志
local0~local7 自定义程序使用
mail 邮件日志
user 用户进程
  • Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要)

    0 EMERG (紧急) 会导致主机系统不可用的情况。如系统崩溃
    1 ALERT(警告) 必须马上采取措施解决的问题。如数据库被破坏
    2 CRIT (严重) 比较严重的情况。如硬盘错误,可能会阻碍程序的部分功能
    3 ERR (错误) 运行出现错误。不是非常紧急,尽快修复的
    4 WARNING(提醒) 可能影响系统功能,需要提醒用户的重要事件。不是错误,如磁盘用了85%等
    5 NOTICE(注意) 不会影响正常功能,但是需要注意的事件。无需处理
    6 INFO (信息) 一般信息。正常的系统信息
    7 DEBUG(调试) 程序或系统调试信息等。包含详细开发的信息,调试程序时使用
    none 没有优先级,不记录任何日志消息

    例子:

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

Ⅳ、用户日志分析

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

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

分析工具

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

Ⅴ、程序日志分析

由相应的应用程序独立进行管理

  • Web服务:

    /var/log/httpd/
    access_log     //记录客户访问事件
    error_log      //记录错误事件
  • 代理服务:

    /varllog/squid/
    access.log
    cache.log
  • 分析工具:

    文本查看、grep过滤检索、VVebmin管理套件中查看awk、sed等文本过滤、格式化编辑工具
    oWebalizer、Awstats等专用日志分析工具

Ⅴ、日志管理策略

  • 及时做好备份和归档
  • 延长日志保存期限
  • 控制日志访问权限:日志中可能会包含各类敏感信息,如账户、口令等
  • 集中管理日志:
    • 将服务器的日志文件发到统一的日志文件服务器
    • 便于日志信息的统一收集、整理和分析
    • 杜绝日志信息的意外丢失、恶意篡改或删除

Ⅵ、配置日志服务器收集日志

  1. rsyslog是一个C/S架构,可以通过套接字来进行监听记录工作,可以基于TCP和UDP工作,默认的监听端口是514,只需要在MODULES打开即可。
  • 发送服务器:客户端 192.168.80.20
  • 收集服务器:服务端 192.168.80.30
  1. 关闭服务端和客户端防火墙

    selinux
    setenforce 0
    systemctl stop firewalld
    systemctl disable firewalld
  2. 修改客户端配置文件,并启动服务
vim /etclrsyslog.conf
MODULES
##将下面四行前的注释取消掉
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
RULES
##添加下列内容
$template myFormat,"%timestamp% %hostname%
%syslogseverity-text% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate myFormat
*.info;mail.none; authpriv.none;cron.none
@@ 192.168.80.30:514
#%timestamp%   #时间载
#%fromhost-ip%   #接收的信息来自于哪个节点的IP
%hostname%      #主机名
#%syslogseverity-text%    #日志等级
#%syslogtag%     #服务进程
#%msg%     #日志内容
#接收方IP前面一个e表示TCP传输,两个@表示UDP传输

systemctl restart rsyslog

修改服务器端配置文件,并启动服务

vim /etc/rsyslog.conf
##将下面四行前的注释取消掉
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514

##添加以下内容
$AllowedSender tcp,192.168.80.0/24
#允许192.168.80.0 网段内的主机以tcp协议来传输

 $template Remote, " /data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"

##定义模板,接受日志文件路劲,区分了不同主机的日志
:fromhost-ip, !isequal,“127.0.0.1” ?Remote  #过滤掉server 本机的日志
systemctl restart rsyslog

在服务端创建/data/log目录,以接受大量日志信息,配置文件中的路径应当与该路径一致

mkdir -p /data/log

验证:

客户端的终端命令行输入或者重启一个服务

logger “hello world”

在服务端查看日志文件

tree / data/log/

五、jorunalctl 命令

日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息。Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。297 白志的配置文件是/etc/systemd/journald.conf

Ⅰ、查看所有日志(默认情况下,只保存本次启动的日志)

journalctl
journalctl -r #一r表示倒序,从尾部看(推荐)

Ⅱ、

文件7.png

Ⅲ、查看系统本次启动日志

journalctl -b [-0]

Ⅳ、查看上一次启动的日志(需更改设置,如上次系统崩溃,需要查看日志时,就要看上一次的启动日志)

journalctl -b -1

Ⅴ、显示尾部指定行数的日志(查看的是/var/log/messages的日志,但是格式上有所调整,如主机名格式不一样而)

journalctl -n 20 [-f]

Ⅵ、查看某个服务的日志

journalctl -u nginx.service [-f]

Ⅶ、查看指定进程的日志

journalctl _PID=1

Ⅷ、查看指定用户的日志

journalctl_UID=0 --since today

journalctl -xe
  • -x 是目录(catalog)的意思,在报错的信息下会,附加解决问题的网址
  • -e pager-end 从末尾开始看