突发事件,应用上传的数据被程序自动删掉了,可悲的是尚未数据备份,数据是放在系统的 /data/webapps/xxxx/upload 目录下面,可把咱们急坏了,以前又没有作过数据恢复的测试,而后我找到了一款数据恢复的软件,成功把删除的大部分数据找回来了,个人数据恢复过程以下。node
若是咱们的源里面添加了 epel 仓库的话,咱们能够直接使用下面的命令安装。c++
yum install extundelete -y
wget http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2 yum -y install bzip2 e2fsprogs-devel e2fsprogs gcc-c++ make tar -xvjf extundelete-0.2.4.tar.bz2 cd extundelete-0.2.4 ./configure make && make install
由于个人数据路径比较深,因此咱们须要一步步查找,能够先从根分区 inode 查找web
extundelete /dev/sdb1 --inode 2
咱们会看到 weapps 目录的inode,app
extundelete /dev/sda5 --inode 24641537
咱们看到项目的 inode,webapp
extundelete /dev/sda5 --inode 24903688
咱们找到了最终删除数据的目录 uploadide
extundelete /dev/sda5 --inode 24904454
咱们能够看到标称的 Deleted,这些数据就是咱们要进行恢复的数据。测试
那咱们就恢复指定目录,以当前分区为根分区进行路径设定,项目名进行掩盖spa
extundelete /dev/sda5 --restore-directory /webapps/xxxx/upload
由于磁盘数据一直在读写,因此有些文件以前的 inode 已经被从新分配了,致使部分数据没法恢复,数据最后会告诉咱们有多少文件没有回复,可是大部分数据咱们已经恢复了,这就是很重要的事情了。3d
那咱们查看一下回复的数据吧,软件会在当前目录生成一个目录 RECOVERED_FILES 里面就是咱们恢复的数据。指针
恢复所有数据可使用命令
extundelete /dev/sda5 --restore-all
其中,参数(options)有:
--version, -[vV],显示软件版本号。
--help,显示软件帮助信息。
--superblock,显示超级块信息。
--journal,显示日志信息。
--after dtime,时间参数,表示在某段时间以后被删的文件或目录。
--before dtime,时间参数,表示在某段时间以前被删的文件或目录。动做(action)有:
--inode ino,显示节点“ino”的信息。
--block blk,显示数据块“blk”的信息。
--restore-inode ino[,ino,...],恢复命令参数,表示恢复节点“ino”的文件,恢复的文件会自动放在当前目录下的RESTORED_FILES文件夹中,使用节点编号做为扩展名。
--restore-file 'path',恢复命令参数,表示将恢复指定路径的文件,并把恢复的文件放在当前目录下的RECOVERED_FILES目录中。
--restore-files 'path',恢复命令参数,表示将恢复在路径中已列出的全部文件。
--restore-all,恢复命令参数,表示将尝试恢复全部目录和文件。
-j journal,表示从已经命名的文件中读取扩展日志。
-b blocknumber,表示使用以前备份的超级块来打开文件系统,通常用于查看现有超级块是否是当前所要的文件。
-B blocksize,经过指定数据块大小来打开文件系统,通常用于查看已经知道大小的文件。
在数据删除以后,首先要卸载被删除数据所在的磁盘或是分区,若是是系统根分区遭到误删除,就须要进入单用户模式下,将根分区以只读的方式挂载。
缘由:由于文件删除以后,仅仅是将文件的inode节点中的扇区指针清零,实际上文件还存在磁盘上面,若是磁盘以读写方式挂载,这些删除的数据块可能会被系统重新分配出去,这些数据块被覆盖以后,这些数据就真的丢失了,因此以只读的方式挂载,尽量避免数据被覆盖。