一:前言

在Linux中,我们通常会因为误删除文件而感到烦恼,rm -rf +文件  rf参数简直就是每个运维的噩梦,但是大家想过没,为什么删除文件那么快呢,为什么我们copy文件的时候那么慢。

其实不管大家是rm 还是rm -rf都是删除的文件名字而已,数据还是保存在磁盘扇区里面的,当然这只是我的理解,那么删除后我们要怎么恢复呢,下面实验将进行对extundelete工具的简单操作介绍,

二:实验环境

系统:CentOS6.4_x64-mini.iso

工具选择: extundelete-0.2.4.tar.bz2

extundelete官网:http://extundelete.sourceforge.net/

备注:这里我全文全部为Linux命令,没有任何图片,加一个图片到blogs里面很累的。

再者环境我说明一下,我这里的实验目录是单独挂载到一个硬盘上的,不然搞得大家看不懂就很不好了,

说下我为什么挂载一个硬盘上呢,大家想下,企业中了为了安全的考虑,肯定会把数据盘和系统盘分开。

删除了数据盘的数据就必须马上umount下,不然数据二次写入,就是大牛来了也帮不了你了。这点和Windows一样,我想都会懂的。

三:实验前准备

创建目录,copy文件。

[root@nginx ~]#mkdir  /yang
[root@nginx ~]# mkfs.ext4 /dev/sdb
[root@nginx ~]# mount /dev/sdb /yang/
[root@nginx ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 .5G .6G .5G % /
tmpfs 242M 242M % /dev/shm
/dev/sda1 190M 27M 153M % /boot
/dev/sdb .8G 10M .6G % /yang
[root@nginx ~]# cp /etc/hosts /yang/
[root@nginx ~]# cp /etc/passwd /yang/
[root@nginx ~]# mkdir -p /yang/data1/
[root@nginx ~]# mkdir -p /yang/data2/
[root@nginx ~]# echo "data1.txt" > /yang/data1/data1.txt
[root@nginx ~]# echo "data2.txt" > /yang/data2/data2.txt
[root@nginx ~]# ls -r /yang/*
/yang/passwd /yang/hosts /yang/lost+found: /yang/data2:
data2.txt /yang/data1:
data1.txt ###以上为我实验环境的准备,命令都很简单,最后查看文件输出结果###

四、下载安装extundelete

[root@nginx ~]#wget  http://internode.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
[root@nginx ~]# tar jxvf extundelete-0.2..tar.bz2
[root@nginx ~]# cd extundelete-0.2.
[root@nginx extundelete-0.2.]# ls
acinclude.m4 autogen.sh config.log configure.ac install-sh Makefile.am missing src
aclocal.m4 config.h.in configure depcomp LICENSE Makefile.in README
[root@nginx extundelete-0.2.]# ./configure
Configuring extundelete 0.2.
configure: error: Can't find ext2fs library ###好的,到这里看到报错,怎么办呢,根据报错解决了###

这里报错说找不到ext2fs,找不到就装一个呗,怎么装呢,yum? 首先要确定下这个包,yum直接安装ext2fs肯定是没有的,接下来我们既然没那么多经验,不知道包名字,我们就rpm找就可以了,简单明了。

[root@nginx extundelete-0.2.]# mount /dev/cdrom /mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@nginx extundelete-0.2.]# cd /mnt/
[root@nginx mnt]# ls
CentOS_BuildTag GPL Packages RPM-GPG-KEY-CentOS- RPM-GPG-KEY-CentOS-Testing-
EFI images RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Debug- TRANS.TBL
EULA isolinux repodata RPM-GPG-KEY-CentOS-Security-
[root@nginx mnt]# cd Packages/
[root@nginx Packages]# ls *2fs*
e2fsprogs-1.41.-.el6.x86_64.rpm e2fsprogs-devel-1.41.-.el6.x86_64.rpm e2fsprogs-libs-1.41.-.el6.x86_64.rpm
e2fsprogs-devel-1.41.-.el6.i686.rpm e2fsprogs-libs-1.41.-.el6.i686.rpm [root@nginx Packages]# rpm -ivh e2fsprogs-1.41.-.el6.x86_64.rpm
Preparing... ########################################### [%]
package e2fsprogs-1.41.-.el6.x86_64 is already installed
[root@nginx Packages]# rpm -ivh e2fsprogs-devel-1.41.-.el6.x86_64.rpm
Preparing... ########################################### [%]
:e2fsprogs-devel ########################################### [%]

Ok,这里我安装成功了,我的是x64位系统,当然我要装x86_x64啦。接下来我们继续编译安装。

[root@nginx Packages]#  cd /root/extundelete-0.2.
[root@nginx extundelete-0.2.]# ./configure
Configuring extundelete 0.2.
Writing generated files to disk
[root@nginx extundelete-0.2.]# echo $? [root@nginx extundelete-0.2.]# make && make install
make -s all-recursive
Making all in src
extundelete.cc:: warning: unused parameter ‘flags’
Making install in src
/usr/bin/install -c extundelete '/usr/local/bin'
[root@nginx extundelete-0.2.]# ls /usr/local/bin/
Extundelete ########安装成功 我们开始删除文件来进行恢复测试#####

进行删除,恢复测试。记得删除后umount哦,不然二次写入谁也帮不了你呢。

[root@nginx ~]# rm -rf /yang/*
[root@nginx ~]# ls /yang/*
ls: cannot access /yang/*: No such file or directory
[root@nginx ~]# ls /yang/
[root@nginx ~]#echo “这里可以看到我刚才删除了rm –rf /yang/*就没有任何东西了”
[root@nginx ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 3.6G 5.5G 40% /
tmpfs 242M 0 242M 0% /dev/shm
/dev/sda1 190M 27M 153M 15% /boot
/dev/sdb 4.8G 10M 4.6G 1% /yang
/dev/sr0 4.4G 4.4G 0 100% /mnt
[root@nginx ~]# umount /yang/
[root@nginx ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 3.6G 5.5G 40% /
tmpfs 242M 0 242M 0% /dev/shm
/dev/sda1 190M 27M 153M 15% /boot
/dev/sr0 4.4G 4.4G 0 100% /mnt

五、恢复测试。恢复方式有很多,接下来简单说几个。

1、  通过inode节点恢复

什么是inode?这里建议大家去百度,其实笔者也不是很懂啦,哈哈,我只是会一些简单的。

[root@nginx ~]# mkdir /recover
[root@nginx ~]# cd /recover/
[root@nginx recover]# ls
[root@nginx recover]# extundelete /dev/sdb --inode
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Group:
Contents of inode :
| ed b3 3f af 3f | .A.......?yW.?yW
| af 3f | .?yW............
| | ........a!......
| | ................
| | ................
| | ................
| | ................
| | ................
| 1c a8 c0 a8 c0 6c f1 | ......xE..xElf.d
| 3d | '=yW............
00a0 | | ................
00b0 | | ................
00c0 | | ................
00d0 | | ................
00e0 | | ................
00f0 | | ................ Inode is Allocated
File mode:
Low bits of Owner Uid:
Size in bytes:
Access time:
Creation time:
Modification time:
Deletion Time:
Low bits of Group Id:
Links count:
Blocks count:
File flags:
File version (for NFS):
File ACL:
Directory ACL:
Fragment address:
Direct blocks: , , , , , , , , , , ,
Indirect block:
Double indirect block:
Triple indirect block: File name | Inode number | Deleted status
.
..
lost+found Deleted
hosts Deleted
passwd Deleted
data1 Deleted
data2 Deleted
[root@nginx recover]# [root@nginx recover]# extundelete /dev/sdb --restore-inode
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
[root@nginx recover]# ls
RECOVERED_FILES
[root@nginx recover]# ls RECOVERED_FILES/
file.
[root@nginx recover]# du -sh ./RECOVERED_FILES/file.
.0K ./RECOVERED_FILES/file.
[root@nginx recover]# echo "这里我根据是inode的节点恢复的,当然这里有些人会不了解为什么是file.13,上面我inode节点对应的不是passwd文件?下面我们查看一下是否一样文件,再使用diff对比一下。"

原文件:

[root@nginx recover]# more /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
uucp:x:::uucp:/var/spool/uucp:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
gopher:x:::gopher:/var/gopher:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
rpc:x:::Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
vcsa:x:::virtual console memory owner:/dev:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
saslauth:x:::Saslauthd user:/var/empty/saslauth:/sbin/nologin
rpcuser:x:::RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:::Anonymous NFS User:/var/lib/nfs:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
haldaemon:x:::HAL daemon:/:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
radvd:x:::radvd user:/:/sbin/nologin
qemu:x:::qemu user:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x::::/:/sbin/nologin
oprofile:x:::Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
www:x::::/data1/app/services/nginx:/sbin/nologin
[root@nginx recover]#

恢复出来的文件:

[root@nginx recover]# more RECOVERED_FILES/file.
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
uucp:x:::uucp:/var/spool/uucp:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
gopher:x:::gopher:/var/gopher:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
rpc:x:::Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
vcsa:x:::virtual console memory owner:/dev:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
saslauth:x:::Saslauthd user:/var/empty/saslauth:/sbin/nologin
rpcuser:x:::RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:::Anonymous NFS User:/var/lib/nfs:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
haldaemon:x:::HAL daemon:/:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
radvd:x:::radvd user:/:/sbin/nologin
qemu:x:::qemu user:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x::::/:/sbin/nologin
oprofile:x:::Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
www:x::::/data1/app/services/nginx:/sbin/nologin
[root@nginx recover]# ##############输出的结果一模一样############

再者我们使用diff对比一下文件,diff命令不懂?  没问题啊,一样啊去百度啊,因为笔者也不了解,嘿嘿。逗逼一下,不然写着很累的。

[root@nginx recover]# diff /etc/passwd ./RECOVERED_FILES/file.
[root@nginx recover]# echo $? [root@nginx recover]#echo “这里返回结果就是0,没有报错,就是成功了,对比一样,记住,在Linux中没有信息就是最好的信息。”

2、  根据文件名来恢复

[root@nginx recover]# extundelete /dev/sdb --restore-file hosts
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Successfully restored file hosts
[root@nginx recover]# ls
RECOVERED_FILES
[root@nginx recover]# ls RECOVERED_FILES/
file. hosts
[root@nginx recover]# diff /etc/hosts ./RECOVERED_FILES/hosts
[root@nginx recover]# echo $? [root@nginx recover]#echo“对比一样还是恢复成功了。”

3、根据目录来恢复

[root@nginx recover]# extundelete /dev/sdb --restore-directory data1
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Searching for recoverable inodes in directory data1 ...
recoverable inodes found.
Looking through the directory structure for deleted files ...
recoverable inodes still lost.
[root@nginx recover]# ls ./RECOVERED_FILES/
data1 file. hosts
[root@nginx recover]# ls ./RECOVERED_FILES/data1/
data1.txt
[root@nginx recover]# echo “到这里目录测试也是可以恢复成功,里面文件也是我之前的文件,那么如果有人说我的文件太多了我想恢复所有的,这样操作是不是太麻烦了,没问题,下面我来教大家怎么恢复所有的,就是更改下参数。”

4、恢复全部文件。

我先给之前恢复的文件都删除了,下面看是不是可以正常恢复成功所有的文件

[root@nginx recover]# rm -rf RECOVERED_FILES/
[root@nginx recover]# ls
[root@nginx recover]# extundelete /dev/sdb --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Searching for recoverable inodes in directory / ...
recoverable inodes found.
Looking through the directory structure for deleted files ...
recoverable inodes still lost.
[root@nginx recover]# ls
RECOVERED_FILES
[root@nginx recover]# ls -r ./RECOVERED_FILES/
passwd hosts data2 data1
[root@nginx recover]#echo “可以看到我删除后所有的都恢复过来了”

啊~~~到这里总算是告一段落了,实在不懂的直接问我就可以了,我也是今天才学的。感谢大家~

最新文章

  1. 学习WCF入门的第一个实例
  2. css 一些灵动性的小方法
  3. 关于mysql中实现replace的sql语句
  4. Sublime Text 2—解决中文乱码
  5. cell与cell之间的间距问题,以及section跟随屏幕滑动而滑动问题
  6. Android 中的 Intent 简介
  7. 我的GTD中收集的书单
  8. 二叉查找树(binary search tree)详解
  9. 从Python传递JSON到JavaScript
  10. docker中搭建gitlab
  11. 封装JDBC事务操作,执行存储过程测试
  12. java数据结构系列——排列(2):有序阵列
  13. Output\TEST.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.
  14. 自动化运维—tomcat服务起停(mysql+shell+django+bootstrap+jquery)
  15. 个人作业2--英语学习APP案例分析
  16. C++基础——类继承
  17. javascript ----字符串的使用
  18. L360 Most People Spend Their Time in Just 25 Places
  19. Spark 灰度发布在十万级节点上的成功实践 CI CD
  20. 【原创】大数据基础之Benchmark(2)TPC-DS

热门文章

  1. SpringBoot设置首页(默认页)跳转
  2. 解决:Nginx访问静态页面出现中文乱码
  3. 根文件系统ramdisk.image.gz && uramdisk.image.gz
  4. gyp ERR! stack Error: EACCES: permission denied, mkdir问题解决方案
  5. python常有模块:模块、引入语法、两种执行方式、模块搜索顺序
  6. C#形参和实参、引用类型和值类型使用时的一个注意点。
  7. vs调试时,不显示局部变量
  8. VMware中Red Hat Enterprise Linux 7 配置桥接模式局域网
  9. 更改centos的网卡名
  10. MySQL用户