Linux数据恢复软件-extundelete
[font=verdana, "][size=12px][list][*][url=https://www.cnblogs.com/chyuanliu/p/8213914.html#_label0]一、背景[/url][*][url=https://www.cnblogs.com/chyuanliu/p/8213914.html#_label1]二、安装恢复软件[/url][*][url=https://www.cnblogs.com/chyuanliu/p/8213914.html#_label2]三、删除数据查找[/url][*][url=https://www.cnblogs.com/chyuanliu/p/8213914.html#_label3]四、数据恢复[/url][/list][/size][/font][indent][p=30, 2, left]转自[url=http://blog.51cto.com/wzlinux/2052835]http://blog.51cto.com/wzlinux/2052835[/url][/p][/indent][align=right][font=verdana, "][size=12px][url=https://www.cnblogs.com/chyuanliu/p/8213914.html#_labelTop]↑[/url][/size][/font][/align]
一、背景[p=30, 2, left]突发事件,应用上传的数据被程序自动删掉了,可悲的是还没有数据备份,数据是放在系统的 /data/webapps/xxxx/upload 目录下面,可把我们急坏了,之前又没有做过数据恢复的测试,然后我找到了一款数据恢复的软件,成功把删除的大部分数据找回来了,我的数据恢复过程如下。[/p][align=right][font=verdana, "][size=12px][url=https://www.cnblogs.com/chyuanliu/p/8213914.html#_labelTop]↑[/url][/size][/font][/align]
二、安装恢复软件1、epel 仓库安装[p=30, 2, left]如果我们的源里面添加了 epel 仓库的话,我们可以直接使用下面的命令安装。[/p]yum install extundelete -y2、源码编译安装wget [url]http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2yum[/url] -y install bzip2 e2fsprogs-devel e2fsprogs gcc-c++ maketar -xvjf extundelete-0.2.4.tar.bz2cd extundelete-0.2.4 ./configuremake && make install[align=right][font=verdana, "][size=12px][url=https://www.cnblogs.com/chyuanliu/p/8213914.html#_labelTop]↑[/url][/size][/font][/align]
三、删除数据查找[p=30, 2, left]因为我的数据路径比较深,所以我们需要一步步查找,可以先从根分区 inode 查找[/p]extundelete /dev/sdb1 --inode 2[p=30, 2, left][img=720,0]http://i2.51cto.com/images/blog/201712/21/6d0217595f9549e8cbc6fb9bebe2ccc8.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=[/img][/p][p=30, 2, left]我们会看到 weapps 目录的inode,[/p]extundelete /dev/sda5 --inode 24641537[p=30, 2, left][img=720,0]http://i2.51cto.com/images/blog/201712/21/1d48aed7779da42f7619d949f2b7f42e.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=[/img][/p][p=30, 2, left]我们看到项目的 inode,[/p]extundelete /dev/sda5 --inode 24903688[p=30, 2, left][img=720,0]http://i2.51cto.com/images/blog/201712/21/fd602c14b41a02ec89160b8060cdeddf.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=[/img][/p][p=30, 2, left]我们找到了最终删除数据的目录 upload[/p]extundelete /dev/sda5 --inode 24904454[p=30, 2, left][img=720,0]http://i2.51cto.com/images/blog/201712/21/c21df940e9d9c4929347923a0f17cc62.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=[/img][/p][p=30, 2, left]我们可以看到标称的 Deleted,这些数据就是我们要进行恢复的数据。[/p][align=right][font=verdana, "][size=12px][url=https://www.cnblogs.com/chyuanliu/p/8213914.html#_labelTop]↑[/url][/size][/font][/align]
四、数据恢复[p=30, 2, left]那我们就恢复指定目录,以当前分区为根分区进行路径设定,项目名进行掩盖[/p]extundelete /dev/sda5 --restore-directory /webapps/xxxx/upload[p=30, 2, left][img=720,0]http://i2.51cto.com/images/blog/201712/21/d79fe8f909e4c4620428f4a8896b5de1.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=[/img][/p][p=30, 2, left]因为磁盘数据一直在读写,所以有些文件之前的 inode 已经被重新分配了,导致部分数据无法恢复,数据最后会告诉我们有多少文件没有回复,但是大部分数据我们已经恢复了,这就是很重要的事情了。[/p][p=30, 2, left]那我们查看一下回复的数据吧,软件会在当前目录生成一个目录 RECOVERED_FILES 里面就是我们恢复的数据。[/p][p=30, 2, left][img=720,0]http://i2.51cto.com/images/blog/201712/21/42f175059db92f4aba2ab5e54bdd3bc8.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=[/img][/p][p=30, 2, left]恢复全部数据可以使用命令[/p]extundelete /dev/sda5 --restore-all[p=30, 2, left]使用方法[/p][p=30, 2, left]extundelete --help[/p][indent][p=30, 2, left]其中,参数(options)有:
--version, -[vV],显示软件版本号。
--help,显示软件帮助信息。
--superblock,显示超级块信息。
--journal,显示日志信息。
--after dtime,时间参数,表示在某段时间之后被删的文件或目录。
--before dtime,时间参数,表示在某段时间之前被删的文件或目录。[/p][p=30, 2, left]动作(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,通过指定数据块大小来打开文件系统,一般用于查看已经知道大小的文件。[/p][/indent][p=30, 2, left]在数据删除之后,首先要卸载被删除数据所在的磁盘或是分区,如果是系统根分区遭到误删除,就需要进入单用户模式下,将根分区以只读的方式挂载。[/p][p=30, 2, left]原因:因为文件删除之后,仅仅是将文件的inode节点中的扇区指针清零,实际上文件还存在磁盘上面,如果磁盘以读写方式挂载,这些删除的数据块可能会被系统从新分配出去,这些数据块被覆盖之后,这些数据就真的丢失了,所以以只读的方式挂载,尽可能避免数据被覆盖。[/p]
extundelete实现Linux下文件/文件夹数据恢复
[list=1][*][p=30, 2, left]我用的是Centos系统,在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel。[/p][p=30, 2, left]这里用:yum install e2fsprogs e2fsprogs-libs e2fsprogs-devel 来完成安装。[/p][url=http://jingyan.baidu.com/album/3c48dd3493221de10be35889.html?picindex=2][img=800,0]http://h.hiphotos.baidu.com/exp/w=500/sign=261dda19d243ad4ba62e46c0b2035a89/8ad4b31c8701a18b78f835f39d2f07082838fe7f.jpg[/img][/url]
[url=http://jingyan.baidu.com/album/3c48dd3493221de10be35889.html?picindex=3][img=800,0]http://f.hiphotos.baidu.com/exp/w=500/sign=fc001aafde54564ee565e43983df9cde/b812c8fcc3cec3fd495781c9d588d43f87942724.jpg[/img][/url]
[*]
[p=30, 2, left]编译安装extundelete:[/p][p=30, 2, left]tar xjf extundelete-0.2.4.tar.bz2 [/p][p=30, 2, left]cd extundelete-0.2.4[/p][p=30, 2, left]./configure [/p][p=30, 2, left]make && make install [/p]
[url=http://jingyan.baidu.com/album/3c48dd3493221de10be35889.html?picindex=4][img=800,0]http://h.hiphotos.baidu.com/exp/w=500/sign=b8a2aab498504fc2a25fb005d5dce7f0/6d81800a19d8bc3e26b92076818ba61ea9d345dc.jpg[/img][/url]
[*]
[p=30, 2, left]extundelete的用法,可以通过help查看详细![/p]
[url=http://jingyan.baidu.com/album/3c48dd3493221de10be35889.html?picindex=5][img=800,0]http://g.hiphotos.baidu.com/exp/w=500/sign=2e96c58cb9a1cd1105b672208913c8b0/c995d143ad4bd113a5ba968e59afa40f4bfb0512.jpg[/img][/url]
[*]
[p=30, 2, left]extundelete恢复数据的过程:[/p][p=30, 2, left]在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的inode节点中的扇区指针清零,实际文件还储存在磁盘上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,这些数据就真的丢失了,恢复工具也无力回天。所以!以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数据成功的比例。[/p]
[*]
[p=30, 2, left]模拟数据误删环境:[/p][p=30, 2, left]创建一个新的分区后,挂载到一个目录下,往该目录下cp一些文件或者目录,校验个问句的md5值,然后删除该目录下的文件,用来模拟实验环境。[/p]
[url=http://jingyan.baidu.com/album/3c48dd3493221de10be35889.html?picindex=6][img=800,0]http://g.hiphotos.baidu.com/exp/w=500/sign=459fe304a51ea8d38a227404a70b30cf/dcc451da81cb39dbc09833e9d3160924ab183030.jpg[/img][/url]
[url=http://jingyan.baidu.com/album/3c48dd3493221de10be35889.html?picindex=7][img=800,0]http://a.hiphotos.baidu.com/exp/w=500/sign=a39fdd008f5494ee87220f191df4e0e1/d0c8a786c9177f3e3748a0b273cf3bc79f3d5614.jpg[/img][/url]
[*]
[p=30, 2, left]卸载磁盘分区,并通过执行extundelete命令查询/dev/sdb1分区可恢复的数据信息:[/p][p=30, 2, left]# extundelete /dev/sdb1 --inode 2[/p]
[p=30, 2, left]根据输出信息,标记为Deleted状态的是已经删除的文件或目录。同时还可以看到已删除文件的inode值,接下来就可以恢复文件了。[/p]
[url=http://jingyan.baidu.com/album/3c48dd3493221de10be35889.html?picindex=8][img=800,0]http://b.hiphotos.baidu.com/exp/w=500/sign=30bdd216aa014c08193b28a53a7a025b/0b46f21fbe096b632fbd01ef0f338744eaf8aced.jpg[/img][/url]
[*]
[p=30, 2, left]恢复单个文件:[/p][p=30, 2, left]extundelete /dev/sdb1 --restore-file passwd[/p][p=30, 2, left]会在当前目录下生成一个RECOVERED_FILES目录,里面保存已经恢复的文件。[/p]
[url=http://jingyan.baidu.com/album/3c48dd3493221de10be35889.html?picindex=9][img=800,0]http://d.hiphotos.baidu.com/exp/w=500/sign=cb969cb9acc379317d688629dbc5b784/4d086e061d950a7bb16e107b09d162d9f2d3c932.jpg[/img][/url]
[url=http://jingyan.baidu.com/album/3c48dd3493221de10be35889.html?picindex=10][img=800,0]http://h.hiphotos.baidu.com/exp/w=500/sign=d0fda2987c3e6709be0045ff0bc69fb8/34fae6cd7b899e5178c864ab41a7d933c9950dce.jpg[/img][/url]
[*]
[p=30, 2, left]恢复单个目录:[/p][p=30, 2, left]extundelete /dev/sdb1 --restore-directory /mongodb[/p][p=30, 2, left]恢复所有误删文件:[/p][p=30, 2, left]extundelete /dev/sdb1 --restore-all[/p]
[p=30, 2, left]extundelete还可以实现恢复某个时间段的数据。可以通过“--after”和“--before”参数实现![/p]
[p=30, 2, left]原文地址:[url]http://jingyan.baidu.com/article/3c48dd3493221de10be35889.html[/url][/p]
[/list]
恢复rm -rf * 的数据
[font=-apple-system, "][p=26, 2, left]目录[-][/p][url=http://my.oschina.net/coda/blog/222670#OSC_h1_1]一、 将磁盘分区挂载为只读[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h1_2]二、 使用数据恢复工具 extundelete[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h2_3]1. 下载[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h2_4]2. 编译[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h1_5]三、 挂载新硬盘[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h2_6]1 在xen上挂载一块磁盘给B[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h2_7]2 登录服务器B, 准备挂载新磁盘。[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h1_8]四、通过NFS远程挂载[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h2_9]1. 服务器B上安装NFS[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h2_10]2. 服务器A上挂载远程目录[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h1_11]五、数据恢复[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h2_12]1. 得到删除的大概时间[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h2_13]2. 查看被删除文件[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h1_14]3. 数据恢复[/url][url=http://my.oschina.net/coda/blog/222670#OSC_h1_15]六、收尾工作[/url][/font]
[font=-apple-system, "]
一、 将磁盘分区挂载为只读[p=26, 2, left][font=微软雅黑]这一步很重要,并且在误删除文件后应尽快将磁盘挂载为只读。越早进行,恢复的成功机率就越大。[/font][/p]
[p=26, 2, left]1. 查看被删除文件位于哪个分区[/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4(rw)
/dev/mapper/VolGroup-lv_home on /home type ext4(rw)[/p][p=26, 2, left]2. 尝试将对应目录重新挂载为只读[/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] ~]# mount -r -n -o remount /home
mount: /home is busy[/p]
[p=26, 2, left]3. 如果显示 xxx is busy[/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] ~ ]# fuser -v -m /data[/p][p=26, 2, left]找出相关进程,kill.[/p]
[p=26, 2, left]4. 成功将目录挂载为只读[/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] ~ ] # mount -r -n -o remount /home[/p][p=26, 2, left]此时在/home目录 touch文件时,会报错:[/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] ~ ] # touch txt
touch: cannot touch `txt’: Read-only file system[/p]
二、 使用数据恢复工具 extundelete[p=26, 2, left]之前尝试了debugfs + dd,未果。[/p][p=26, 2, left]后来安装 extundelete-0.2.4 ,:[/p]
1. 下载[p=26, 2, left](1) 因为sourceforge被墙,服务器上直接wget不成功,所以只能在本地翻墙下载,链接如下:[/p][p=26, 2, left] [url=http://superb-dca2.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2]http://superb-dca2.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2[/url] [/p][p=26, 2, left](2) 把下载的文件放到服务器[/p][p=26, 2, left] 启动本地的nginx,然后在服务器上wget(当然通过其它方法也可以,只要能传到服务器):[/p][p=26, 2, left]wget http://本机IP/extundelete-0.2.4.tar.bz2 [/p][p=26, 2, left](3) 解压[/p][p=26, 2, left]tar jxf extundelete - 0 . 2 . 4 .tar.bz2[/p]
2. 编译[p=26, 2, left](1) configure[/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] extundelete-0.2.4]# ./configure[/p][p=26, 2, left]configure时报错,看了下config.log,确定是本机没编译环境 。[/p][p=26, 2, left]yum -y install gcc+ gcc-c++[/p][p=26, 2, left]等待,有一点慢。[/p][p=26, 2, left]安装完成后,再次config,依然报错[/p][p=26, 2, left]Configuring extundelete 0.2.4
configure: error: Can’t find ext2fs library[/p][p=26, 2, left]这是因为extundelete依赖e2fsprogs。[/p][p=26, 2, left]安装e2fsprogs后再次configure,成功。[/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] extundelete-0.2.4]# yum install e2fsprogs-devel
[root[url=http://my.oschina.net/u/570656]@localhost[/url] extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
Writing generated files to disk[/p]
[p=26, 2, left](2) make & make install[/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] extundelete-0.2.4]#make & make install[/p][p=26, 2, left] 如果没有异常信息,基本说明安装成功.[/p]
[p=26, 2, left](3) 可以到src目录验证下.[/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] extundelete-0.2.4]# cd src
[root[url=http://my.oschina.net/u/570656]@localhost[/url] src]# ./extundelete
No action specified; implying --superblock.
./extundelete: Missing device name.
Usage: ./extundelete [options] [--] device-file
.............[/p][p=26, 2, left] [/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] src]# ./extundelete -v[/p][p=26, 2, left]extundelete version 0.2.4[/p][p=26, 2, left]libext2fs version 1.41.12[/p][p=26, 2, left]Processor is little endian.[/p][p=26, 2, left]如上信息,证明安装成功。[/p][p=26, 2, left]下面才真正开始数据恢复。[/p]
三、 挂载新硬盘[p=26, 2, left](如果原服务器磁盘空间够大,可以跳过这一步。)[/p][p=26, 2, left]因为被误删的数据很大(约200G),原服务器所在的物理机上也没有磁盘空间了。因些需要到远程挂载另一台服务器B上的磁盘,B是xen虚出的机器,空间也不够,但所在的物理机上还有磁盘空间,这时需要从宿主机上分空间给B。[/p]
1 在xen上挂载一块磁盘给B[p=26, 2, left]因为是图形操作,就不再细说。只需分配足够大的空间就可以了,我当时选的是300G。[/p]
2 登录服务器B, 准备挂载新磁盘。[p=26, 2, left](1) 查看新磁盘是否已挂载[/p][p=26, 2, left][nmen[url=http://my.oschina.net/Thinker277]@dev[/url] -ubuntu-server] ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8 /dev/sdb[/p][p=26, 2, left]/dev/sdb确实已挂载。[/p][p=26, 2, left]此时新盘是未分区,也未格式化,因此需要先进行这两件事。[/p]
[p=26, 2, left](2) 分区[/p][p=26, 2, left]下图是hdb的硬盘,sdb的盘也一样的操作。[/p][p=26, 2, left]
(本图来自:[url=http://www.shyw.net/bbs/yxt443333-1-1.html]http://www.shyw.net/bbs/yxt443333-1-1.html[/url])[/p]
[p=26, 2, left](3) 格式化[/p][p=26, 2, left][nmen[url=http://my.oschina.net/Thinker277]@dev[/url] -ubuntu-server]:~$ sudo mkfs -t ext3 /dev/sdb1
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
22937600 inodes, 91749215 blocks
4587460 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
2800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.[/p][p=26, 2, left][font=微软雅黑]显示以上信息说明已成功格式化。[/font][/p]
[p=26, 2, left](4) 设置卷标[/p][p=26, 2, left]sudo e2label /dev/sdb1 /restore[/p]
[p=26, 2, left](5) 挂载[/p][p=26, 2, left][nmen[url=http://my.oschina.net/Thinker277]@dev[/url] -ubuntu-server]:~$ mkdir /restore
[nmen[url=http://my.oschina.net/Thinker277]@dev[/url] - ubuntu - server] : ~ $ mount -vl -t ext3 /dev/sdb1 /restore[/p][p=26, 2, left]至此服务器B上挂载新硬盘结束,现在有足够空间来做存放要恢复的数据了。[/p]
四、通过NFS远程挂载[p=26, 2, left]通过网络, 将远程主机B共享的文件系统,挂载到需要做数据恢复的机器A。[/p]
1. 服务器B上安装NFS[p=26, 2, left](1) 安装[/p][p=26, 2, left]B是ubuntu系统,默认没安装nfs.[/p][p=26, 2, left]# sudo apt-get install nfs-kernel-server[/p]
[p=26, 2, left](2) 配置[/p][p=26, 2, left]修改/etc/exports , 添加如下语句。[/p][p=26, 2, left]
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/restore *(rw,sync,no_root_squash,no_subtree_check)[/p][p=26, 2, left]其中 :[/p][p=26, 2, left] /restore -- 需要与客户机共享的目录;[/p][p=26, 2, left] * -- 表示任何主机均可访问本目录,也可指定IP;[/p][p=26, 2, left] (w,sync,no_root_squash,no_subtree_check) -- 配置客户机的权限;[/p][p=26, 2, left]因为是临时使用,并且是服务器位于内网,所以设置相对随意。[/p]
[p=26, 2, left](3) 使配置生效[/p][p=26, 2, left]# exportfs –rv[/p][p=26, 2, left]# /etc/init.d/nfs-kernel-server restart[/p]
[p=26, 2, left](4) 验证是否配置成功[/p][p=26, 2, left]显示NFS服务器输出目录列表:[/p][p=26, 2, left][url=mailto:nmen@dev-ubuntu-server]nmen[/url][url=http://my.oschina.net/Thinker277]@dev[/url] -ubuntu-server: showmount -e
Export list for chinahrd-ubuntu-dev:
/restore *[/p]
[p=26, 2, left](5) 防火墙[/p][p=26, 2, left]因为时间紧急,并且是内网,所以临时关闭了B上的防火墙:[/p][p=26, 2, left]sudo ufw disable[/p][p=26, 2, left]可通过以下命令启用防火墙:[/p][p=26, 2, left]sudo ufw enable[/p]
2. 服务器A上挂载远程目录[p=26, 2, left]将/restore目录从服务器 B 挂载到 /mnt 上。[/p][p=26, 2, left]mount -t nfs [B的IP]:/restore /mnt[/p][p=26, 2, left]命令详解如下:[/p][p=26, 2, left]# mount -t nfs [-o mount-options] server:/directory /mount-point
-o mount-options
指定可以用来挂载 NFS 文件系统的挂载选项。
server:/directory
指定包含共享资源的服务器主机名,以及要挂载的文件或目录的路径。
/mount-point
指定要挂载文件系统的目录。[/p]
五、数据恢复
1. 得到删除的大概时间[p=26, 2, left]这一步不是必须,但这个有助于更快的回复想要的数据。[/p][p=26, 2, left]date -d "Fri Apr 15:40:00 2014" +%s
1397202000[/p][p=26, 2, left]1397202000这个时间值,我们后期会用到。[/p]
2. 查看被删除文件[p=26, 2, left]# extundelete /dev/sdb1 --inode 2[/p][p=26, 2, left]
[/p][p=26, 2, left]File name | Inode number | Deleted status[/p][p=26, 2, left]. 9[/p][p=26, 2, left].. 11[/p][p=26, 2, left]lost+found 24 Deleted[/p][p=26, 2, left]data 82 Deleted[/p][p=26, 2, left]一个分区挂载到一个目录下时,”根”目录的inode值为一般是2。[/p][p=26, 2, left]状态为deleted的是被删除的文件。[/p]
3. 数据恢复[p=26, 2, left]进入刚mount的远程目录/restore;[/p][p=26, 2, left]指定--after "1397202000", 表示恢复这个时间点之后的文件;[/p][p=26, 2, left]文件默认会被恢复到当前目录下的RECOVERED_FILES目录中。[/p][p=26, 2, left]cd /restore
[root[url=http://my.oschina.net/u/570656]@localhost[/url] restore]#[extundelete的安装路径]./extundelete --restore-all --after "1397202000" /dev/mapper/VolGroup-lv_home[/p][p=26, 2, left]Only show and process deleted entries if they are deleted on or after 1397202000 and before 9223372036854775807.[/p][p=26, 2, left]NOTICE: Extended attributes are not restored.[/p][p=26, 2, left]Loading filesystem metadata ... 6924 groups loaded.[/p][p=26, 2, left]Loading journal descriptors ... 27149 descriptors loaded.[/p][p=26, 2, left]Searching for recoverable inodes in directory / ...[/p][p=26, 2, left]696 recoverable inodes found.[/p][p=26, 2, left]Looking through the directory structure for deleted files ...[/p][p=26, 2, left]Unable to restore inode 27394319 (VMware/9.50_ps/9.55locate.vmx.lck): Space has been reallocated.[/p][p=26, 2, left]Unable to restore inode 27402241 (VMware/9.35win7/9.35win7.vmx.lck): Space has been reallocated.[/p][p=26, 2, left]Unable to restore inode 27396032 (VMware/9.35win7/9.35win7-Snapshot1.vmsn): No undeleted copies found in the journal.[/p][p=26, 2, left]Unable to restore inode 27394051 (VMware/9.36win2008/9.36win2008R2.vmx.lck/E00633.lck): Space has been reallocated.[/p][p=26, 2, left]Unable to restore inode 27394603 (lost+found/E09292.lck): Space has been reallocated.[/p][p=26, 2, left]8 recoverable inodes still lost.[/p][p=26, 2, left] [/p][p=26, 2, left]一般来说,要等很久。。。[/p][p=26, 2, left]cd restore/RECOVERED_FILES$
ls
110_open_dns 111_open_dns_node1 112_DNS_node2 116_svn[/p][p=26, 2, left]删除的文件回来了,至此松一口气。[/p]
六、收尾工作[p=26, 2, left](1) 重新挂载A上的磁盘为可读写:[/p][p=26, 2, left][root[url=http://my.oschina.net/u/570656]@localhost[/url] src]# mount -o remount, rw /home/[/p][p=26, 2, left]卸载服务器B上的目录。[/p]
[p=26, 2, left](2) 开启B的防火墙。[/p][p=26, 2, left]sudo ufw enable[/p]
[p=26, 2, left](3) 在A上对rm命令启用别名,防止沉默式删除。[/p][p=26, 2, left]vi /etc/bashrc[/p][p=26, 2, left]source /etc/bashrc[/p][p=26, 2, left] [/p][p=26, 2, left]# do not delete / or prompt if deleting more than 3 files at a time #
alias rm='rm -I --preserve-root'
# confirmation #
alias mv='mv -i'
alias cp='cp -i' alias ln='ln -i'
# Parenting changing perms on / #
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'[/p][p=26, 2, left](4) 在B上使用Rsync,定期备份A上数据。[/p][p=26, 2, left]参考:[url=http://abloz.com/2013/09/12/linux-rm-rf-file-recovery-record.html]http://abloz.com/2013/09/12/linux-rm-rf-file-recovery-record.html[/url][/p][/font]
页:
[1]