深入理解Linux文件系统

一、inode 和 block概述

        文件是存储在硬盘上的,硬盘最小存储叫做扇区,每个扇区512字节操作系统读取硬盘信息,不会一个一个扇区读取。实际情况一 下连续读取多个扇区,-次性读取多个扇区,叫做块(Block) ,这种多个扇区组成的“块”是文件存取的最小单位,最常见的4K,就是8个扇区组成的一个Block块,512字节* 8= 4096字节

         文件数据是存储在“块中”,那还必须找一个地方存储文件的元信息。

         元信息主要包括文件创建者、文件的创建日期、文件的大小等,这种元信息的区域叫做inode节点也叫做'索引号’也叫作节点号,一个文件必须占用一个i节点,至少一个block.

         文件的数据包括-部分: 1、元信息(inode)    2、实际数据(block)

实验:查看i节点,这里用三种方法,对比其显示的情况。

   1、Ls -i查看文件的i节点 直接查看当面目录的文件及隐藏文件的所对应的inode信息

       

    2、ll -i查看文件的i节点 直接查看当前目录文件名的所对应的inode信息

     

    3、stat查看文件的i节点 通过查看文件inode信息而查看到inode号码

      

    4、df -i查看每个分区的对应inode总数和已经使用的inode数量

      

二、软硬链接详解

           在linux系统下的软件文件有2种,- 种类似Windows的快捷方式功能的文件,可以快速连接到文件或者目录,称之为软连  接,另外一种是通过inode连接产生新的文件名,二部是产生新的文件,称之为硬连接

    1、 硬链接

        一般情况下,文件名和inode号码是一-对应关系, 每个inode号码对应一个文件名。但是linux系统允许多个文件名指向同一个inode号码, 这意味着,可以不同的文件名访问同样的内容,In命令可以创建硬连接。

命令格式为:

In源文件目标文件

       运行该命令以后,源文件与目标文件的inode号码相同,都是指向同-个inode, inode信息中的连接数这时就会增加1当一个文件拥有多个硬连接时,对文件内容修改,会影响所有文件名,但是删除一个文件名, 不会影响另外一个文件名称访问,删除一个文件名, 只会inode中的连接数减1,需要注意的是不能对目录做硬连接。

    2、软链接

     软连接就是创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件名称列如,文件3r和2的inode号码虽然不-样,但是文件3r的,内容是文件2的路径,读取文件3r时系统会自动访问者导向文件2,这时,文件3r就称为文件2的'软连接或者符号连接

     实验

       

三、恢复误删除的文件

     分析:何为删除

      删除一个文件,实际上并不清除inode节点和block的数据,只是在这个文件的父目录里面的block中,删除这个文件的名字。Linux是通过Link的数量来控制文件删除的,只有当-个文件不存在任何Link的时候,这个文件才会被删除。 在Linux系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情况,尤其对于客户企业中一 些新手。当然,这里所指的是彻底删除,即已经不能通过“回收站”找回的情况,比如使用"rm -rf" 来删除数据。针对Linux下的EXT文件系统,可用的恢复工具有debugfs、 ext3grep、 extundelete等。其中extundelete是一个开源的Linux数据恢复工具,支持ext3、 ext4文件系统。在数据被误删除后,第-时间要做的就是卸载被删除数据所在的分区,如果是根分区的数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的inode节点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,这些数据就真的丢失了,恢复工具也回天无力。所以以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数据成功的比例。

        通过extundelete工具做实验

1、1.编译安装extundelete

在编译安装extundelete之前需要先安装两个依赖包e2fsprogs-libs和e2fsprogs- devel,这两个包在系统安装光盘的/Package目录下就有,使用rpm或yum命令将其安装。e2fsprogs- devel安装依赖于libcom err-devel包。安装完依赖包之后,即可将提前上传的extundelete软件包解压、配置、编译、安装

      [[email protected] opt]# yum -y install e2fsprogs- devel e2fsprogs-libs

[[email protected] ~]# yum -y install wget

[[email protected]]#wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.b22

[[email protected] opt]# yum -y install bzip2

[[email protected] opt]# tar xvf extundelete-0.2.4.tar.bz2

[[email protected] opt]# cd extundelete-0.2.4/

[[email protected] extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete && make && make install

[[email protected] extundelete-0.2.4]#cd /usr/local/extundelete/bin

[[email protected] bin]# ln -s /usr/local/extundelete/bin/* /usr/sbin/

   

 

2、安装一个新的磁盘,并分区挂载

 

 

3、我们写入点文件到里面

  

  4、删除a b然后直接卸载/data在直接恢复

   

  

  5、进入恢复的文件查看,已恢复