最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Linux误删文件,恢复工具extundelete的使用操作

XAMPP相关 admin 225浏览 0评论

【文件存储原理】

Linux下删除文件并不是真实的删除磁盘分区中的文件,而是将文件的 inode 节点中的扇区指针清除,同时释放这些数据对应的数据块,当释放的数据块被操作系统重新分配时,那些被删除的数据就会被覆盖,所以误删除数据后,应马上卸载文件所在的分区

每个文件由 inode 和 block 组成, inode 是文件系统组成的最基本单元,它保存着文件的基本属性(大小、权限、属主组等)和存放的位置信息。而block用来存储数据。类似 key-value , inode 就是 key , block 对应 value ,通过 key 查找 key 对应的 value

查询根目录/的inode值:

ls -id  /
ls  -id  /test

【安装extundelete软件】

方法一:

yum  -y  install  e2fsprogs  e2fsprogs-libs  e2fsprogs-devel
cd  /server/tools
yum  -y  install  wget
wget  http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2

也可以登录官网下载软件:

https://extundelete.sourceforge.net/

安装解压工具:

yum list  bzip2
yum  -y  install  bzip2
tar  -xvjf  extundelete-0.2.4.tar.bz2
chown root:root -R extundelete-0.2.4

(bzip2  -dk  extundelete-0.2.4.tar.bz2   解压后不删除原文件)

安装gcc和c++环境:

yum  install  gcc
yum  install  gcc-c++

进行软件配置和预编译、编译:

cd extundelete-0.2.4
./configure
make
make install

方法二:

查看yum源:

yum list | grep extundelete
yum install -y extundelete

【删除恢复测试】

在数据被误删除后,第一时间要做的是卸载被删除数据所在的磁盘或磁盘分区,如果是系统根分区的数据遭到误删除,就需要将系统进入单用户,并且将根分区以只读模式挂载

这样做的原因很简单,因为将文件删除后,仅仅是将文件的 inode 结点中的扇区指针清零, 实际文件还存储在磁盘上,如果磁盘以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据块被新的数据覆盖后,这些数据就真的丢失了,恢复工具也无力回天。

所以,以只读模式挂载磁盘可以尽量降低数据块中数据被覆盖的风险, 以提高恢复数据成功的比率

1、删除测试文件

2、恢复被误删除的文件

首先要先卸载挂载分区防止数据写入后将原先的数据覆盖掉

umount /test

或者将分区挂载为只读:

mount  -o  remount,ro  /dev/sdb

使用 fuser 命令查看哪些用户的那些进程在使用该目录:

fuser  -mv  /test

查找分区中的数据:

extundelete  /dev/sdb

查询恢复数据信息:

extundelete  /dev/sdb  --inode  2

extundelete 除了支持恢复单个文件,也支持恢复单个目录,在需要恢复目录时,通过“–restore-directory”选项即可恢复指定目录的所有数据

extundelete   /dev/sdb   --restore-directory  /test

恢复全部数据:

extundelete /dev/sdb  --restore-all

NOTICE: Extended attributes are not restored.

Loading filesystem metadata … 64 groups loaded.

Loading journal descriptors … 38 descriptors loaded.

Searching for recoverable inodes in directory / …

1 recoverable inodes found.

Looking through the directory structure for deleted files …

0 recoverable inodes still lost.

ll   RECOVERED_FILES/

-rw-r–r–. 1 root root 6 Feb 23 12:55 delete

extundelete 恢复单个文件的参数是“–restore-file”,这里需要注意的是,“–restore-file”后面指定的是 恢复文件路径,这个路径是文件的相对路径。相对路径是相对于原来文件的存储路径而言的,比如,原来文件的存储路径是/data/passwd,那么在参数 后面直接指定passwd 文件即可,如果原来文件的存储路径是/data/test/mytest.txt,那么在参数后面通过“test/mytest.txt”指定即可

extundelete /dev/sdb  --restore-file  passwdxxx

删除被恢复的数据放在目录:

RECOVERED_FILES

重新挂载分区为 可读写:

mount  -o  remount,rw  /dev/sdb

【补充说明】

Usage: extundelete [options] [--] device-file
--superblock           打印指定分区的超级块信息。如不加任何的参数,此选项是默认的.
例:extundelete --superblock /dev/sdb1
--journal 显示块的日志信息,同--superblock。
--after dtime 只恢复指定时间【dtime】(时间戳)之后,被删除的数据
例:假如删除的时间大概是2011-7-26 14:30
[root@nfs ~]# date -d "Jul 26 14:30" +%s
1469514600 #得出秒数 1234567890
extundelete /dev/sdb1 --after 1234567890 --restore-all 恢复此时间后删除的所有文件
--before dtime 只恢复指定时间【dtime】(时间戳)之前,被删除的数据
Actions:
--inode ino 显示某分区inode为x的信息,一般是查看该分区下所有的文件.
--block blk 显示某分区block为x的信息.
--restore-inode ino[,ino,...] 恢复一个或多个指定inode号的文件,该恢复的文件,保存在当前目录下的RECOVERED_FILES里,文件名为【file.$inode】
例:extundelete /dev/sda1 --restore-inode 13,14
--restore-file 'filename' 恢复指定的文件(被删除的),文件位于当前目录下的RECOVERED_FILES/$filename,文件名还是原来的
例:extundelete /dev/sda1 --restore-file initramfs-2.6.32-358.el6.x86_64.img
--restore-files 'read_filename' 恢复指定的文件(真实存在的)中的内容,文件位于当前目录下的RECOVERED_FILES/$filename,文件名还是原来的
例:vi test_restore.txt(结尾不可有多余的空格)
System.map-2.6.32-358.el6.x86_64
config-2.6.32-358.el6.x86_64
命令:extundelete /dev/sda1 --restore-files test_restore.txt
--restore-directory 'dir-name' 恢复指定的目录,文件位于当前目录下的RECOVERED_FILES/$dir-name,文件名还是原来的
--restore-all 恢复某分区里所有被删除的数据,文件名还是原来

写在最后:

神话是人生的隐喻,每个人身上,都隐藏着自己独特的英雄力量(神话学大师 坎贝尔)

你每天学习一点点,每天只进步1%,一年以后你的水平值是多少呢?
37.78(1.01×365=37.78)
相信概率,不要相信运气,在过程中提升概率

《礼记·中庸》:凡事豫则立,不豫则废。言前定则不跲,事前定则不困,行前定则不疚,道前定则不穷

转载请注明:XAMPP中文组官网 » Linux误删文件,恢复工具extundelete的使用操作

您必须 登录 才能发表评论!