文章目录
深入理解Linux文件系统与日志分析
一、inode与block
概述
1、文件数据包括元信息与实际数据
2、文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
3、block(块)
连续的八个扇区组成一个block
是文件存取的最小单位
4、inode(索引节点)
中文译名为“索引节点”,也叫i节点
用于存储文件元信息(描述本身属性的输出信息)
5、文件数据存在块中
文件元信息存在inode中
二、inode
1、inode包含文件的元信息
文件的字节数
文件拥有者的User ID
文件的Group ID
文件的读、写、执行权限
文件的时间戳
…
2、stat命令
用stst命令可以查看某个文件的inode信息
命令格式:stat 文件名
3、配合find使用
再用find命令查找特定条件的文件时可以用以下的条件
Access Time:简写为atime,表示文件的访问时间,当文件内容被访问时,更新这个时间
Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间
ChangeTime:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限等
4、inode大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域,一个是数据区,存放文件数据,另一个是inode区(inode table),存放inode所包含的信息
每个inode节点的大小,一般是128字节或256字节,inode节点的总数,在格式化时就给定,一般是每1KB或者每2KB就设置一个inode。
1、df命令
查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令
df -i
df -hit
2、查看inode节点大小的命令
sudo dumpe2fs -h /dev/hda | grep “Inode size”
3、特有的现象
由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象:
文件名包含特殊字符,可能无法正常删除,这是直接删除inode,能够起到删除文件的作用
移动文件或重命名文件,只是改变文件名,不影响inode号码
打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名
文件数据被修改保存后,会生成一个新的inode号码
4、删除的流程
rm -rf 文件名(使用rm -rf对文件进行删除)
找到文件名→→根据文件名找到文件的inode节点→→最后删除数据
find ./ inum inode号 -delete
对inode号进行直接删除
5、inode耗尽导致磁盘故障实际问题
在一台配置较低的Linux(内存,硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df-h命令看一下磁盘使用情况,发现/data分区只使用了60%,还有12G剩余空间,按理说不会出现这种问题,后来用df-i查看以下/data分区的inode,发现已经用满,导致系统无法创建新目录和文件。
查找原因:/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
解决方案:
1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
2、用软链接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题。
三、日志文件
内核及系统日志由系统服务rsyslog 统一管理,主配置文件为/etc/rsyslog.conf
Linux操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/1og/下
1、日志的功能
用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
2、日志文件的分类
内核及系统日志:
由系统服务rsyslog统一进行管理,日志格式基本相似
用户日志:
记录系统用户登录及退出系统的相关信息
程序日志:
由各种应用程序独立管理的日志文件,记录格式不统一
3、日志的作用
辅助排障
数据恢复
数据分析
4、日志记录的一般格式
时间标签 —主机名—子系统名称—消息字段
5、用户日志的分析
保存了用户登录、退出系统等相关信息
/var/log/lastlog:最近的用户登录时间
/var/log/wtmp:用户登录、注销及系统开、关机事件
/var/run/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性时间
分析工具
users:命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话,如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。
who:命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理,who的默认输出包括用户名、终端类型、登录日期及远程主机。
w:命令用于显示当前系统中的每个用户及其所运行的进程信息,比users、who输出的内容要丰富一些。
last :命令用于查看成功登录到系统的用户记录,最近的登录情况将显示在最前面,通过last命令可以掌握 linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵。
lastb:命令用于查询登录失败的用户记录,如登录的用户错误、密码不正确等情况将记录在案。登录失败的情况属于安全事件、表示可能有人在尝试猜解你的密码,除了使用lastb命令查看以外,也可以直接从安全日志文件/var/log/secure中获得相关信息。
journalctl:可以使用 journalctl 查看所有日志(内核日志和应用日志),日志的配置文件 /etc/systemd/journald.conf
6、日志管理
及时做好备份和归档
延长日志保存期限
控制日志访问权限
日志中可能包含各类敏感信息,如账户、口令等
集中管理日志
将服务器的日志发到统一的日志文件服务器
便于日志信息的统一收集、整理和分析
使用 journalctl 查看所有日志(内核日志和应用日志),日志的配置文件 /etc/systemd/journald.conf
6、日志管理
及时做好备份和归档
延长日志保存期限
控制日志访问权限
日志中可能包含各类敏感信息,如账户、口令等
集中管理日志
将服务器的日志发到统一的日志文件服务器
便于日志信息的统一收集、整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除