一、inode和block概述
文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是"扇区”,每个扇区存储512字节
block(块)
连续的八个扇区组成一个block
是文件存取的最小单位
inode(索引节点)
中文译名为“索引节点”,也叫i节点
用干存储文件元信息
注:一个文件必须占用一个inode,但至少占用一个block
二、 inode表结构
每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data)
元数据是存放在inode (index node)表中。inode表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
每一个inode表记录对应的保存了以下信息:
inode number节点号
文件类型
权限
UID
GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
硬盘上最小的存储单位为扇区(512字节)
文件存储的最小单位为块8个扇区组成为4k
每个分区都有自己的分区字节
三、三种时间戳
当新创建一个文件时,这个文件的最后访问时间、最后内容修改时间、最后状态更新时间都是一致的。修改一个文件的权限状态信息,只会更新这个文件的最后状态修改时间
对比事例2,这里最后状态时间、最后内容改变时间都被更新了。当修改一个文件时,文件的Modify.Change会被更新
当查看文件时,文件的Access time会更新。
当需要了解这个文件有没有被修改过- Modify Time
当需要了解这个文件最后被查看的时间-Access Time
当需要了解这个文件权限最后变动的时间- Change Time
新建文件的时候三种状态时间是一样的
写内容( echo没打开)最后两种变
修改权限只有最后一种变最近改动
vim打开只有第一种变
四、目录
目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
文件引用一个是inode号
是通过文件名来引用一个文件
一个目录是目录下的文件名和文件inode号之间的映射
cp和inode
cp命令:
分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件
rm命令:
链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode
·如果mv命令的目标和源在同一设备,
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
删除旧的目录对应关系新建目录对应关系
硬盘分区后的结构
五、访问文件的简单流程
inode的大小
inode也会消耗硬盘空间
每个inode的大小
一般是128字节或256字节
格式化文件系统时确定inode的总数
使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
六、文件恢复extundelete
删除一个文件,实际上并不清除inode 节点和block的数据,只是在这个文件的父目录里面的 block 中,删除这个文件的名字。Linux是通过Link的数量来控制文件删除的,只有当一个文件不存在任何Link的时候,这个文件才会被删除。
在Linux系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过“回收站"找回的情况,比如使用"rm -rf"来删除数据。针对Linux下的EXT文件系统,可用的恢复工具有debugfs、ext3grep、extundelete等。其中extundelete是一个开源的 Linux数据恢复工具,支持ext3、ext4文件系统。
恢复EXT类型的文件
编译安装extundelete
在编译安装extundelete之前需要先安装两个依赖包 e2fsprogs-libs和e2fsprogs-devel,这两个包在系统安装光盘的/Package目录下就有,使用rpm 或yum命令将其安装。e2fsprogs-devel安装依赖于libcom_err-devel包