找回Linux系统上面误删的数据
一、背景
突发事件,应用上传的数据被程序自动删掉了,可悲的是还没有数据备份,数据是放在系统的 /data/webapps/xxxx/upload 目录下面,可把我们急坏了,之前又没有做过数据恢复的测试,然后我找到了一款数据恢复的软件,成功把删除的大部分数据找回来了,我的数据恢复过程如下。
二、安装恢复软件
1、epel 仓库安装
如果我们的源里面添加了 epel 仓库的话,我们可以直接使用下面的命令安装。
yum install extundelete -y
2、源码编译安装
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 查找
extundelete /dev/sdb1 --inode 2
我们会看到 weapps 目录的inode,
extundelete /dev/sda5 --inode 24641537
我们看到项目的 inode,
extundelete /dev/sda5 --inode 24903688
我们找到了最终删除数据的目录 upload
extundelete /dev/sda5 --inode 24904454
我们可以看到标称的 Deleted,这些数据就是我们要进行恢复的数据。
四、数据恢复
那我们就恢复指定目录,以当前分区为根分区进行路径设定,项目名进行掩盖
extundelete /dev/sda5 --restore-directory /webapps/xxxx/upload
因为磁盘数据一直在读写,所以有些文件之前的 inode 已经被重新分配了,导致部分数据无法恢复,数据最后会告诉我们有多少文件没有回复,但是大部分数据我们已经恢复了,这就是很重要的事情了。
那我们查看一下回复的数据吧,软件会在当前目录生成一个目录 RECOVERED_FILES 里面就是我们恢复的数据。
恢复全部数据可以使用命令
extundelete /dev/sda5 --restore-all
使用方法
extundelete --help
其中,参数(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节点中的扇区指针清零,实际上文件还存在磁盘上面,如果磁盘以读写方式挂载,这些删除的数据块可能会被系统从新分配出去,这些数据块被覆盖之后,这些数据就真的丢失了,所以以只读的方式挂载,尽可能避免数据被覆盖。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Linux运维必会的MySQL企业面试题大全
(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是否运行 lsof -i :3306 netstat -lntup |grep 3306 3.为MySQL设置密码或者修改密码 设置密码 mysql -uroot -ppassword -e "set passowrd for root = passowrd('passowrd')" mysqladmin -uroot passowrd "NEWPASSWORD" 更改密码 mysqladmin -uroot passowrd oldpassowrd "NEWPASSWORD" use mysql; update user set passowrd = PASSWORD('newpassword') where user = 'root';flush privileges; msyql 5.7以上版本修改默认密码命令 alter user 'root'@'localhost' i...
- 下一篇
Linux内核4.16正式版有望本周末发布
在发布多个候选版本之后,Linus Torvalds表示极有可能会在本周末放出Linux Kernel 4.16正式稳定版。Torvalds表示他并没有计划发布第8个候选版本的打算,认为目前的更新规模比较合理。 新版本除了驱动方面的升级之外,Torvalds表示本次更新重点集中在网络方面,此外gpu, pinctrl, rdma, iio和misc都进行了修复。他同时表示本次版本更新还对支持文档和架构(主要是x86)进行了更新,此外还对mm进行了一些修复。 在他今天更新的邮件列表中,Torvalds表示到目前为止,4.16分支的开发工作如期进行,而且整个开发内容要比预想的要多。4.16分支之所以重点在网络上,是因为在RC6中没有涉及网络更新,这意味着在RC7中包含了大约2.5周的网络更新内容。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6