前言
最近遇到一些问题,关于硬盘明明还有内存,结果数据死活存不进去,寻思半天,怎么也没有找到原因,后来明白了是inode的问题,当indoe节点枯竭了,即使还有内存,也是无法存进去的
一、inode和block
1、block(块):第一:连续的八个扇区组成一个block[文件储存在硬盘上,硬盘最小储存单位是扇区,一个扇区512字节,八个扇区共512*8=4096字节,共4K大小];第二:是文件存取的最小单位
2、Inode(索引节点):第一:中文译为“索引节点”,也叫i节点;第二:用于储存文件元信息[文件数据包括元信息与实际数据,元信息又称文件属性,包括:文件大小;文件权限;文件时间等]
3、注意:每个inode都有一个号码,操作系统用inode号码来识别不同的文件,Linux系统内部不使用文件名,而使用inode号码来识别,对于系统来说,文件名只是Inode号码便于识别的别称,注意:文件名和inode号码是一一对应的。换句话说:系统先调用文件名,匹配相对于的inode号码,再根据号码调用inode信息内的元信息(文件属性)
4、Inode号
4.1、用户通过文件名打开文件时,首先系统找到这个文件名对应的inode号码,其次通过inode号码,获得inode信息,最后根据inode信息,找到文件数据所在的block,读出数据。
4.2、查看inode号码的方法
5.文件时间戳
6、inode的大小首先Inode也会消耗硬盘空间,一般是128字节或者256字节,其次格式化文件系统时确定inode的总数,使用df -i命令可以查看每个磁盘分区的Inode总数和已经使用的数量
7、 inode号与文件名分离导致一些Unix/linux系统具有的一些现象
7.1、当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
7.2、移动或重命名文件时,只改变文件名,不影响inode号码
7.3、打开一个文件后,系统通过inode号码来识别该文件,不在考虑文件名
8、案例1:查看inode号码
9、案例2:inode详细案例
10、案例3:时间戳的案例
1、浏览文件,inode号不会发生变化
2、当修改或者改动时,Inode号码就会重置
11、df案例
12、文件名包含特殊字符,可能无法正常删除文件故障
13、inode节点耗尽故障处理
1、新建硬盘-—>重启------>分区----->查看情况
2、格式化
3、挂载
4、发现硬盘节点枯竭
5、删除无用文件即可解决问题
二、恢复XFS类型文件
1、XFS的命令格式:xfsdump -f备份存放位置 要备份的路径或者设备文件
2、Xfsdump备份级别(默认0):0:完全备份;1-9增量备份3、Xfsdump常用选项: -f、-L 、-M、-s
4、Xfsrestore命令格式:xfsrestore -f 恢复文件的位置 存放恢复后的位置
5、xfsdump使用限制
5.1.只能备份已挂载的文件系统
5.2.必须使用root的权限才能操作
5.3.只能备份XFS文件系统
5.4.备份后的数据只能让xfsrestore解析
5.5.不能备份两个具有相同UUID的文件系统(可用blkid命令查看)
6、恢复案例
三、日志
1、日志的功能首先用于记录系统,程序运行中发生的各种事件,其次通过阅读日志,有助于诊断和解决系统故障
2、日志文件的分类
2.1、内核及系统日志:由系统服务器rsyslog统一进行管理,日志格式基本相似
2.2、用户日志:记录系统用户登陆及退出系统的相关信息
2.3、程序日志:由各种应用程序独立管理的日志文件,记录格式不统一
3、常见日志文件
3.1、内核及公共消息日志:/var/log/messages: 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
3.2、计划任务日志:/var/1og/cron: 记录crond计划任务产生的事件信息。
3.3、系统引导日志:/var/log/dmesg: 记录Linux系统在引导过程中的各种事件信息。
3.4、邮件系统日志:/var/log/maillog: 记录进入或发出系统的电子邮件活动。
4、用户登陆日志
4.1、var/log/secure: 记录用户认证相关的安全事件信息。
4.2、/var/log/lastlog: 记录每个用户最近的登录事件{二进制格式}
4.3、/var/1og/wtmp: 记录每个用户登录、注销及系统启动和停机事件(二进制格式)
4.4、/var/run/btmp: 记录失败的、错误的登录尝试及验证事件(二进制格式)
5、分析工具
Users:命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
Who:命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机
W:命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的输出内容要丰富一些
Last:命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵Astb:命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息
6、日志管理策略
6.1、及时做好备份和归档
6.2、延长日志保存期限
6.3、控制日志访问权限:日志中可能会包含各类敏感信息,如账户、口令等
6.4、集中管理日志
7、重点:日志消息的优先级别
总结
关于inode号和文件名的,系统先调用文件名,去匹配inode号码,再去匹配判断该用户是否由权限打开该文件,再进行操作,那么谈到inode,在查看文件时,节点号是不会发生变化的,但当改变或者修改时,节点号就会重置,产生变化,当然,一个硬盘里的节点是有限的,当节点枯竭时,解决办法就是删除文件,释放节点。存在删除,就存在恢复,恢复的前提是需要备份,当然,不可以删除根,毕竟如果连系统都没了,用什么恢复呢。说到系统,linux系统内的日志是非常由有用的,实时跟踪不仅可以查到系统的错误,也可以知道系统的使用情况。当然,日志也是需要及时备份和归档的,如果有心人故意删除,也是可以及时恢复,找到幕后黑手。