Linux文件系统与日志分析详解
inode(索引节点/i节点)与block(块)
inode与block的概念
什么是block?
文件储存在硬盘上的,硬盘最小的存储单位叫“扇区”,每个扇区存储512个字节
一般连续8个扇区会组成一个“块”(block),一个块是4K大小,是文件存取的最小单位。
文件名存储在目录文件当中
文件数据包含实际数据与元信息(类似于文件属性),文件数据是存储在“块”当中,
什么是inode?
存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域叫做inode(除文件名以外的所有文件属性和信息) 。因此,一个文件必须占用一个inode,并且至少占用一个块。
inode不包括文件名,文件名是存放在目录当中的,Linux系统中一切皆文件,因此目录也是一种文件。
每个inode都有一个号码,操作系统是用inode号来识别不同的文件。Linux系统内部不使用文件名来识别文件,而是使用inode号来识别文件。对于系统来说,文件名只是inode号便于识别的别称,文件名与inode号使一一对应关系,每个inode号对应一个文件名。
如何查看inode号
查看文件对应的inode号有以下两种方式
- ls -i
- stat +[指定文件]
inode的内容
Linux系统文件的三个主要时间属性
- ctime(change time)
最后一次改变文件或目录(属性)的时间
- atime(access time)
最后一次访问文件或目录的时间
- mtime(modify time)
最后一次修改文件或目录(内容)的时间
inode与文件/目录对应关系
-
目录文件的结构
- 目录也是一种文件
- 目录文件的结构
- 每个inode都有一个号码,操作系统用inode号码来识别不同的文件
-
Linux系统内部不适用文件名,而使用inode号来识别文件
-
对于用户、文件名只是inode号码便于识别的别称
系统访问文件的过程
-
用户通过文件名打开文件时,系统内部的过程
- 系统找到这个文件名对应的inode号码
- 通过inode号码,获取inode信息
- 根据inode信息的权限,查看用户是否具有访问文件的权限,有权限则找到文件数据所在的block,读 出数据;没有权限则拒绝访问
如何删除inode号?
由于inode号与文件名分离,导致Linux系统具备以下几种特有的现象:
- 文件名包含特殊字符,可能无法正常删除。这时直接删除inode号,能够起到删除文件的作用
- 移动文件或重命名文件,只是改变文件名,不影响inode号码
- 打开一个文件以后,系统就以inode号来识别这个文件,不再考虑文件名
- 使用vi编辑器修改文件数据保存后,会生成一个新的inode号
rm命令只能通过文件名删除,无法通过inode号码删除,遇到含有特殊字符的文件,只能通过inode号进行删除,如果想通过inode号删除有以下三种方法:
inode号实验
实验:模拟inode号已经被使用耗尽,存在可用空间却无法创建新文件的情况
实验条件:拥有额外的两块硬盘
如上图,我们为什么要创建ext4类型的文件系统没有使用xfs的常用格式,是因为xfs类型的文件系统统计空间时并不没有ext4格式那么准确,本身的可创建数量可能偏高于给出的可用数量
接下来我们要创建相对应数量的文件(2549个):
从上面操作,我们可以看到虽然我们分区仍然有可用空间,但是我们的inode号已经使用完了,因此无法创建文件。
实验:如何恢复EXT类型的文件
首先我们需要使用到一个名为extundelete的数据恢复工具,这款开源的Linux数据恢复工具,仅支持ext3、ext4文件系统类型的磁盘恢复数据,其中(ext4的文件类型只能在centos6版本中恢复),所以我们这次实验仅使用ext3的文件类型作为恢复用的磁盘文件类型。
实验准备
Linux系统中下载文件
命令1:
wget http://… [-o] #wget后面跟指定路径 -o指定下载目录
命令2:
curl -L http://… [-o] #curl -L选项指定下载的路径 -o指定下载的目录
编译安装extundelete
- 安装依赖包
- e2fsgprogs-libs-1.41.12-18.el6.x86_64rpm
- e2fsgprogs-devel-1.41.12-18.el6.x86_64rpm
- 配置、编译及安装
- extundelete-0.2.4.tar.bz2
演示误删除操作
extundelete /dev/sdc1 --inode 2 #仍然使用该命令查看inode号以2开始的文件
进行文件的恢复
在我们进行文件的恢复之前,一定要进行解挂载的操作,因为在我们工作环境中,数据是会不断进行写入到磁盘空间中的,为了防止之前被删除文件的内容被其他新的文件所替换,我们第一时间先进行解挂载,然后再进行恢复工作
如何进行文件的备份
xfs类型文件备份与恢复
- Centos 7 系统默认采用xfs类型的文件,xfs类型的文件可以使用xfsdump与xfsrestore工具进行备份恢复。
- xfsdump的备份级别有两种:0表示完全备份;1-9表示增量备份。sfsdump的备份级别默认为0。
- 完全备份效率较低,占用磁盘空间高,存在每次的备份都有重复数据备份的情况;增量备份只会去备份上次备份结束后新增加的文件数据。
xfsdump命令
xfsdump命令格式
xfsdump -f #指定备份文件存放的位置 选项后加上需要备份的目录
如何进行备份
可以在命令后使用-L选项加上指定标签 -M选项加上指定设备标签进行免交互的备份操作
linux日志分析
日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
日志文件的分类
-
内核及系统日志
- 由系统服务rsyslog统一进行管理,日志格式基本相似
- 主配置文件/etc/rsyslog.conf
-
用户日志
- 记录系统用户登录及退出系统的相关信息
-
程序日志
- 由各种应用程序独立管理的日志文件,记录格式不统一
日志保存位置
默认位于/var/log目录下,常用的日志文件如下所示
日志配置文件详情
系统日志由系统服务rsyslog统一管理
主要程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf
日志配置文件字段相关含义
首先,进入/etc/rsyslog.conf配置文件中查看配置内容
*.info #表示info等级及以上的所有等级的信息都写道对应的日志文件中
cron.none #表示某事件的信息不写入日志文件中(比如计划任务所产生的时间信息)
日志消息优先级
- mail.info /var/log/maillog #比指定级别更高的日志级别,包括指定级别自身,保存到/var/1og/maillog中
- mail.=info /var/log/maillog #明确指定日志级别为info,保存至/var/log/maillog
- mail.!info /var/1og/maillog #除了指定的日志级别(info)所有日志级别信息,保存至/var/1og/maillog中
- *.info /var/1og/maillog #所有文件info级别以上的日志,保存至/var/1og/maillog
- mail.* /var/1og/maillog #mail的所有日志级别信息,都保存至/var/1og/maillog
- mail.notice;news.info /var/log/maillog #表示mail的notice级别以上的日志和news的info级别以上的日志都保存至/var/log/maillog