Linux文件系统和日志分析

一、深度认识文件系统

1.1 iNode号

iNode:元信息

1.1.1 iNode内容

iNode的内容包括文件的大小,属性,权限,UID,GID,时间戳等。

时间戳:

  • atime:access time,访问时间,读取文件就会更新这个时间
  • mtime:modify time,修改时间,修改文件数据,更改文件的属性,会更新这个时间
  • ctime:change time,改变时间,修改文件的权限会更新这个时间。
1.1.2 iNode的大小

创建文件:一方面占据实际空间大小,另一方面就是元信息。元信息和实际数据都保存在硬盘上。

iNode占据的磁盘空间:128或256字节。

iNode的总数,取决于磁盘大小,磁盘越大,iNode号越多。

由于iNode号和文件名分离,二者只是映射关系,Linux系统中的表现如下:

  1. 如果文件名包含特殊字符,使用rm可能无法正常删除,可以直接删除iNode号
  2. mv移动文件,重命名,iNode不变
  3. 一旦开始对文件操作,后续所有的认证和识别都是通过iNode来的,不再考虑文件名
  4. 元信息发生变化,iNode也会发生变化(并不总是,只是会变化)。
1.1.3 iNode和文件名的关系

Linux系统识别文件都通过iNode号码而不是文件名。

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

  1. 系统找到文件名对应的iNode号码
  2. 通过iNode号码,获取iNode信息
  3. 根据iNode信息,获取文件数据
    1. 获取文件在硬盘当中的位置
    2. 获取权限。rwx-等
    3. 如果修改了文件内容,使文件在硬盘上的位置发生变化,文件的iNode号码也会发生改变。
    4. 元信息发生了变化,iNode号有时也会随之改变(不是一定会变)。

如果iNode号满了,ext4文件系统和xfs文件系统之间有什么区别?

1.2 block

文件是存储在硬盘上的,硬盘上的最小存储单位是扇区,大小512字节。

block:块,连续的8个扇区组成一个块,一个块大小是4K。块是文件的最小存储单位,即创建一个文件,最小也要占4K空间。

操作系统读取硬盘,是一次性读取多个扇区,一个块一个块地读取数据。

一个文件必须占用一个iNode,至少占用一个block。

1.3 数据备份与恢复

1.3.1 xfs文件系统备份与恢复

CentOS7默认使用xfs文件系统,备份和恢复

xfsdump:备份

  • -f :指定需要备份的文件目录,备份文件(硬件设备的挂载点)
  • -L :指定标签
  • -M :指定设备标签
  • -s :备份单个文件,-s不能直接跟路径

xfsdump使用限制:

  1. 只能备份xfs文件系统
  2. 只能备份已经挂载的文件系统
  3. 只有root权限才能进行操作
  4. 备份之后的数据要恢复,只能使用xfsrestore解析恢复
  5. 如果两个设备的UUID相同,不能备份(几乎不会有这种情况)

xfsdump解释

xfsdump -f /opt/backup /dev/sdb2 [-L backup -M sdb2]
//把/dev/sdb的内容备份到/opt下的backup文件
  • -f :指定目录,文件

  • /opt/backup :必须是个不存在的文件空文件,不能是目录。

  • /dev/sdb2 :用设备或者挂载点都可以,一般用设备

  • [-L] :文标标签,备份文件的标签

  • [-M] :设备标签,要备份的目录

备份的级别:全量备份和增量备份

  • 0:默认级别,全量备份

  • 1-9:增量备份,一般不用

xfsrestore -f:恢复

xfsrestore -f /opt/backup /data1
//把backup文件里的内容恢复到/data1
  • -f :指定备份文件,目录

  • /opt/backup :备份的文件

  • /data1 :恢复到的目录

问:备份文件恢复后,iNode号是否会发生变化?

答:iNode号会变。恢复文件相当于清除文件,释放已使用的iNode号,重新写入文件,并重新分配iNode号,这个过程中iNode号一般会发生变化。

1.4 EXT文件系统备份和恢复

EXT4文件系统只能在CentOS-6恢复,不讨论

EXT3文件系统可以使用extundelete恢复被删除的文件,但是有一定几率失败。

了解即可,不讨论。

二、日志分析

Linux系统本身的日志和大部分的服务程序的日志都在/var/log目录下。

2.1 主要日志文件介绍

  • /var/log/messages :记录了Linux的内核消息,各种应用程序的公共日志消息。应用程序的公共日志:开、关、重启、网络错误、程序故障都属于公共日志。但访问日志和一些自有业务日志不在此列。
  • /var/log/cron :记录定时任务、计划任务的日志
  • /var/log/dmesg :记录系统引导日志
  • /var/log/maillog :记录进入或者发出的系统电子邮件信息
  • /var/log/secure /var/log/lastlog /var/log/wtmp /var/log/btmp:用户登录日志

内核及系统日志由rsyslog统一管理

主要程序 /sbin/rsyslogd

日志位置 /etc/rsyslog.conf

2.2 日志消息的级别

数字越小,优先级越高,消息越重要

级号消息级别说明
0EMERG最高级别,紧急emergency,会导致主机系统不可用的情况,系统崩溃
1ALERT警告alert,必须马上采取措施解决的问题
2CRIT严重critical,比较严重的情况
3ERR错误error,运行出现错误,程序启动失败等,最常见的报错
4WARNING提醒waring,可能会影响功能,需要提醒用户的重要事件,但不是报错。
5NOTICE注意notice,也是提醒,比warning更弱,一般无需处理
6INFO消息information,一般信息,系统或应用工作中产生的正常消息
7DEBUG调试debug,系统或程序调试信息

日志级别怎么定义

vim /etc/rsyslog.conf

*.info:‘’ * ''表示所有,表示系统当中的设备或者程序;info表示包含info以及info级别以上的日志。

’ * '包括哪些:

  • auth :用户认证产生的日志
  • daemon :守护后台进程的进程
  • authpriv :SSH,FTP登录验证的信息
  • news :网络传输产生的消息
  • syslog :系统的相关日志
  • kern :系统的内核日志
  • user :用户进程日志
  • local0 - local7 :自定义程序的日志

​ uucp:unix-to-unix-copy:两个Linux之间的通信

日志文件配置格式

  • mail.=info /var/log/mail.log .= :只记录mail的info级别的日志

  • mail.!info /var/log/mail.log .! :除了info级别的日志,其他都记录

  • mail.info;news.info :mail和news的info及以上级别的日志

  • 上面一行也可以mail,news.info

日志消息格式的解释

May 31 13:46:02 test1 systemd: Starting The Apache HTTP Server…

May 31 13:46:02 :表示当前日志发生的时间

test1 :表示发生的主机名

systemd:哪个系统产生了这个日志

‘:’ 之后的内容 :日志的具体内容

三、实验

3.1 实验一

要求:把ssh的日志单独存放在/var/log/ssg.log,作为一个独立的日志文件。

分析:ssh的配置文件在/etc/ssh/sshd_config,ssh服务默认的日志标识符AUTHPRIV,日志通过标识符存放到/var/log/secure

新建一个ssh使用的标识符LOCAL6,使它指向/var/log/ssh.log,即可完成要求。

  1. 修改ssh的配置文件/etc/ssh/sshd_config
vim /etc/ssh/sshd_config

在这里插入图片描述

​ 修改后需要重启ssh服务

systemctl restart sshd
  1. 修改日志配置文件/etc/rsyslog.conf
vim /etc/rsyslog.conf

在这里插入图片描述

修改后需要重启rsyslog服务

systemctl restart rsyslog
  1. 新开两个窗口,分别动态查看新旧日志文件/var/log/secure/var/log/ssh.log,用其他虚拟机test2远程登录到该虚拟机test3,观察两个日志文件的区别
tail -f /var/log/secure
tail -f /var/log/ssh.log

在虚拟机test2上执行ssh:登录到test3的root账户

ssh root@20.0.0.30

/var/log/secure的日志

在这里插入图片描述

/var/log/ssh.log的日志

在这里插入图片描述

从两个日志可以看到,/var/log/secure的日志只显示登入登出的时间和用户。

/var/log/ssh.log则显示了ssh服务的详细信息,包括登入设备和端口号。

3.2 实验二

配置日志服务器,进行日志收集。

要求:test2@20.0.0.20 作为日志收集服务器,test3@20.0.0.30 test3上面产生的日志,都会发到test2test3自己不再记录日志

分析:test3本身的日志产生到/var/log/messages,修改日志配置文件/etc/rsyslog.conf,修改日志信息的指向目录,改为通过TCP服务传输到test2,并开启test2test3 日志文件的TCP传输功能,即可完成要求。

test3配置

  1. 修改日志配置文件/etc/rsyslog.conf
vim /etc/rsyslog.conf

在这里插入图片描述

说明:@@20.0.0.20,TCP传输到地址20.0.0.20的主机。

如果是只有一个@,则是UDP传输。

在这里插入图片描述

解注释19,20行,打开TCP传输,端口号514

修改完成后重启rsyslog服务

systemctl restart rsyslog.service

查看TCP传输服务端口514的状态

netstat -antp | grep 514

在这里插入图片描述

LISTEN:监听端口是否开启,端口是否正常传输数据

ESTABLISHED:表示端口之间已经建立连接,而且正在传输数据。

test2配置

  1. 修改日志配置文件/etc/rsyslog.conf
vim /etc/rsyslog.conf

解注释19,20行,打开TCP传输,端口号514(和上面一样)

重启rsyslog服务

systemctl restart rsyslog.service

查看TCP传输服务端口514的状态

netstat -antp | grep 514

配置完成。

验证:在test3输入logger "this is test3"

在test2 tail -f /var/log/messages动态查看日志:

在这里插入图片描述

可以看到test3的日志传到了test2的/var/log/messages,再查看test3自身的/var/log/messages,可以看到没有新的日志产生。

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值