深入理解Linux文件系统与日志分析
inode和block
■inode和block概述
●文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
●一般连续八个扇区组成一一个"块"(block),一-个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
●文件数据包括实际数据与元信息( 类似文件属性)。文件数据存储在“块"中,存储文件元信息( 比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。 因此,一-个文件必须占用一一个inode, 并且至少占用一一个block。inode不包含文件名。文件名是存放在目录当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
●每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
●所以,当用户在Linux系统中试图访问一-个文件时,系统会先根据文件名去查找它对应的inode号码; 通过inode号码,获取inode信息;根据inode信息, 看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block, 并读取数据。
●查看文件名对应的inode 号码有两种方式:
ls -i文件名
stat 文件名
■inode内容
inode包含文件的元信息:
●文件的字节数
●文件拥有者的User ID
●文件的Group lD
●文件的读、写、执行权限
●文件的时间戳
■用stat命令可以查看某个文件的inode信息
●示例: stat aa.txt
■Linux系统文件三个主要的时间属性
●ctime(change time)
◆最后一次改变文件或目录(属性)的时间
●atime(access time)
◆最后一次访问文件或目录的时间
●mtime(modify time)
◆最后一次修改文件或目录(内容)的时间
■inode的内容
文件名1 | inode号码1 |
---|---|
文件名2 | inode号码2 |
●目录文件的结构:
◆目录也是一种文件
◆目录文件的结构
●每个inode都有一个号码,操作系统用inode号码来识别不同的文件
●Linux系统内部不使用文件名,而使用inode号码来识别文件
●对于用户,文件名只是inode号码便于识别的别称
■用户通过文件名打开文件时,系统内部的过程
1.系统找到这个文件名对应的inode号码
2.通过inode号码,获取inode信息
3.根据inode信息,找到文件数据所在的block,读出数据
■查看inode号码的方法
●ls -i命令:查看文件名对应的inode号码
ls -i aa.txt
●stat命令:查看文件inode信息中的inode号码
stat aa.txt
■inode的大小
●inode也会消耗硬盘空间
◆每个inode的大小
◆—般是128字节或256字节
●格式化文件系统时确定inode的总数
●使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
注意:由于inode 号码与文件名分离,导致Linux 系统具备以下几种特有的现象:
1.文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用;
2.移动文件或重命名文件,只是改变文件名,不影响inode 号码;
3.打开一个文件以后,系统就以inode 号码来识别这个文件,不再考虑文件名。
4.文件数据被修改保存后,会生成一一个新的inode 号码。
find ./ -inum 52305140 -exec rm -i {} ;
find ./ -inum 50464299 -delete
■链接文件
●为文件或目录建立链接文件
●链接文件分类
◆硬链接
ln 源文件目标位置
◆软链接
ln [-s] 源文件或目录... 链接文件或目标位置
恢复误删除文件
■恢复EXT类型
先新建磁盘
格式化磁盘
挂载这个磁盘
使用yum安装e2fsprogs-devel e2fsprogs-libs
然后下载安装wget
http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
解压
配置
创建软链接,把前者文件放入/usr/bin目录中,让系统能识别extundelete的所有命令
■模拟删除
■xfs类型的文件备份和恢复
●xfsdump 的命令格式为:
xfsdump -f备份存放位置要备份的路径或设备文件
●xfsdump 命令常用的选项:
-f: 指定备份文件目录.
-L: 指定标签session label
-M: 指定设备标签media label
-s: 备份单个文件,-s后面不能直接跟路径
●xfsdump 使用限制:
1.只能备份已挂载的文件系统
2.必须使用root的权限才能操作:
3.只能备份XFS文件系统
4.备份后的数据只能让xfsrestore解析
5.不能备份两个具有相同UUID的文件系统(可用blkid命令查看)
■配置:
新建磁盘分区/dev/sdc1,大小随意,格式化为xfs,并挂载到新建的/zhangsan目录下
进入张三目录下,先复制一个文件进去,再新建一个目录和文件
使用xfsdump备份整个分区/dev/sdc1 到目录/opt/dump_sdc1下
删除文件来达到模拟数据丢失的状态,并使用xfsrestore命令恢复文件
■日志的功能
●用于记录系统、程序运行中发生的各种事件
●通过阅读日志,有助于诊断和解决系统故障
■日志文件的分类
●内核及系统日志
◆由系统服务rsyslog统一进行管理 ,日志格式基本相似
◆主配置文件/etc/rsyslog.conf
●用户日志
◆记录系统用户登录及退出系统的相关信息
●程序日志
◆由各种应用程序独立管理的日志文件,记录格式不统一
■日志保存位置
●默认位于: /var/log目录下
■主要日志文件介绍
内核及公共消息日志 | ● /var/log/messages |
---|---|
计划任务日志 | ● /var/log/cron |
系统引导日志 | ● /var/log/dmesg |
邮件系统日志 | ● /var/log/maillog |
用户登录日志 | ● /var/log/lastlog ● /var/log/secure ● /varllog/wtmp ● /var/run/btmp |
■常见的一些日志
●内核及系统日志由系统服务rsyslog统一管理,主配置文件为/etc/rsyslog. conf
Linux操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下。
●常见的一一些日志文件:
◆内核及公共消息日志:
/var/log/messages: 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、I0错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,–般都可以从该日志文件中获得相关的事件记录信息。
◆计划任务日志:
/var/log/cron: 记录crond计划任务产生的事件信息。
◆系统引导日志: .
/var/ log/ dmesg: 记录Linux系统在引导过程中的各种事件信息。
◆邮件系统日志:
/var/ log/maillog: 记录进入或发出系统的电子邮件活动。
◆用户登录日志:
/var/log/ secure: 记录用户认证相关的安全事件信息。
/var/log/lastlog: 记录每个用户最近的登录事件。二进制格式
/var/log/wtmp: 记录每个用户登录、注销及系统启动和停机事件。二进制格式
/var/run/btmp:记录失败的、错误的登录尝试及验证事件。二进制格式
查看配置文件
vim /etc/ rsyslog. conf #查看rsyslog. conf配置文件
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info #表示info等级及以上的所有等级的信息都写到对应的日志文件里
mail.none #表示某事件的信息不写到日志文件里(这里比如是邮件)
■日志消息的级别
级号 | 消息 | 级别 | 说明 |
---|---|---|---|
0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
1 | ALERT | 警告 | 必须马上采取措施解决的问题 |
2 | CRIT | 严重 | 比较严重的情况 |
3 | ERR | 错误 | 运行出现错误 |
4 | WARNING | 提醒 | 可能会影响系统功能的事件 |
5 | NOTICE | 注意 | 不会影响系统但值得注意 |
6 | INFO | 信息 | 一般信息 |
7 | DEBUG | 调试 | 程序或系统调试信息等 |
■日志记录的一般格式
●内核及大多数系统消息都被记录到公共日志文件/var/log/messages中,而其他一些程序消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者直接发送给指定用户
■日志管理策略
●及时做好备份和归档
●延长日志保存期限
●控制日志访问权限:日志中会包含各类敏感信息
●集中管理日志:将日志统一发送至日志文件系统服务器,便于管理,分析,统一规划,避免日志信息以外丢失,被恶意篡改,删除等