您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

CentOS系统下尝试恢复被删除的文件的方法

添加时间:2016-6-13 21:03:34  添加: 思海网络 
背景说明:今天在用ftp更新网站内容是,将原来文件夹最重要的一个图片文件夹被删除,导致所有图片丢失。

找回办法如下:

1、尝试方法一:debugfs
用debugfs工具,可以看到删除的列表,但没有找到批量恢复文件的办法(丢失的文件有1万多),可能是我方法不对。对于单个文件,debugfs是可以很方便恢复的。

大多数Linux发行版都提供一个debugfs工具,可以用来对Ext3文件系统进行编辑操作。不过在使用这个工具之前,还有一些工作要做。

  首先以只读方式重新挂载被误删的文件所在分区。使用如下命令:(假设文件在/usr分区)



代码如下:
mount -r -n -o remount /usr

  -r表示只读方式挂载;-n表示不写入/etc/mtab,如果是恢复/etc上的文件,就加上这个参数。如果系统说xxx partion busy,可以用fuser命令查看一下是哪些进程使用这个分区上的文件:
 


代码如下:
fuser -v -m /usr

  如果没有什么重要的进程,用以下命令停掉它们:
  


代码如下:
fuser -k -v -m /usr

  然后就可以重新挂载这些文件系统了。

  如果是把所有的文件统一安装在一个大的/分区当中,可以在boot提示符下用linux single进入单用户模式,尽量减少系统进程向硬盘写入数据的机会,要不干脆把硬盘挂在别的机器上。另外,恢复出来的数据不要写到/上面,避免破坏那些有用的数据。如果机器上有dos/windows,可以写到这些分区上面:
 



代码如下:
mount -r -n /dev/hda1 /mnt/had

  然后就可以执行debugfs:(假设Linux在 /dev/hda5)
 

代码如下:
#debugfs /dev/hda5</p> <p>  就会出现debugfs提示符debugfs:</p> <p>  使用lsdel命令可以列出很多被删除的文件的信息:</p> <p>  debugfs:lsdel</p> <p>  debugfs: 2692 deleted inodes found.</p> <p>  Inode Owner Mode Size Blocks Time deleted</p> <p>  164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001</p> <p>  …………………………………………………………………………………</p> <p>  36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001</p> <p>  196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001</p> <p>  debugfs:

  列出的文件有很多(这里找到2692个),第一字段是文件节点号,第二字段是文件所有者,第三字段是读写权限,接下来是文件大小,占用块数,删除时间。然后就可以根据文件大小和删除日期判断那些是我们需要的。比如我们要恢复节点是196829的文件:

  可以先看看文件数据状态:

  



代码如下:
debugfs:stat <196829></p> <p>  Inode: 196829 Type: regular Mode: 0644 Flags: 0×0 Version: 1</p> <p>  User: 0 Group: 0 Size: 149500</p> <p>  File ACL: 0 Directory ACL: 0</p> <p>  Links: 0 Blockcount: 38</p> <p>  Fragment: Address: 0 Number: 0 Size: 0</p> <p>  ctime: 0x31a9a574 — Mon May 27 13:52:04 2001</p> <p>  atime: 0x31a21dd1 — Tue May 21 20:47:29 2001</p> <p>  mtime: 0x313bf4d7 — Tue Mar 5 08:01:27 2001</p> <p>  dtime: 0x31a9a574 — Mon May 27 13:52:04 2001</p> <p>  BLOCKS:</p> <p>  594810 594811 594814 594815 594816 594817 ………………………………….</p> <p>  TOTAL: 38

  然后就可以用dump指令恢复文件:
 


代码如下:
debugfs:dump <196829> /mnt/hda/01.sav

  这样就把文件恢复出来了。退出debugfs:
  


代码如下:
debugfs:quit

  另一种方法是手工编辑inode:
  


代码如下:
debugfs:mi</p> <p>  Mode [0100644]</p> <p>  User ID [0]</p> <p>  Group ID [0]</p> <p>  Size [149500]</p> <p>  Creation time [0x31a9a574]</p> <p>  Modification time [0x31a9a574]</p> <p>  Access time [0x31a21dd1]</p> <p>  Deletion time [0x31a9a574] 0</p> <p>  Link count [0] 1</p> <p>  Block count [38]</p> <p>  File flags [0x0]</p> <p>  Reserved1 [0]</p> <p>  File acl [0]</p> <p>  Directory acl [0]</p> <p>  Fragment address [0]</p> <p>  Fragment number [0]</p> <p>  Fragment size [0]</p> <p>  Direct Block #0 [594810]</p> <p>  …………………………….</p> <p>  Triple Indirect Block [0]

  使用mi指令后每次显示一行信息以供编辑,其它行可以直接按回车表示确认,把deletion time改成0(未删除),Link count改成1。改好后退出debugfs:
  


代码如下:
debugfs:quit

  然后用fsck检查/dev/hda5


代码如下:
fsck /dev/hda5

程序会说找到丢失的数据块,放在lost+found里面。

另外debugfs不适合恢复大文件。

2、尝试方法二、foremost
foremost是很不错的软件,非常简单,一个命令就恢复了所有图片,但是文件名却丢失了,那么多图片如何恢复名字,没有找到好的办法。同上面debugfs一样,如果是单个文件,或者知道文件名字,这个方法是可以的。但文件量过大,且必须恢复文件名,此方法则不行。

基本使用办法如下:

下载并编译安装 foremost: 



代码如下:
[root@b2bapp1 ~]# wget http://foremost.sourceforge.net/pkg/foremost-1.5.7.tar.gz 
[root@b2bapp1 ~]# tar xf foremost-1.5.7.tar.gz -C /usr/src/ 
[root@b2bapp1 ~]# cd /usr/src/foremost-1.5.7/ 
[root@crushlinux foremost-1.5.7]# make && make install 
[root@b2bapp1 ~]# foremost -t png -i /dev/mapper/VolGroup-lv_root
Processing: /dev/mapper/VolGroup-lv_root

恢复完成后会在你的当前所在目录中建立一个 output 目录,并在在 output 目录下会建立 png 子目录下会包括所有已经恢复回来的 png 格式的文件。 
注意:恢复回来的文件,文件名已经改变,另外 output 目录下有一个 audit.txt 文件是恢复成功文件的列表。

3、尝试方法三、extundelete
在网上终于找到一个非常优秀的恢复软件extundelete,通过它,我恢复了绝大部分软件(分部被覆盖导致丢失)。操作方法如下:

安装软件:
软件下载地址:http://extundelete.sourceforge.net/

代码如下:
yum install e2fsprogs-devel libcom_err-devel -y 
tar -jxf extundelete-0.2.4.tar.bz2 
cd extundelete-0.2.4 
./configure 
make 
make install

执行恢复动作:



代码如下:
[root@b2bapp1 ~]# extundelete /dev/mapper/VolGroup-lv_root --restore-all

上述命令表示恢复上述分区下的所有近期删除文件,我通过此办法找回了99%的文件,还有少数被覆盖。

extundelete 其他主要用法:
单个文件的恢复:



代码如下:
extundelete /dev/sdaX --restore-file /path/file

目录恢复:

代码如下:
extundelete /dev/sdaX --restore-directory /path/dir

教训经验:
文件被删除后,恢复建议如下:

1、停止所有写入(可断网防止外部新的访问进入),最好将磁盘dd克隆一份。我们丢失的文件就是因为同事急于恢复,进行一些操作导致部分数据被覆盖。

2、如果被删除的文件被进程使用中,则千万别关闭该进程,用losf配合可以找回(因为还在内存中),这种恢复办法网上很多教程。

3、用合适的工具恢复。

代码如下:
[root@b2bapp1 ~]# wget http://foremost.sourceforge.net/pkg/foremost-1.5.7.tar.gz 
[root@b2bapp1 ~]# tar xf foremost-1.5.7.tar.gz -C /usr/src/ 
[root@b2bapp1 ~]# cd /usr/src/foremost-1.5.7/ 
[root@crushlinux foremost-1.5.7]# make && make install 
[root@b2bapp1 ~]# foremost -t png -i /dev/mapper/VolGroup-lv_root
Processing: /dev/mapper/VolGroup-lv_root


关键字:CentOS、系统、挂载
分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站