深入理解Linux文件系统与日志分析

深入理解Linux文件系统与日志分析

一、inode和block概述

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

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

  • block(块)

    • 连续的八个扇区组成一个block

    • 是文件存取的最小单位

  • inode(索引节点)

    • 中文译名为“索引节点”,也叫i节点

    • 用于存储文件元信息

image-20210923084521041

inode表结构

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

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

文件的元数据信息。

每一个inode表记录对应的保存了以下信息:

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

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

  • ctime(change time)
    • 最后一次改变文件或目录(属性)的时间
  • atime(access time)
    • 最后一次访问文件或目录的时间
  • omtime(modify time)
    • 最后一次修改文件或目录(内容)的时间

inode的内容

  • 目录文件的结构
    • 目录也是一种文件
    • 目录文件的结构
  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件
  • Linux系统内部不使用文件名,而使用inode号码来识别文件
  • 对于用户,文件名只是inode号码便于识别的别称

关于目录

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

  • 文件引用一个是 inode号

  • 是通过文件名来引用一个文件

  • 一个目录是目录下的文件名和文件inode号之间的映射

cp和inode

cp 命令:

  • 分配一个空闲的inode号,在inode表中生成新条目
  • 在目录中创建一个目录项,将名称与inode编号关联
  • 拷贝数据生成新的文件

rm 命令:

  • 硬链接数递减,从而释放的inode号可以被重用
  • 把数据块放在空闲列表中
  • 删除目录项
  • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv和inode

如果mv命令的目标和源在同一设备,

不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

删除旧的目录对应关系新建目录对应关系

[root@localhost a]#find -inum 69 -exec rm {} \;
#通过find命令查找indoe号来删除指定的文件
[root@localhost a]#find -inum 69 -delete

文件存储小结

image-20210927202811371

inode的大小

  • inode也会消耗硬盘空间
    • 每个inode的大小
    • 一般是128字节或256字节
  • 格式化文件系统时确定inode的总数
  • 使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量

image-20210927203040804

inode的特殊作用

  • 由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
    • 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
    • 移动或重命名文件时,只改变文件名,不影响inode号码
    • 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名

链接文件

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

二、恢复与备份xfs类型的文件

使用 extundelete 工具如何恢复误删除的文件

在编译安装 extundelete 之前需要先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel,

这两个包在系统安装光盘的/Package 目录下就有,使用 rpm 或 yum 命令将其安装。

e2fsprogs-devel 安装依赖于 libcom_err-devel 包

[root@localhost ~]#yum -y install e2fsprogs-devel e2fsprogs-libs
#安装依赖软件
[root@localhost ~]# tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt
#解压软件
[root@localhost ~]# cd /opt/extundelete-0.2.4
#切换到目录下
[root@localhost extundelete-0.2.4]# ./configure
#编译安装
[root@localhost extundelete-0.2.4]#make
[root@localhost extundelete-0.2.4]#make install


#验证恢复,提前创建一个分区,挂载之后,进入目录创建四个文件
[root@localhost ~]# mkfs.ext3 /dev/sdb1
[root@localhost ~]# mkdir /test/ 
[root@localhost ~]# mount /dev/sdb1 /test/ 
[root@localhost ~]# cd /test/
[root@localhost test]# echo a>a 
[root@localhost test]# echo a>b 
[root@localhost test]# echo a>c 
[root@localhost test]# echo a>d

模拟删除并恢复

在恢复前需要先解挂载

–inode 2 代表从 i 节点为 2 的文件开始查看,一般文件系统格式化挂 载之后,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。

[root@localhost test]# rm -rf a b
#模拟删除
[root@localhost test]# ls c d lost+foun
[root@localhost test]# cd 
[root@localhost ~]# umount /test/
#解挂载
[root@localhost ~]#extundelete /dev/sdb1 --inode 2
#                  命令          查看的分区   从2节点开始
#查看该分区下的存在哪些文件
[root@localhost ~]# extundelete /dev/sdb1 --restore-all
#                     命令      需要恢复的分区设备    恢复全部选项
#使用恢复

执行完恢复的命令后,在当前目录下会出现一个/RECOVERED_FILES/目录,里面保 存了已经恢复的文件

[root@localhost ~]# ls
anaconda-ks.cfg extundelete-0.2.4 extundelete-0.2.4.tar.bz2 RECOVERED_FILES 
[root@localhost ~]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# ls
a b 

案例:恢复XFS类型的文件

  • xfsdump命令格式
    • xfsdump -f 备份存放位置 要备份的路径或设备文件
  • xfsdump备份级别(默认为0)
    • 0:完全备份
    • 1-9:增量备份
  • xfsdump常用选项:-f、-L、-M、-s
  • xfsrestore命令格式
    • xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
  • 模拟删除并执行恢复操作

常用的备份参数包括以下几种:

  • -f:指定备份文件目录

  • -L:指定标签 session label

  • -M:指定设备标签 media label

  • -s:备份单个文件,-s 后面不能直接跟路径

使用 xfsdump 时,需要注意以下的几个限制:

  • 不支持没有挂载的文件系统备份,所以只能备份已挂载的;
  • 必须使用 root 的权限才能操作;
  • 只能备份 XFS 文件系统;
  • 备份下来的数据只能让 xfsrestore 解析;
  • 不能备份两个具有相同 UUID 的文件系统(可使用blkid查看)

过程

[root@localhost opt]#mkfs.xfs -f /dev/sdb1
#强制格式化
[root@localhost ~]# fdisk /dev/sdb
#分区略
[root@localhost data]#partprobe /dev/sdb
#刷新分区
[root@localhost ~]# mkfs.xfs /dev/sdb1
#格式化
[root@localhost ~]# mkdir /date 
[root@localhost ~]# mount /dev/sdb1 /date/
#挂载
[root@localhost ~]# cd /date 
[root@localhost date]# cp /etc/passwd ./ 
#将passwd文件拷入
[root@localhost date]# mkdir test 
[root@localhost date]# touch test/a

[root@localhost data]#rpm -qa |grep xfsdump
#查看是否已安装
xfsdump-3.1.4-1.el7.x86_64
[root@localhost data]#yum install xfsdump -y
#未安装可以使用yum安装

[root@localhost ~]# xfsdump -f /opt/dump_sdb1 /dev/sdb1  -L dump_sdb1 -M sdb1
#使用 xfsdump 命令备份整个分区  并打上标记

模拟数据丢失后恢复

[root@localhost data]#cd /data/
[root@localhost data]#rm -rf /*
[root@localhost data]#ls
[root@localhost ~]# xfsrestore -f /opt/dump_sdb1 /date/
...... 
xfsrestore: Restore Status: SUCCESS
[root@localhost ~]# ls /date/ 
passwd test

[root@localhost ~]#xfsdump -f /opt/dump_sdb1 /dev/sdb1 

备份 路径下的文件位置为 /opt/dump_sdb1    备份的位置为/dev/sdb1 

please enter label for this dump session (timeout in 300 sec)
 -> dump_sdb1 
 #打上标记便于确认
session label entered: "dump_sdb1"
-> sdb1
media label entered: "sdb1"

-> sdb1
#指定设备标签
media label entered: "sdb1"
xfsdump: Dump Status: SUCCESS


#恢复
[root@localhost opt]#xfsrestore -f dump_sdb1 /data/

使用 bak文件 将数据恢复到 /data 下

[root@localhost opt]#ls /data/
passwd  test

[root@localhost opt]#xfsdump -l 1 -f /backup/dump_sdb1_level_1 /sdb1 -L dump_sdb1_level_1 -M sdb1
#设定级别

三、日志文件

  • 日志的功能
    • 用于记录系统、程序运行中发生的各种事件
    • 通过阅读日志,有助于诊断和解决系统故障
  • 日志文件的分类
    • 内核及系统日志
      • 由系统服务rsyslog统一进行管理,日志格式基本相似
    • 用户日志
      • 记录系统用户登录及退出系统的相关信息
    • 程序日志
      • 由各种应用程序独立管理的日志文件,记录格式不统一
日志文件位置日志文件说明
/var/log/messages内核和公共日志它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,以及用户自定义安装软件的日志,也会在这里列出。
/var/log/cron 计划任务日志记录与系统定时任务相关的曰志
/var/log/dmesg 系统引导日志记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/maillog 邮件日志记录邮件信息的曰志
用户日志
/var/log/lastlog记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看
/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看
/var/tun/ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看

日志文件的格式:

日志文件的格式包含以下 4 列:

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

内核及系统日志

由系统服务rsyslog 统一管理

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

日志消息的级别

级号消息级别说明
0EMERG紧急会导致主机系统不可用的情况
1ALERT警告必须马上采取措施解决的问题
2CRIT严重比较严重的情况
3ERR错误运行出现错误
4WARNING提醒可能会影响系统功能的事件
5NOTICE注意不会影响系统但值得注意
6INFO信息一般信息
7DEBUG调试程序或系统调试信息等

用户日志分析

  • 保存了用户登录、退出系统等相关信息
    • /var/log/lastlog:最近的用户登录事件
    • /var/log/wtmp:用户登录、注销及系统开、关机事件
    • /var/run/utmp:当前登录的每个用户的详细信息
    • /var/log/secure:与用户验证相关的安全性事件
  • 分析工具
    • users、who、w、last、lastb

程序日志分析

  • 由相应的应用程序独立进行管理
    • Web服务:/var/log/httpd/
      • access_log、errorr_log
    • 代理服务:/var/log/squid/
      • access.log、cache.log、
    • FTP服务:/var/log/xferlog
  • 分析工具
    • 文本查看、grep过滤检索、Webmin管理套件中查看
    • awk、sed等文本过滤、格式化编辑工具
    • Webalizer、Awstats等专用日志分析工具

日志管理策略

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

总结

深入理解Linux文件系统与日志分析,需要理解Linux文件系统与日志分析的命令

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值