Linux文件系统与日志分析

发布时间:2024年01月09日

一、inode和block概述

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

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

  • 元信息:每个文件的属性信息,比如:文件的大小,时间,类型,权限等,也称为文件的元数据(meta data)
  • 元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。

  • block(块)

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

    • 中文译名为“索引节点”,也叫 i 节点
    • 用于存储文件元信息
    • 如何查看inode号? ??ls? ? -i

? ? ? 一个文件必须占用一个inode,并且至少占用一个block。

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

  2. 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。

查看inode

  • ls -i 命令:查看文件名对应的inode号码
  • stat 命令:查看文件的inode信息
  • inode号在同一个文件系统内唯一,在不同的文件系统中可以重复。inode号是有限的资源,它的多少和磁盘大小有关。
  • 访问文件流程:

    根据文件夹中的文件名和inode号的关系,找到对应的inode表,再根据inode表中的指针,找到磁盘真实数据

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

面试题1:

我磁盘空间还剩余很多,但是无法建立文件?

inode? 号用完了

lvm 扩容

普通分区,删除没有用的空文件

面试题2:

我想看到几点几分到几点几分之间的日志

内存中

journalctl -S “2024-01-01 8:00” -U “2024 -02-02 8:00”

二、文件恢复extundelete

删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录 里面的 block 中,删除这个文件的名字。Linux 是通过 Link 的数量来控制文件删除的,只有 当一个文件不存在任何 Link 的时候,这个文件才会被删除。在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情 况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过“回收 站”找回的情况,比如使用“rm -rf”来删除数据。针对 Linux 下的 EXT 文件系统,可用的恢复 工具有 debugfs、ext3grep、extundelete 等。 其中 extundelete 是一个开源的 Linux 数据 恢复工具,支持 ext3 文件系统。

三、日志管理

? ? ? 在现实生活中,记录日志也非常重要,比如银行的转账记录,飞机上的黑盒子,那么将系统和应用发生的事件记录至日志中,以助于排错和分析使用日志记录的内容包括:

  • 历史事件:时间,地点,人物,事件

  • 日志级别:事件的关键性程度,Loglevel

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

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

1.日志的功能

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

2.日志文件的分类

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

3.rsyslog系统日志服务? ???软件 ?帮助 管理日志

rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。

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

rsyslog 特性

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

日志 ?系统日志? ? ?

?软件日志 ?自己的日志 ??

4. 日志等级

5.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

6.日志文件

系统日志:

?/var/log/secure:系统安全日志(用户登录),文本格式,应周期性分析

/var/log/messages :系统中大部分的信息

用户登录日志:

/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式lastb命令进行查看
/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看

/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看

程序日志:是和程序本身有关,有的有独立日志,有的没有独立日志

/var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化将不再记录专用命令dmesg查看,可持续记录硬件变化的情况

/var/log/boot.log 系统服务启动的相关信息,文本格式

/var/log/messages :系统中大部分的信息

/var/log/anaconda : anaconda的日志操作系统安装时安装的软件信息

7.日志管理工具? ? journalctl

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

日志的配置文件:/etc/systemd/journald.conf

journalctl? ?命令格式? ? ?journalctl [OPTIONS...] [MATCHES...]

面试题2:

我想看到几点几分到几点几分之间的日志

内存中

journalctl -S “2024-01-01 8:00” -U “2024 -02-02 8:00”

-S, --since=, -U, --until=
 ? 显示晚于指定时间(--since=)的日志、显示早于指定时间(--until=)的日志。
 ? 参数的格式类似 "2012-10-30 18:17:16" 这样。 如果省略了"时:分:秒"部分,
 ? 则相当于设为 "00:00:00" 。 如果仅省略了"秒"的部分则相当于设为 ":00" 。
 ? 如果省略了"年-月-日"部分, 则相当于设为当前日期。 除了"年-月-日 时:分:秒"格式,
 ? 参数还可以进行如下设置: (1)设为 "yesterday", "today", "tomorrow"
 ? 以表示那一天的零点(00:00:00)。 (2)设为 "now" 以表示当前时间。
 ? (3)可以在"年-月-日 时:分:秒"前加上 "-"(前移) 或 "+"(后移)
 ? 前缀以表示相对于当前时间的偏移。 关于时间与日期的详细规范, 参见
 ? systemd.time(7)
-e, --pager-end
 ? 在分页工具内立即跳转到日志的尾部。 此选项隐含了 -n1000
 ? 以确保分页工具不必缓存太多的日志行。 不过这个隐含的行数可以被明确设置的 -n
 ? 选项覆盖。 注意,此选项仅可用于 less(1) 分页器。
-u, --unit=UNIT|PATTERN
 ? 仅显示属于特定单元的日志。 也就是单元名称正好等于 UNIT 或者符合 PATTERN
 ? 模式的单元。 这相当于添加了一个 "_SYSTEMD_UNIT=UNIT" 匹配项(对于 UNIT 来说),
 ? 或一组匹配项(对于 PATTERN 来说)。
 ? 可以多次使用此选项以添加多个并列的匹配条件(相当于用"OR"逻辑连接)。
-x, --catalog
 ? 在日志的输出中增加一些解释性的短文本, 以帮助进一步说明日志的含义、
 ? 问题的解决方案、支持论坛、 开发文档、以及其他任何内容。
 ? 并非所有日志都有这些额外的帮助文本, 详见 Message Catalog Developer
 ? Documentation[5] 文档。
 ? 注意,如果要将日志输出用于bug报告, 请不要使用此选项。

8.logrotate日志转储 ? ?手动去 ?分割日志

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行

logrotate 配置

软件包:logrotate

相关文件

  • 计划任务:/etc/cron.daily/logrotate

  • 程序文件:/usr/sbin/logrotate

  • 配置文件: /etc/logrotate.conf

  • 日志文件:/var/lib/logrotate/logrotate.status

四、实验

实验1:实际操作,将ssh服务的日志单独设置

1.使用Rsyslog创建日志优点

在运维过程中某些服务是自带错误日志和运行日志的,但是有一些服务安装完成后是没有日志的。下面我们以sshd(让你远程登录)服务为例创建一个日志,例如sshd本身是有日志的,但是与其他安全服务一样都存放在/var/log/secure/messages文件中不方便我们查看sshd的日志,如果我们将sshd服务的日志单独生成一个日志文件便于我们查看,注意使用Rsyslog创建日志的服务必须支持Rsyslog。

2.rsyslog配置文件

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

  • MODULES:相关模块配置

  • GLOBAL DIRECTIVES:全局配置

  • RULES:日志记录相关的规则配置

比如sshd的日志文件,它的日志文件是放在公共日志文件/var/log/srcure中

它是一个远程连接文件,比较重要,我们把它单独存放一个文件

local6:自定义规则? 范围:local0-local7? 7已经被使用,我们可以设置除7外的数值

原来ssh   日志     在/var/log/secure
将 ssh服务的日志 文件 独立出来


[root@localhost ~]#tail -f /var/log/secure
#查看ssh服务的日志位置

[root@localhost ~]#vim /etc/ssh/sshd_config
#修改ssh配置文件,32下一行添加自己的自定义
32 #SyslogFacility AUTHPRIV
33 SyslogFacility LOCAL6

[root@localhost ~]#vim /etc/rsyslog.conf
#76 行添加自己的文件位置
local6.*                                                /opt/ssh.log

[root@localhost log]#systemctl restart rsyslog.service sshd
#重启服务

ssh  自己的ip地址

rsyslog  统一收集日志

实验2:使用rsyslog搭建设置网络日志服务器(远程日志功能)

①实验背景

日志服务器更方便管理企业内部日志,将业务服务器的日志都放到日志服务器上更便于运维和管理。

通过网络日志服务器,可以将多台机器的日志放到一台机器上,从而实现日志的统一管理

两台机器的传输,需要通过协议和端口号,所以,我们要先启用两台机器的端口

1.分别关闭两台主机防护墙,防护
1.接收方:192.168.246.8配置:

2.发送方:新建会话192.168.246.7

在/etc/rsyslog.conf配置文件中,打开tcp的514端口,查看是否打开,并重新加载服务

3.把(centos7 -2)接收方192.168.246.8作为日志服务器,需要在发送方192.168.246.7里修改

文章来源:https://blog.csdn.net/zzzxxx520369/article/details/135454736
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。