Linux文件系统与日志分析

1 inode和block

1.1 inode和block概述

  • 文件数据包括元信息与实际数据。

  • 文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节。

  • block(块)

    • 连续的八个扇区组成一个block
    • 是文件存取的最小单位
  • inode(索引节点)

    • 中文译名为“索引节点”,也叫 i 节点
    • 用于存储文件元信息
  • 一个文件必须占用一个inode ,至少占用一个block

1.2 inode和block关系

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

一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的

inode不包含文件名。文件名是存放在目录文件夹当中的。Linux 系统中一切皆文件,因此目录也是一种文件。

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个或多个文件名

 2 inode 详细介绍

2.2.1 inode 表结构

每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data)。

元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。

每一个inode表记录对应保存了文件的元信息:

  • inode number 节点号
  • 文件类型
  • 文件的读、写、执行权限
  • 文件属主的UID
  • 文件属组的GID
  • 链接数(指向这个文件名路径名称个数)
  • 该文件的大小和不同的时间戳
  • 指向磁盘上文件的数据块指针
  • 有关文件的其他数据

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

  • atime(access time):最近访问

    最后一次访问文件的时间

  • mtime(modify):最近更改

    最后一次更改文件内容的时间

  • ctime(change time):最近改动

    最后一次改变文件元信息的时间

查看inode号的命令:

查看文件名对应的inode号

ls -i 123.tex

查看inode信息中的inode号码

stat 123.tex

2.2.3 目录文件的结构

目录是个特殊文件,目录文件的内容保存了此目录中文件的列表,以及inode number对应关系。

  • 目录文件的结构非常简单,就是一系列目录项(dirent)的列表。
  • 每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
  • 一个目录是目录下的文件名和文件inode号之间的映射。
  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
  • Linux系统内部不使用文件名,而使用inode号码来识别文件。
  • 对于用户,文件名只是Inode号码便于识别的别称。

2.3 inode的号码

用户通过文件名打开文件时,系统内部的过程:

  (1)  系统找到这个文件名对应的inode号

  (2) 通过inode号,获取inode信息

 (3)根据inode信息,找到文件数据所在的block,读出数据

 2.4 inode 与文件存储

2.5 inode 的大小

  • inode也会消耗硬盘空间

    • 每个inode的大小一般是128字节或256字节
  • 格式化文件系统时确定inode的总数

    • 如果磁盘还有空间,但inode号被全部占用,也无法创建新文件。
    • inode号在同一个文件系统内唯一,在不同的文件系统中可以重复。

使用 "df -i" 命令可以查看每个硬盘分区的inode总数和已经使用的数量

2.6 inode的特殊作用

 1)当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件

2)在同一个文件系统中移动或重命名文件时,只改变文件名,不影响inode号码。

3)打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名

 4)使用 vi 编辑器修改文件数据保存后,会生成一个新的 inode 号码

find /opt -inum 34376268 -exec rm -rf {} \;       查找对应的inode号并删除
find ./ -inum 50464299 -delete                       --- 同上

2.7 EXT 类型文件恢复

extundelete 是一个开源的 Linux 数据恢复工具,支持 ext3、ext4文件系统。(ext4只能在centos6版本恢复)

首先使用fdisk创建分区/dev/sdb1,格式化ext3文件系统,并挂载

 

 

 extundelete /dev/sdb1 --restore-all     //恢复删除的文件,恢复所有   

(这个要切换到挂载点目录外面操作)

extundelete /dev/sdb1 --inode 2            #查看文件系统/dev/sdc1下存在哪些文件,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。

extundelete /dev/vdb1 --restore-inode 14      //根据inode号恢复

extundelete /dev/vdb1 --restore-all       //恢复所有

extundelete /dev/vdb1 --restore-directory deletetest   //恢复目录

extundelete /dev/vdb1 --restore-file passwd  //恢复文件

2.8 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命令查看)

3 日志文件介绍与分析

日志的功能:

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

日志文件的分类:

  • 内核及系统日志:

    这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置,决定将内核消息及各种系统程序消息记录到什么位置。日志格式基本相似。

  • 用户日志:

    记录用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。

  • 程序日志:

    有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。记录格式不统一。

日志保存位置:

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

主要日志文件介绍:

日志位置描述
内核及公共消息日志/var/log/messages它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,以及用户自定义安装软件的日志,也会在这里列出。
计划任务日志/var/log/cron记录与系统定时任务相关的曰志
系统引导日志/var/log/dmesg记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
邮件系统日志/var/log/maillog记录邮件信息的曰志
系统引导日志/var/log/dmesg记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息。
邮件系统日志/var/log/maillog记录邮件信息的曰志
用户登录日志:/var/log/lastlog记录系统中所有用户最后一次的登录时间的曰志。这个文件是二进制文件.不能直接用 vi 查看,而要使用 lastlog 命令查看。
/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录。比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中。
/var/log/wtm永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件,不能直接用 vi 查看,而要使用 last 命令查看。

3.2 内核及系统日志

由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf。

  • 软件包:rsyslog-8.24.0-12.el7.x86_64 (可使用 ”rpm -q“ 命令查看)
  • 主要程序:/sbin/rsyslogd
  • 配置文件:/etc/rsyslog.conf (可使用 ”rpm -qc“ 命令查看

日志消息的级别:

级号消息级别说明
0EMERG紧急会导致主机系统不可用的情况
1ALERT警告必须马上采取措施解决的问题
2CRIT严重比较严重的情况
3ERR错误运行出现错误
4WARNING提醒

可能会影响系统功能的事件

5NOTICE注意不会影响系统但值得注意
6INFO信息一般信息
7DEBUG调试程序或系统调试信息等

日志记录的一般格式:

  • 事件产生的时间。
  • 产生事件的服务器的主机名。
  • 产生事件的服务名或程序名。
  • 事件的具体信息。

3.3 用户日志分析

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

  • /var/log/lastlog:最近用户登录事件。二进制文件,使用 lastlog 命令查看。
  • /var/log/secure:与用户验证有关的安全性事件。
  • /var/log/wtmp:用户登录、注销,及系统开、关机事件。二进制文件,使用 last 命令查看。
  • /var/run/utmp:当前登录的每个用户的详细信息。二进制文件,使用w、who、users等命令查看。

分析工具:

  • users、who、w、last、lastb

1)users:查询最近三次登录的用户信息

users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。

2)who:查看当前登录的用户、终端、登录时间、IP地址。

who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可

以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用

户名、终端类型、登录日期及远程主机。

3)w:查看当前登录的用户、终端、IP地址、登录时间、占用CPU的情况、进程等。

w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。

4)last: 读取 /var/log/wtmp 文件,显示登录系统的用户信息。

last 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。

5)lastb:读取 /var/log/btmp 文件,显示登入系统失败的用户信息。

lastb 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除 了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。

3.4 程序日志分析

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

Web服务:/var/log/httpd/

access_log、error_log

代理服务:/var/log/squid

access.log、cache.log

FTP服务:/var/log/xferlog

分析工具:

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

3.5 日志管理策略

  1. 及时做好备份和归档

  2. 延长日志保存期限

  3. 控制日志访问权限

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

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

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

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

4 内核及系统日志管理

4.1 系统日志相关服务

  • syslogd: system application 记录应用日志
  • klogd: linux kernel 记录内核日志

事件记录格式:

  • 日期时间 主机 进程[pid]: 事件内容

4.1.2 rsyslog 系统日志服务

rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。

当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。

rsyslog 特性:

  • 多线程
  • UDP, TCP, SSL, TLS, RELP
  • MySQL, PGSQL, Oracle实现日志存储
  • 强大的过滤器,可实现过滤记录日志信息中任意部分
  • 自定义输出格式
  • 适用于企业级中继

4.1.3 ELK

ELK:由Elasticsearch、Logstash、Kibana三个软件组成。

  • 非关系型分布式数据库基于apache软件基金会jakarta项目组的项目lucene
  • Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
  • Logstash对日志进行收集、分析,过滤,并将其存储供以后使用
  • Kibana 可以提供的日志分析友好的 Web 界面

4.2 rsyslog管理

4.2.1 系统日志术语

facility:设施,从功能或程序上对日志进行归类

auth(验证), authpriv, cron(定时任务), daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, syslog  #自定义的分类

 Priority 优先级别,从低到高排序

debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)

服务名称(即什么服务产生的日志)

服务名称说明
auth(LOG AUTH)安全和认证相关消息 (不推荐使用authpriv替代)
authpriv(LOG_AUTHPRIV)安全和认证相关消息(私有的)
cron (LOG_CRON)系统定时任务cront和at产生的日志
daemon (LOG_DAEMON)与各个守护进程相关的曰志
ftp (LOG_FTP)ftp守护进程产生的曰志
kern(LOG_KERN)内核产生的曰志(不是用户进程产生的)
Iocal0 ~ local7 (LOG_LOCAL0-7)为本地使用预留的服务
lpr (LOG_LPR)打印产生的日志
mail (LOG_MAIL)邮件收发信息
news (LOG_NEWS)与新闻服务器相关的日志
syslog (LOG_SYSLOG)存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称)
user (LOG_USER)用户等级类别的日志信息
uucp (LOG_UUCP>uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中

4.2.2 rsyslog 相关文件

  • 程序包:rsyslog
  • 主程序:/usr/sbin/rsyslogd
  • CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
  • CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
  • 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
  • 库文件: /lib64/rsyslog/*.so

4.2.3 rsyslog 配置文件

/etc/rsyslog.conf 配置文件格式(由三部分组成):

  • MODULES:相关模块配置
  • GLOBAL DIRECTIVES:全局配置
  • RULES:日志记录相关的规则配置

查看/etc/rsyslog.conf 文件中的RULES模块:

RULES配置格式:

4.3 rsyslog 应用实例

4.3.1 将ssh服务的日志单独设置

实验步骤:

步骤1:修改rsyslog服务的配置文件/etc/rsyslog.conf,设置LOCAL0对应的日志路径

步骤2:修改ssh服务的配置文件/etc/ssh/sshd_config,将ssh的日志修改为记录在LOCAL0对应的路径下。

步骤3:重启 rsyslog 服务和 ssh 服务。

 步骤4:打开第二台机器,远程连接原服务器。故意输错2次密码,稍后查看原服务器的日志。

4.3.2 网络日志(远程日志功能)

远程日志,即通过网络,将本地的日志远程备份到另一台机器,这样,就算本机系统崩溃,我们可以查看另一台机器备份的日志,来排查故障。

实验思路:

假设服务器A需要将日志备份到服务器B,那么A是发送方,B是接收方。

接受双方需要开启TCP功能(或UDP功能)和514接口,发送方需填写想要传输的日志和接收方的地址。

实验步骤:

步骤1:接收方开启TCP功能和514端口(编辑rsyslog的配置文件 /etc/rsyslog.conf)。

关闭防火墙;

编辑配置文件,开启TCP功能和514端口(去掉这两行原有的#号);

重启rsyslog 服务;

检查514端口是否开启。

 

步骤2:发送方填写需要传输的日志和接收方的IP地址(编辑配置文件 /etc/rsyslog.conf)。

关闭防火墙;

编辑配置文件,填写需要传输的日志和接收方地址;

重启rsyslog 服务;

测试日志打印。

  

 步骤3:查看接收方能否成功接收日志记录。

切换到接收方查看日志

5 日志管理工具 journalctl

CentOS 7 以后,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核及系统日志和应用日志)。

日志的配置文件:

 /etc/systemd/journald.conf

journalctl命令格式:

 journalctl [OPTIONS...] [MATCHES...]

journalctl 查看所有日志。 默认情况下,只保存本次启动的日志。
journalctl -r-r表示倒序,从尾部看(推荐)
journalctl -k 只查看内核日志(不显示应用日志)
journalctl -b查看本次启动的日志  journalctl -b -0,//查看本次启动的日志/ journalctl -b -1,查看上一次启动的日志
journalctl --since

查看指定时间的日志。

"2022-03-05 18:10:30"    "20 min ago"             yesterday

"2022-03-05" --until "2022-03-10 03:00"        09:00 --until "1 hour ago"

journalctl -n显示尾部指定行数。默认10行。
journalctl -f实时滚动显示最新日志(显示最新10行)
 journalctl /usr/lib/systemd/systemd查看指定服务的日志
journalctl _PID=1  查看指定进程的日志
journalctl _UID=33查看指定用户的日志
journalctl -u查看某个 Unit 的日志
journalctl -p查看指定优先级的日志,表示仅显示小于或等于此等级的日志
journalctl --vacuum-time=1years指定日志文件保存多久
journalctl --no-pager日志默认分页输出,--no-pager 改为正常的标准输出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值