前言
在Linux系统中会出现各种故障,一般情况下故障的状态是很容易发现的而真正故障原因就很难察觉,所以熟悉分析Linux的日志文件就很有必要了,日志文件有助于管理者方便的定位到系统故障的原因。
一、inode与block
其实inode和block之间的关系就像是一本书一样,inode是一本书的目录,一本书会有很多内容,一个知识点或者一个故事会占很多页,一个block就相当于书中的一页内容。 所以说一般情况下一个inode会对应一个或多个block。
一个文件会占用一个Inode(不包含文件名)至少一个block块
inode节点:(文件属性:文件大小、权限、时间戳)
block块:数据文件即编写文件内容大小
文件数据存在于块中 ;文件元信息存在于inode
1.1概述
文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘的最小存储单位叫做"扇区" ( sector )每个扇区存储512字节。
一个文件必须占用一个inode ,至少占用一个block。
1.1.1block(块)
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块" ( block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小 ,最常见的是4KB ,即连续八个扇区组成一个块。
1.1.2inode(索引节点)
文件数据存储在"块”中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode(索引节点),也叫i节点。
1.1.3系统访问文件过程
当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据:
1.2inode的内容
(类似文件属性)
inode包含文件的元信息 :
文件的字节数
文件拥有者的User ID
文件的Group ID
文件的读、写、执行权限
文件的时间戳
PS:不包含文件名
1.3 inode的大小
inode也会消耗硬盘空间:每个inode的大小一般是128字节或者256字节;
格式化文件系统时确定inode的总数;
使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定了,一般是每1KB或每2KB就设置一个inode。
假定在一块1GB的硬盘中,每个inode节点大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘12.8%。
1.3.1 inode 节点耗尽故障处理
实验:
创建磁盘分区
fdisk /dev/sdb ##创建一个30M的磁盘分区
挂载磁盘
mkdir mnt ###创建空目录,用作磁盘挂载点 mkfs.xfs /dev/sdb1 ###格式化磁盘,并写入格式 mount /dev/sdb1 mnt ###将磁盘挂载到空目录下 df -i ###查看磁盘分区inode节点
模拟节点耗尽
当可用inode用完之后磁盘无法写入新的文件,因此要删除无用文件以达到可以解放内存的作用
rm -rf ./* ###删除当前目录下所有 df -i ###显示inode
1.4查找文件对应的inode(内容)
第一种方式: ls -i 第二种方式: df -i 第三种方式: stat
------------------- Linux系统文件三个主要的时间属性--------------------
ctime(change time):最后一次改变文件或目录(属性)的时间
atime(access time):最后一次访问文件或目录的时间
mtime(modify time):最后一次修改文件或目录(内容)的时间
1.5硬盘分区后的结构
1.6文件名包含特殊字符,可能无法正常删除
这时直接删除inode,能够起到删除文件的作用
[root@Kiro opt]# find ./ -inum 67154696 -exec rm -i {} \; [root@Kiro opt]# find ./ -inum 67154696 -delete
二、软连接与硬链接
2.1软硬链接的的格式
硬链接 ln 源文件 目标位置 软链接 ln [-s] 源文件或者目录... 链接文件或者目标位置
2.2软硬链接对比区别
操作和范围 | 软链接 | 硬链接 |
删除原始文件后 | 失效 | 仍然可用 |
使用范围 | 适用于文件或目录 | 只可用于文件 |
保存位置 | 与原始文件可以位于不同的文件系统中 | 必须与原始文件在同一个文件系统(如一个Linux分区)内 |
三、恢复删除的文件
安装依赖包
e2fsprogs-libs-1.41.12-18.el6.x86_64rpm e2fsprogs-devel-1.41.12-18.el6.x86_64rpm
配置、编译及安装
extundelete-0.2.4.tar.bz2
extundelete是一个开源的Linux数据恢复工具,支持ext3、ext4文件系统。(ext4只能在centos6版本恢复)#使用fdisk创建分区/dev/sdcl格式化ext3文件系统
http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.
可以在这个网站里下载extundelete软件包
3.1恢复EXT类型的文件
extundelete是一个开源的Linux 数据恢复工具,支持ext3、ext4文件系统。
(ext4只能在centos6版本恢复)
3.1.1操作步骤及命令详解
先使用fdisk命令对新添加的磁盘分区并格式化
命令:
fdisk /dev/sdb partprobe /dev/sdb(不重启识别新分区)或者 mkdisk.ext3 /dev/sdb1 对磁盘进行格式化 mkdir /test 创建一个文件夹 接着将磁盘挂载到文件加上 mount /dev/sdb1 /test df -h查看挂载成功没
安装依赖包
yum install -y e2fsprogs-devel e2fsprogs-libs
将extundelete软件包上传到机器上
如果没有可以用wget命令下载
wget http://nchc.dl.sourceforge.net/project
/extundelete/extundelete/0.2.4/extundelete-0.2.4.
下载完后解压文件 tar jxvf extundelete-0.2.4.tar.bz2
解压完成后切换目录到他所在目录下进行编译安装(相当于你下载了一个安装包压缩包,你解压之后还要对他进行安装)
cd extundelete-0.2.4/
编译安装
用脚本进行配置
./configure --prefix=/usr/1ocal/extundelete 然后make && make install
安装完成后就可以测试删除恢复了
3.1.2示例
先添加一块硬盘在进行分区
现在直接运行命令是运行不了的必须运行/usr/local/extundelete/bin 才能运行 所以要软链接一下才方便使用 ln -s /usr/local/extundelete/bin/* /usr/bin/
模拟删除并执行恢复操作
cd /test echo a>a echo a>b echo a>c echo a>d ls extundelete /dev/sdb1 – inode 2 ,
查看文件系统/dev/sdb1下存在哪些文件具体的使用情况。i节点是从2开始的,2代表该文件系统最开始的目录。
开始测试删除恢复
extundelete /dev/sdc1 --inode 2 在查看文件是否还存在
开始恢复数据 extundelete /dev/sdb1 --restore-all ###恢复/dev/sdb1文件系统下所有内容
恢复数据前先解挂载,防止数据重复
恢复所有内容
等待恢复完成后在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件
ls 查看一下目录
RECOVERED_FILES/
刚删除的文件全在这个目录下