深入理解Linux文件系统与日志分析(图文并茂,附带实验教程)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
目录
一、inode和block
(一)、概述
1、block(块)
2、inode(节点号)
3、Linux系统文件三个主要的时间属性
4、目录文件的结构
二、链接文件
三、inode节点耗尽故障处理
四、EXT 类型文件恢复
五、xfs 类型文件备份和恢复
六、日志分析
一、日志的功能
二、日志文件的分类
1、内核及系统日志
2、用户日志
3、程序日志
4、日志保存位置
5、主要日志文件介绍
三、内核及系统日志
1、由系统服务 rsyslog 统一管理
2、日志消息的级别
3、日志记录的一般格式
4、用户日志分析
一、inode和block
(一)、概述
文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节,一般连续八个扇区组成一个"块"(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块”中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。因此,一个文件必须占用一个 inode,并且至少占用一个 block。
1、block(块)
连续的八个扇区组成一个 block
是文件存取的最小单位
2、inode(节点号)
中文译名为“索引节点”,也叫i节点
用于存储文件元信息
文件的元信息包含:(不包括文件名)
文件的字节数
文件拥有者的User ID
文件的Group ID
文件的读、写、执行权限
文件的时间戳
使用ls -i 或 stat 查文件的inodo号
3、Linux系统文件三个主要的时间属性
ctime(change time)
最后一次改变文件或目录(属性)的时间
atime(access time)
最后一次访问文件或目录的时间
mtime(modify time)
最后一次修改文件或目录(内容)的时间
4、目录文件的结构
inode不包含文件名。文件名是存放在目录当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。
inode是文件的唯一标识,文件名和inode的对应关系存放在上一级目录的block中;inode里有指向文件block的指针和文件的属性,从而通过block获得文件数据。
磁盘空间是否满了,是由两项参数决定的:
第一个是inode是否满了,第二是block是否满了,任何一个满了都不能存数据。
inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是 inode 区,存放 inode 所包含的信息。每个 inode 的大小,一般是 128 字节或 256 字节。
通常情况下不需要关注单个 inode 的大小,而是需要重点关注 inode 总数。inode 的总数在格式化时就给定了,执行 “df -i”命令即可查看每个硬盘分区对应的的 inode 总数和已经使用的inode 数量。
总结几点:
由于 inode 号码与文件名分离,导致Linux 系统具备以下几种特有的现象:
1.文件名包含特殊字符,可能无法正常删除。这时直接删除 inode,能够起到删除文件的作用;
2.移动文件或重命名文件,只是改变文件名,不影响 inode 号码;
3.打开一个文件以后,系统就以 inode 号码来识别这个文件,不再考虑文件名。
4.文件数据被修改保存后,会生成一个新的 inode 号码。
二、链接文件
为文件或目录建立链接文件
链接文件分类
三、inode节点耗尽故障处理
步骤:
1、使用fdisk创建分区/dev/sdb1,分区大小30M即可
2、fdisk /dev/sdb
mkfs.xfs /dev/sdb1
mkdir /test
mount /dev/sdb1 /mnt 创建磁盘并挂载好
df -i 查看一共有多少个inode 号
3、模拟inode节点耗尽故障
for ((i=1; i<=15360; i++));do touch /abc/$i;done 或 touch {1…15360}.txt
这里的意思是创建连续的文件,从第1个文件一直连续创建到15360个
df -i 使用命令查看inode被使用情况
df -hT 使用命令查看磁盘占用情况
4、#删除文件恢复
rm -rf /test/*
df -i
df -hT 这样磁盘还是正常可以存放文件
四、EXT 类型文件恢复
注:extundelete 是一个开源的 Linux 数据恢复工具,支持 ext3、ext4文件系统。(ext4只能在centos6版本恢复)
步骤:
1使用fdisk创建分区/dev/sdc1,格式化ext3文件系统
fdisk /dev/sdc
mkfs.ext3 /dev/sdc1
mkdir /test
mount /dev/sdc1 /test
df -hT
2、安装依赖包
yum -y install e2fsprogs-devel e2fsprogs-libs
#编译安装 extundelete
cd /test
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4/
./configure --prefix=/usr/local/extundelete && make && make install
ln -s /usr/local/extundelete/bin/* /usr/bin/
3、模拟删除并执行恢复操作
cd /abc
echo a>a
echo a>b 在abc文件夹下面创建文件
echo a>c
echo a>d
ls 查一下
extundelete /dev/sdc1 --inode 2 #查看文件系统/dev/sdc1下存在哪些文件,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。
rm -rf a b
extundelete /dev/sdc1 --inode 2
cd ~
umount /abc
extundelete /dev/sdc1 --restore-all #恢复/dev/sdc1 文件系统下的所有内容
#在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件
ls RECOVERED_FILES/
五、xfs 类型文件备份和恢复
entOS 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命令查看
下面就模拟恢复一下xfs类型的文件,具体步骤如下:
1、使用fdisk创建分区/dev/sdb1,格式化xfs文件系统
fdisk /dev/sdb
partprobe /dev/sdb 万一没出来sdb1 可以刷新一下
mkfs.xfs /dev/sdb1
mkdir /abc
mount /dev/sdb1 /abc
2、在/abc文件夹下面放一些文件,待会删除模拟恢复
cd /abc
cp /etc/passwd ./
mkdir 123
cd 123
touch 11111
3、使用 xfsdump 命令备份整个分区
rpm -qa | grep xfsdump 之前都检查过安装好了
yum install -y xfsdump
xfsdump -f /opt/dump_sdb1 /dev/sdb1 -L dump_sdb1 -M sdb1
4、模拟数据丢失并使用 xfsrestore 命令恢复文件
cd /abc/
rm -rf ./* 删除abc里面的所有文件 模拟恢复
ls
六、日志分析
一、日志的功能
用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
二、日志文件的分类
1、内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
主配置文件/etc/rsyslog.conf
2、用户日志
记录系统用户登录及退出系统的相关信息
3、程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
4、日志保存位置
默认位于:/var/log目录下
5、主要日志文件介绍
三、内核及系统日志
1、由系统服务 rsyslog 统一管理
vim /etc/rsyslog.conf #查看rsyslog.conf配置文件
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info #表示info等级及以上的所有等级的信息都写到对应的日志文件里
mail.none #表示某事件的信息不写到日志文件里(这里比如是邮件)
2、日志消息的级别
Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要):
级号 | 消息 | 级别 | 说明 |
0 | EMERG | (紧急): | 会导致主机系统不可用的情况。 |
1 | ALERT | (警告): | 必须马上采取措施解决的问题。 |
2 | CRIT | (严重): | 比较严重的情况。 |
3 | ERR | (错误): | 运行出现错误。 |
4 | WARNING | (提醒): | 可能影响系统功能,需要提醒用户的重要事件。 |
5 | NOTICE | (注意): | 不会影响正常功能,但是需要注意的事件。 |
6 | DEBUG | (调试): | 程序或系统调试信息等。 |
3、日志记录的一般格式
比如:公共日志/var/log/messages 文件的记录格式
时间标签:消息发出的日期和时间。
主机名:生成消息的计算机的名称。
子系统名称:发出消息的应用程序的名称。
消息:消息的具体内容。
4、用户日志分析
保存了用户登录、退出系统等相关信息
/var/log/lastlog:最近的用户登录事件
/var/log/wtmp:用户登录、注销及系统开、关机事件
/var/run/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件
分析工具
users 、who、w、last、lastb
last 命令用于查询成功登录到系统的用户记录
lastb 命令用于查询登录失败的用户记录
————————————————