一、 将磁盘分区挂载为只读
找出相关进程,kill.
此时在/home目录 touch文件时,会报错:
二、 使用数据恢复工具 extundelete
之前尝试了debugfs + dd,未果。
后来安装 extundelete-0.2.4 ,:
(1) 因为sourceforge被墙,服务器上直接wget不成功,所以只能在本地翻墙下载,链接如下:
(2) 把下载的文件放到服务器
(3) 解压
(1) configure
configure时报错,看了下config.log,确定是本机没编译环境 。
yum -y install gcc+ gcc-c++
等待,有一点慢。
安装完成后,再次config,依然报错
这是因为extundelete依赖e2fsprogs。
安装e2fsprogs后再次configure,成功。
(2) make & make install
(3) 可以到src目录验证下.
extundelete version 0.2.4
libext2fs version 1.41.12
Processor is little endian.
如上信息,证明安装成功。
下面才真正开始数据恢复。
(如果原服务器磁盘空间够大,可以跳过这一步。)
因为被误删的数据很大(约200G),原服务器所在的物理机上也没有磁盘空间了。因些需要到远程挂载另一台服务器B上的磁盘,B是xen虚出的机器,空间也不够,但所在的物理机上还有磁盘空间,这时需要从宿主机上分空间给B。
因为是图形操作,就不再细说。只需分配足够大的空间就可以了,我当时选的是300G。
/dev/sdb确实已挂载。
此时新盘是未分区,也未格式化,因此需要先进行这两件事。
下图是hdb的硬盘,sdb的盘也一样的操作。
(本图来自:http://www.shyw.net/bbs/yxt443333-1-1.html)
显示以上信息说明已成功格式化。
至此服务器B上挂载新硬盘结束,现在有足够空间来做存放要恢复的数据了。
四、通过NFS远程挂载
通过网络, 将远程主机B共享的文件系统,挂载到需要做数据恢复的机器A。
1. 服务器B上安装NFS
(1) 安装
B是ubuntu系统,默认没安装nfs.
(2) 配置
修改/etc/exports , 添加如下语句。
其中 :
因为是临时使用,并且是服务器位于内网,所以设置相对随意。
(3) 使配置生效
(4) 验证是否配置成功
显示NFS服务器输出目录列表:
(5) 防火墙
因为时间紧急,并且是内网,所以临时关闭了B上的防火墙:
可通过以下命令启用防火墙:
sudo ufw enable
命令详解如下:
五、数据恢复
这一步不是必须,但这个有助于更快的回复想要的数据。
1397202000这个时间值,我们后期会用到。
# extundelete /dev/sdb1 --inode 2
一个分区挂载到一个目录下时,”根”目录的inode值为一般是2。
状态为deleted的是被删除的文件。
进入刚mount的远程目录/restore;
指定--after "1397202000", 表示恢复这个时间点之后的文件;
文件默认会被恢复到当前目录下的RECOVERED_FILES目录中。
Only show and process deleted entries if they are deleted on or after 1397202000 and before 9223372036854775807.
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 6924 groups loaded.
Loading journal descriptors ... 27149 descriptors loaded.
Searching for recoverable inodes in directory / ...
696 recoverable inodes found.
Looking through the directory structure for deleted files ...
Unable to restore inode 27394319 (VMware/9.50_ps/9.55locate.vmx.lck): Space has been reallocated.
Unable to restore inode 27402241 (VMware/9.35win7/9.35win7.vmx.lck): Space has been reallocated.
Unable to restore inode 27396032 (VMware/9.35win7/9.35win7-Snapshot1.vmsn): No undeleted copies found in the journal.
Unable to restore inode 27394051 (VMware/9.36win2008/9.36win2008R2.vmx.lck/E00633.lck): Space has been reallocated.
Unable to restore inode 27394603 (lost+found/E09292.lck): Space has been reallocated.
8 recoverable inodes still lost.
一般来说,要等很久。。。
删除的文件回来了,至此松一口气。
六、收尾工作
(1) 重新挂载A上的磁盘为可读写:
卸载服务器B上的目录。
(2) 开启B的防火墙。
sudo ufw enable
(3) 在A上对rm命令启用别名,防止沉默式删除。
source /etc/bashrc
(4) 在B上使用Rsync,定期备份A上数据。
参考:http://abloz.com/2013/09/12/linux-rm-rf-file-recovery-record.html