文章目录
前言
不知道大家在接触Linux的时候有没有想过一个问题,就是操作Linux时,它怎么去读取文件里的数据的,为什么在处理一些数据的时候会报错出现故障,那这些故障的起因又是什么。抱着这样的疑问,了解关于文件系统与日志分析便能明了。
一、inode和block概述
1.了解inode和block
inode
中文名译名为“索引节点”,也叫i节点,用于存储文件元信息
文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在"块""中,存储文件元信息(比如文件的创建者、创建日期、文件大小文件权限等)的区域就叫做inode。
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
因此,一个文件必须占用一个inode,并且至少占用一个block。inode不包含文件名。文件名是存放在目录当中的。
block(块)
连续的八个扇区组成一个block,是文件存取的最小单位
一般连续八个扇区组成一个"块"(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。
2.inode的内容
2.1.inode包含文件的元信息
用stat命令或ls -l可以查看某个文件的inode信息
文件的字节数
文件拥有者的User lD 不包含文件名
文件的Group ID
文件的读、写、执行权限
文件的时间戳
2.2.三个主要的时间属性
ctime(change time)
最后一次改变文件或目录(属性)的时间
atime(access time)
最后一次访问文件或目录的时间
mtime(modify time)
最后一次修改文件或目录(内容)的时间
2.3.inode的号码
用户通过文件名打开文件时,系统内部的过程
1.系统找到这个文件名对应的inode号码
2.通过inode号码,获取inode信息
3.根据inode信息,找到文件数据所在的block,读出数据
查看inode号码的方法
ls -l命令:查看文件名对应的inode号码
ls -l aa.txt
stat命令:查看文件inode信息中的inode号码
stat aa.txt
2.4.inode的大小
inode也会消耗硬盘空间
每个inode的大小—般是128字节或256字节
格式化文件系统时确定inode的总数,inode的总数在系统初始化时就能决定的
使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
3.inode的特殊作用
由于inode号码与文件名分离,导致一些Unix/linux系统具有以下的现象
当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
find ./ -inum [inode号] -delete或find ./ -inum [inode号] -exec rm -i { } \ ;
移动或重命名文件时,只改变文件名,不影响inode号码
打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
文件数据被修改保存后,会生成一个新的inode号码
4.inode节点耗尽故障
1.添加新硬盘,用fdisk进行分区,30M即可
2.格式化并挂载
3.模拟inode节点耗尽故障
没有了节点,文件也无法创建
4.删除文件恢复
5.EXT类型文件恢复
extundelete是一个开源的Linux数据恢复工具,支持ext3、ext4文件系统。( ext4只能在centos6版本恢复,ext3只能在7版本恢复)
1.添加新硬盘进行分区
2.格式化并挂载
3.安装依赖包并编译安装extundelete
4.解压
5.指定安装路径进行软链接
6.创建文件进行测试
查看/dev/sdb1下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的剥
7.删除文件并进行恢复
在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件
二、日志文件
1.日志的功能
用于记录系统、程序运行中发生的各种时间
通过阅读日志,有助于诊断和解决系统故障
2.日志文件的分类
内核及系统日志:
由系统服务rsyslog统一进行管理,日志格式基本相似
用户日志:
记录系统用户登陆及退出系统的相关信息
程序日志:
由各种应用程序独立管理的日志文件,记录格式不统一
3.日志保存位置
默认位于:/var/log目录下
内核及公共消息日志—— /var/log/messages
记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。
对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
计划任务日志—— /var/log/cron
记录crond计划任务产生的事件信息。
系统引导日志—— /var/log/dmesg
记录Linux系统在引导过程中的各种事件信息。
邮件系统日志—— /var/log/maillog
记录进入或发出系统的电子邮件活动。
用户登录日志—— /var/log/lastlog、 /var/log/secure、 /var/log/wtmp 、 /var/run/btmp
记录用户认证相关的安全事件信息;/var/log/lastlog记录每个用户最近的登录事件。
4.内核及系统日志
由系统服务rsyslog统一管理
软件包:rsyslog-7.4.7-16.el7.x86_64
主要程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf
5.日志消息的级别
级号 | 消息 | 级别 | 说明 |
---|---|---|---|
0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
1 | ALERT | 警告 | 必须马上采取措施解决的问题 |
2 | CRIT | 严重 | 比较严重的情况 |
3 | ERR | 错误 | 运行出现错误 |
4 | WARNING | 提醒 | 可能会影响系统功能的事件 |
5 | NOTICE | 注意 | 不会影响系统但值得注意 |
6 | INFO | 信息 | 一般信息 |
7 | DEBUG | 调试 | 程序或系统调试信息等 |
6.内核及系统日志
日志记录的一般格式
Jun 3 13:26:35 localhost vmusr[2439]: [ warning] [GLib-GObject] Two different plugins
Jun 3 13:26:35:时间标签 localhost:主机名 vmusr[2439]::子系统名 [GLib-GObject]:消息字段
7.用户日志分析
保存了用户登陆、退出系统等相关信息
/var/log/lastlog:最近的用户登录事件
/var/log/wtmp:用户登录、注销及系统开、关机事件
/var/run/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件
分析工具
users、who、w、last、lastb
users:命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。
who:命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机。
w:命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的输出内容要丰富一些。
last:命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵。
lastb:命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。
8.日志管理策略
及时作好备份和归档延
延长日志保存期限 建议保留30天日志
控制日志访问权限
日志中可能会包含各类敏感信息,如账户、口令等
集中管理日志 ELK收集日志
将服务器的日志文件发到统一的日志文件服务器
便于日志信息的统一收集、整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除
9.程序日志分析
由相应的应用程序独立进行管理
Web服务:/var/log/httpd/
access_log(访问日志)、error_log(报错日志)
代理服务:/var/log/squid/(代理服务)
access.log(登陆日志)、cache.log(缓存日志)
FTP服务:/var/log/xferlog
分析工具
文本查看、grep过滤检索、Webmin管理套件中查看 cat /var/log/secure | grep error
awk、sed等文本过滤、格式化编辑工具
Webalizer、Awstats等专用日志分析工具
总结
inode和block两者之间是存在联系的,对于inode和block还是需要详细的记住并了解,特别是Linux访问文件的过程这种基本的东西不能忘记。对于inode节点故障恢复倒是较为简单,而ext类型文件恢复思路一定要有。另外,日志是个有利有弊的存在,在工作中需要注意一下,规定一个时间删除所有日志记录或对一些重要的日志进行备份都是比较保险的。