深入理解Linux文件系统与日志分析
深入理解Linux文件系统与日志分析
inode与block概述
- 文件数据包括元信息(除了文件名以外的其他文件属性)和实际数据
- 文件储存在硬盘上,硬盘最小储存单位是扇区,每个扇区储存512字节
- 系统存取文件数据时是通过块(block)来读取,块(block)由连续的8个扇区组成,4kb大小,块是文件存储的最小单位
inode(索引节点):
- 文件译名为索引节点,也叫i节点
- 用于存储文件元信息
- 元信息储存在inode中
- 实际数据储存在block中
- 一个文件必须占用一个inode,但至少占用一个block
元信息包含(inode不包含文件名,唯一):
- 文件的字节数
- 文件拥有者的User ID
- 文件的Group ID
- 文件的读、写、执行权限
- 文件袋时间戳
查看某个文件的inode信息(stat、ls -i、ls -il)
- [root@localhost ~]#ls -i
- [root@localhost ~]#ls -il
- [root@localhost ~]#stat anaconda-ks.cfg
linux系统文件三个主要的时间属性
- atime(access time)
最后一次访问文件或目录的时间 - ctime (change time)
最后一次改变文件或目录(属性)的时间 - mtime(modify time)
最后一次修改文件或目录(内容)的时间
- [root@localhost data]#cat 1.txt
atime (最近访问时间) 改变
- [root@localhost data]#echo 123 > 1.txt
- 目录文件的结构
目录也是一种文件
目录文件的结构 - 每个inode都有一个号码,操作系统用inode号码来识别不同的文件
- Linux系统内部不使用文件名,而使用inode号码来识别文件
- 对于用户,文件名只是inode号码便于识别的别称
- 文件存储时,文件名和文件数据分开存储的
- 文件数据包含元信息和实际数据
- 文件名在目录文件中
- 元信息(包含除了文件名以外的文件属性)在inode中
- 实际数据在块(block)中
inode的号码
用户访问文件的监督流程
1、系统找到这个文件名对应的inode号码
2、通过inode号码,获取inode信息
3、根据inode信息里的文件属性,去决定该用户是否有读取该文件的权限,如果有,则找到文件数据所在的block,读出数据;如果没有,则拒绝访问
查看inode号码的方法
ls -i a.txt(查看文件名对应的inode号码)
stat a.txt(查看文件inode信息中的inode号码)
inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分为两个区域:
一个是数据区(存放文件数据);另一个是inode区(存放inode所包含的信息)。
每个inode的大小,一般是128字节或256字节
通常情况下不需要关注单个inode的大小,而是需要重点关注inode总数。inode的总数在格式化时就给定了,执行“df -i” 命令即可查看每个硬盘分区对应的inode总数和已经使用的inode数量。
由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象:
- 文件名包含特殊字符,可能无法正常删除,这时直接删除inode,能起到删除的作用;
- 移动文件或重命名文件,只是改变文件名,不影响inode号码;
- 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名;
- 使用vi编辑器修改文件数据保存后,会生成一个新的inode号码(因为vi编辑器是会替换原文件的)
软连接(又称符号链接) | 硬链接 | |
---|---|---|
删除原始文件后 | 失效 | 仍旧可用 |
使用范围 | 适用于文件或目录 | 只可用于文件 |
保存位置 | 与原始文件可以位于不同的文件系统中 | 必须与原文件在同一文件系统(如一个Linux分区)内 |
实验
一、模拟inode号被占满的情况下,能否再写入文件
实验步骤:
[root@localhost ~]#fdisk /dev/sdb(建立一个分区)
建立文件系统并挂载
消耗所有inode
结论:inode号被占满的情况下,无法再写入文件
二、恢复EXT类型的文件
步骤:
使用fdisk创建分区、dev/sdc1,格式化ext3文件系统
安装依赖包
编译安装(extundelete)
模拟删除并执行恢复操作
[root@localhost data]#extundelete /dev/sdb1 --inode 2
查看文件系统、dev/sdc1下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录。
删除:
5、恢复/dev/sdc1文件系统下的所有内容
[root@localhost ~]#extundelete /dev/sdb1 --restore-all
三、备份恢复
xfs类型文件备份和恢复
centos 7 系统默认采用xfs类型的文件,可使用xfsdump 与 xfsrestore 工具进行备份恢复。
xfsdump 的备份级别有两种:0 表示完全备份;1-9 表示增量备份。xfsdump 的备份级别默认为0.
xfsdump 命令常用的选项:
-f | 指定备份文件目录 |
---|---|
-L | 指定标签 session label |
-M | 指定设备标签 media label |
-s | 备份单个文件,-s后面不能直接跟路径 |
xfsdump使用限制:
- 只能备份已挂载的文件系统
- 必须使用root的权限才能操作
- 只能备份XFS文件系统
- 备份后的数据只能让xfssrestore解析
- 不能备份两个具有相同UUID的文件系统(可用blkid命令查看)
命令格式:
xfssdump -f 备份存放位置 要备份的路径或设备文件
- 使用fdisk创建分区、dev/sdb1,格式化xfs文件系统
[root@localhost ~]#fdisk /dev/sdb
[root@localhost ~]#mkfs.xfs /dev/sdb1
[root@localhost ~]#mount /dev/sdb1 /data/ - 使用xfsdump命令备份整个分区
或者(备份):
[root@localhost opt]#xfsdump -f /opt/dump_ky2 /dev/sdb1 -L dump_ky2 -M sdb1
- 模拟数据丢失并使用xfsrestore命令恢复文件
日志分析
日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
日志的分类
- 内核及系统日志:
1、由系统服务rsyslog统一管理,日志格式基本相似
2、主配置文件/etc/rsyslog.conf - 用户日志:
记录系统用户登录及退出系统的相关信息 - 程序日志:
由各种应用程序独立管理的日志文件,记录格式不一
日志保存位置
默认位于:/var/log 目录下
常见的日志文件
内核及公共消息日志 | /var/log/messages(由rsyslog服务来管理,主配置文件/etc/rsyslog.conf) :记录Linux内核消息及各种应用程序的公共日志信息 |
---|---|
计划任务日志 | /var/log/cron:记录crond 计划任务产生的事件信息 |
系统引导日志 | /var/log/dmesg:记录Linux系统在引导过程中的各种事件信息 |
邮件系统日志 | /var/log/maillog:记录进入或发出系统的电子邮件活动 |
用户登录日志 | /var/log/secure:记录用户认证相关的安全事件信息 |
Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要):
0 | EMERG(emerg 紧急):会导致主机系统不可用的情况。如系统崩溃 |
---|---|
1 | ALERT(alert 警告) :必须马上采取措施解决的问题。如数据库被破坏 |
2 | CRIT(crit 严重) :比较严重的情况。如硬盘错误,可能会阻碍程序的部分功能 |
3 | ERR(err 错误) :运行出现错误。不是非常紧急,尽快修复的 |
4 | WARNING(warning 提醒):可能影响系统功能,需要提醒用户的重要事件。不是错误,如磁盘用了85%等 |
5 | NOTICE(notice 注意):不会影响正常功能,但需要注意的事件。无需处理 |
6 | INFO(info 信息) :一般信息。正常的系统信息 |
7 | DEBUG(debug 调试) :程序或系统调试信息等。包含详细开发信息,调试程序时使用 |
日志记录的一般格式
用户日志分析
- 保存了用户登录、退出系统等相关信息
1、/var/log/lastlog:最近的用户登录事件
2、/var/log/wtmp:用户登录、注销及系统开、关机事件
3、/var/log/utmp:当前登录的每个用户的详细信息
4、/var/log/secure:与用户验证相关的安全性事件 - 分析工具
users、who、w当前系统已经登录的记录
last命令用于查询成功登录到系统的用户记录
lastb命令用于查询登录失败的用户记录
系统日志:/var/log/messages,由rsyslog服务来管理,主配置文件/etc/rsyslog.conf