Linux文件系统与日志分析

目录

inode

block

链接

文件修复

实验步骤

针对ext文件系统恢复删除文件

针对xfs文件系统恢复删除文件

日志

日志级别

rsyslogd服务

日志目录

messages日志文件(系统日志)

集中管理日志 - 实验

1.环境配置

1.1

1.2

1.3

1.4

1.5

2.远程发送日志

2.1

2.2

3.查看日志文件

3.1

3.2

指定服务单独生成日志 - 实验

日志切割

1.1 配置日志切割

1.2 使用轮换


inode

inode的大小和block的大小在格式化时被确定下来

inode:i节点(索引号,标识该文件在磁盘中的位置);inode包括实际数据与文件的元数据(mate data)

  • xfs:每个xfs文件的inode占512字节(可调节的)
  • ext4下inode:占256字节

每个文件或目录文件都有一个inode号,Linux用inode号来识别不同的文件。

Linux系统内部不使用文件名,而使用inode号来识别文件。

对于用户,文件名只是inode号便于识别的别称

命令

说明

stat 文件名

显示文件的状态

这些信息对于xfs文件系统来讲占512字节

ext4文件系统占用254字节

dumpe2fs -h /dev/sdb1

显示 ext2、ext3、ext4 文件系统的超级块和块组信息

-h:指定只显示超级块信息

mkfs -t xfs -f /dev/sdb2 -b size=2048

在格式化xfs文件系统时定义block size的大小

mkfs -t xfs -f /dev/sdb2 -I size=1024

在格式化xfs文件系统时定义inode size的大小

mkfs -t ext4 -N 120960 /dev/sdb1

在格式化ext4时设置inode数量

mkfs -t ext4 -b 2048 /dev/sdb1

格式化时设置block大小

mkfs -t ext4 -I 512 /dev/sdb1

格式化时设置inode大小

xfs_growfs -m 30 /dev/sdb2

设置inode在该分区占%几的比例

需要该分区处于挂载状态

只要创建出一个文件,该文件在系统里会生成一个硬链接

[root@localhost ~]# stat anaconda-ks.cfg 
  文件:"anaconda-ks.cfg"
  大小:1605          块:8          IO 块:4096   普通文件
设备:fd00h/64768d    Inode:268635215   硬链接:1
权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2024-05-28 00:37:17.856009764 +0800
最近更改:2024-05-28 00:37:17.857009764 +0800
最近改动:2024-05-28 00:37:17.857009764 +0800
创建时间:- # 被废弃,但是依然保留该属性

block

  • xfs、ext4文件系统:4096
  • 磁盘IO:1024
  • 扇区IO:512

连续的八个扇区组成一个 block,是文件存取的最小单位

链接

  • 软链接:等于Windows系统的快捷方式,消耗空间,有独立的inode号
    • 如果是跨目录创建,要加绝对路径
  • 硬链接:不会消耗空间,因为inode号和属性都和原始文件一样
    • 目录不能创建硬链接
    • 不能跨分区创建

文件修复

如果在linux根据文件名删除了一个文件,实际只是删除了linux系统中该文件对于用户便于识别的“目录”,实际上该文件还存在磁盘上

如果把这个分区格式化了,相当于把一整本书的目录撕掉了。这个文件还是存在磁盘上,但是文件系统必须依靠“目录”来查找文件

命令

说明

extundelete /dev/sdb1 --restore-all

恢复该分区所有文件

xfsdump -f /opt/mydata_sdb1 /aaa

备份/aaa挂载点目录到/opt/mydata_sdb1

挂载点后不要加/

xfsrestore -f /opt/mydata_sdb1 /aaa

将/opt/mydata_sdb1的文件恢复到/aaa

实验步骤

针对ext文件系统恢复删除文件

./configure --prefix=/usr/local/extundelete

  1. 安装依赖 yum -y install e2fsprogs-devel e2fsprogs-libs gcc*
  2. 使用解压命令 tar xvf extundelete-0.2.4.tar.bz2
  3. 使用./configure --prefix=/usr/local/extundelete命令校验安装依赖
  4. make 编译源代码 生成二进制代码文件
  5. make install 安装
  6. 创建软链接让该软件包的命令能够像系统命令一样调用 ln -s /usr/local/extundelete/bin/* /usr/bin/
  7. 由于该软件包较为古老只支持ext3的文件系统,所以格式化做实验的分区的文件系统为ext3,然后挂载
    1. 此时cd到挂载的目录,可以看到该软件包对于ext3文件系统分区所生成的 lost+found 目录,当系统崩溃时,转储文件进行备份
  8. 创建几个文件,再删除,cd回上一级
  9. 取消挂载/dev/sdb1这个分区
  10. 使用 extundelete /dev/sdb1 --restore-all 命令可以恢复该分区所有删除的文件,在当前目录下生成一个恢复文件的目录
  11. 进入该目录就能查看恢复的数据

生成的恢复文件目录

针对xfs文件系统恢复删除文件

  1. 安装针对xfs恢复文件的软件包 yum -y install xfsdump
  2. cd进已挂载的xfs系统的目录,创建几个文件
  3. 备份该xfs系统目录到/opt/mydata_sdb1;xfsdump -f /opt/mydata_sdb1 /aaa
  4. 删除几个文件,然后用 xfsrestore -f /opt/mydata_sdb1 /aaa 恢复数据

删除数据,恢复数据

恢复后的数据

日志

当主机在运行特定的程序时,会产生一些消息来记录系统的变化或动作。通过日志将这些信息保存并记录系统曾经运行过的状态,日志就可以查看过去某一时刻,某个设备、服务器、主机的状态

  • 系统日志
    • /var/log/messages
  • 用户日志
    • /var/log/lastlog
      • 不能直接查看,要用相关命令查看 - last命令
  • 程序日志
    • 软件或服务的日志

日志级别

级别

说明

debug 

调试信息的日志,日志信息最多

info 

一般信息的日志,最常用

notice 

最具有重要性的普通条件的信息

warning 

警告级别

error 

错误级别,阻止某个功能或者模块不能正常工作的信息

critical 

严重级别,阻止整个系统或者整个软件不能正常工作的信息

alert 

需要立刻修改的信息

emerg 

内核崩溃等严重信息

rsyslogd服务

该服务本身是分布式日志管理,可以不借助第三方工具将日志传输到别的主机

命令

说明

rsyslogd -version

查看日志管理服务的版本信息

last

查看用户日志

路径

说明

/var/log

rsyslogd存放日志的位置

日志目录

在/var/log目录下,有些文件可以直接查看,有些文件不能直接查看,因为是加密文件,所以是二进制的形式保存的

  • 比如想要查看/var/log目录下的wtmp文件,要输入 w 命令才能查看

messages日志文件(系统日志)

集中管理日志 - 实验

系统

主机名

IP地址

centos7.9

master

192.168.10.101

centos7.9

node1

192.168.10.102

centos7.9

node2

192.168.10.103

1.环境配置

1.1

右键Xshell终端,将3台主机操作同步

1.2

进入hosts文件 配置环境

将三台主机的IP输入,保存并退出

1.3

为了实验方便,停止防火墙以及关闭内核安全机制

到这一步 关闭操作同步

1.4

配置rsyslog接收远程日志

创建文件

配置规则

说明

$ModLoad immark

加载immark模块。此模块为日志消息添加一个标记,有助于在日志文件中识别消息的起始和结束。

$ModLoad imudp

加载imudp模块,这允许rsyslog通过UDP协议接收日志消息。

$UDPServerRun 514

在UDP端口514上启动日志接收服务。这是syslog的默认端口。

$ModLoad imtcp

加载imtcp模块,使rsyslog能够通过TCP协议接收日志消息。

$InputTCPServerRun 514

在TCP端口514上启动日志接收服务。这是syslog的默认端口。

$AllowedSender tcp, 192.168.10.0/24

允许来自192.168.10.0/24网络的TCP连接发送日志到本主机。这是一个安全措施,确保只有受信任的网络可以发送日志。

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

把远程主机发过来的日志信息保存到指定文件

定义一个名为"Remote"的模板,然后指定日志格式和存储位置

其中第一个%fromhost-ip%代表用发送日志源主机的IP地址做目录名,第二个代表文件名,%$YEAR%,%$MONTH%,和%$DAY%代表日志生成的年、月、日。

:fromhost-ip, !isequal, "127.0.0.1" ?Remote

要接受的日志不是本机的,是Remote的(远程主机的)

一个条件过滤规则,用于决定如何处理特定的日志消息。

如果日志消息的源IP地址(fromhost-ip)不是127.0.0.1(不是本机),则应用前面定义名为"Remote"模板来保存这些日志。

*.info;mail.none;authpriv.none;cron.none /data/log/messages

这是一个日志处理规则,它表示:

    • 接收所有级别为info及以上的日志消息(*.info)。
    • 但是,忽略mail邮件、authpriv任务 和cron计划任务的日志消息。
    • 将符合条件的日志保存到/data/log/messages文件中。
1.5

创建目录树,用于存放上面配置文件指定的远程发送的日志文件

如果无法创建就在结尾加上 -p

重启日志服务

2.远程发送日志

2.1

开启操作同步

将master主机的操作同步关闭,只操作另外两台node主机

2.2

cd到相应目录,创建配置文件

写入配置,保存并退出

配置规则

说明

$template myFormat,"%timestamp% %fromhost-ip% %msg%"

定义该主机生成的日志格式

定义一个名为myFormat的模板,日志格式为:时间日期-源主机IP-日志具体内容

*.info;mail.none;authpriv.none;cron.none @@192.168.10.101

    • 接收所有级别为info及以上的日志消息(*.info)。
    • 但是,忽略mail邮件、authpriv任务 和cron计划任务的日志消息。
    • 将符合条件的日志保存到192.168.10.101

@@:代表本机生成的日志,要发送给指定的主机(101需要开启监听,能接收到)

重启日志服务

3.查看日志文件

3.1

到master主机上rsyslog配置文件的指定位置 /data/log 中就能看到其他两个主机发送的日志文件

3.2

102和103两台主机的日志都转存到101主机上,但是两台node主机本地还是存有一份日志信息,也就是说node主机的日志文件要同时生成两份,存到不同的主机上

指定服务单独生成日志 - 实验

编辑该配置文件

创建一个local0的日志设备,指定该日志设备接收到的日志存储在/opt/sshd.log

进入指定服务的配置文件

进入配置文件后用末行模式搜索SyslogF

修改sshd服务输出的日志消息给local0,注意要把这一行开头的注释删掉

改了两个服务的配置文件,重启服务,让配置文件生效

等待日志文件生成,cat查看,就有了

日志切割

也叫日志滚动

日志切割解决两个问题:

可以按时间保存日志,方便查找

不让某个文件过大

1.1 配置日志切割

cd 到 rsyslog服务存放按天执行脚本的目录

目录下有 logrotate脚本,该文件是系统中由 cron 系统服务定期执行的脚本

作用是调用 logrotate 程序来自动轮转系统中的日志文件

进入logrotate日志切割工具的配置文件

加入配置命令

配置规则

说明

/opt/sshd.log

日志分割的目标,要对谁做切割

missingok

如果要切割的文件(/opt/sshd.log)丢失了,不报错继续下一个文件的轮转。

monthly

轮换周期,每月轮换一次,也就是每月切割一次

create 0664 root utmp

如果要执行切割操作,就要生成一个单独文件,权限指定为664,属主是root,属组是utmp

  • create:在轮转时创建新的日志文件。
  • 0664:新创建的日志文件的权限设置。这里,文件所有者(root)有读/写权限,而组(utmp)和其他用户只有读权限。
  • root:新创建的日志文件的所有者是 root。
  • utmp:新创建的日志文件的组是 utmp。

minsize 10M

最小大小,如果文件超过10M就被分割

如果日志文件小于 10MB,即使达到了 monthly 的时间限制,它也不会被轮转。

确保只有当日志文件达到一定大小时才会被轮转。

rotate 2

定义在日志文件轮转时要保留多少个日志文件备份

重启服务确保配置文件生效

1.2 使用轮换

手动触发 日志分割功能

配置规则

说明

logrotate -vf /etc/logrotate.conf

logrotate 根据 /etc/logrotate.conf 配置文件中的规则来轮转指定的日志文件

-v:输出详细信息

-f:指定 logrotate 配置文件为 /etc/logrotate.conf

查看配置文件内指定位置生成的日志文件

如果删除了日志文件,再次运行轮换命令,日志就不会生成,因为日志文件不存在

重启sshd服务,会再次生成sshd.log日志,此时使用logrotate -vf /etc/logrotate.conf就能看到新的日志轮换文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值