占位图像 用户ID: 密码: 验证码: 登录 注册     占位图像
 
教育168搜索

a
频道信息
学前教育 基础教育
小学 初中
高中 高等教育
心理学 机械工程
园林 IT教育
办公软件 Director
Authorware 图形图象
FIREWORKS CORELDRAW
Maya PhotoShop
AutoCAD 3D
操作系统 Windows xp
Windows Vista Linux
Windows 2003 Windows 2000
FreeBSD 注册表
网站制作 FLASH
Dreamweaver CSS教程
装修设计 LightScape
装修风水 方案设计
英语 商务外语
素质教育 法制教育
企业培训
最新更新
·了解Linux系统强大的控制
·VMWare虚拟机上安装Ub
·Linux安装不求人 无需分
·Ubuntu6.0.6下的a
·在Linux桌面上 随意使用
·Ubuntu 7.04 桌面
·linux学习(远程控制跟I
·在Linux系统下优化Ora
·Ubuntu Linux:M
·在Linux系统下建立强大的
·Linux系统下如何加载U盘
·在嵌入式Linux中实现80
·Linux下安装JDK,To
·如何恢复误删除的Linux文
·Linux系统环境下的高级隐
·内核操作 Linux2.6内
·轻松实现 Linux系统下互
·Linux操作系统下利用SS

点击排行
·Ubuntu Linux:M
·在Linux桌面上 随意使用
·在Linux系统下优化Ora
·linux学习(远程控制跟I
·Ubuntu 7.04 桌面
·如何恢复误删除的Linux文
·Linux系统下如何加载U盘
·无线技术在Linux操作系统
·Linux操作系统下利用SS
·内核操作 Linux2.6内
·Ubuntu6.0.6下的a
·在嵌入式Linux中实现80
·在Linux系统下建立强大的
·提高Linux系统性能加速网
·轻松实现 Linux系统下互
·初手学堂;跟我学习安装配置R
·Linux系统环境下的高级隐
·Linux下安装JDK,To

如何恢复误删除的Linux文件
发布日期:2007-5-12  浏览:537次
关键字:

  作为一个多用户、多任务的操作系统Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux,或者误删文件后及时补救,还是可以恢复的。

  1、Ext2文件系统结构的简单介绍

  在Linux所用的Ext2文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分。每个文件还有一个节点,节点中包含有文件所有者,读写权限,文件类型等信息。对于一个小于12个块的文件,在节点中直接存储文件数据块的块号。如果文件大于12个块,那么节点在12个块号之后存储一个间接块的块号,在这个间接块号所对应的块中,存储有256个文件数据块的块号(Ext2fs中每个块号占用4字节,这样一个块中所能存储的块号就是1024/4=256)。如果有更大的文件,那么还会在节点中出现二级间接块和三级间接块。

  2、恢复被误删文件的方法

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

  首先以只读方式重新挂载被误删的文件所在分区。使用如下命令:(假设文件在/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  

就会出现debugfs提示符debugfs:  

使用lsdel命令可以列出很多被删除的文件的信息:  

debugfs:lsdel  

debugfs: 2692 deleted inodes found.  

Inode Owner Mode Size Blocks Time deleted  

164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001  

…………………………………………………………………………………  

36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001  

196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001  

debugfs:

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

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

debugfs:stat <196829>  

Inode: 196829 Type: regular Mode: 0644 Flags: 0x0 Version: 1  

User: 0 Group: 0 Size: 149500  

File ACL: 0 Directory ACL: 0  

Links: 0 Blockcount: 38  

Fragment: Address: 0 Number: 0 Size: 0 

ctime: 0x31a9a574 -- Mon May 27 13:52:04 2001  

atime: 0x31a21dd1 -- Tue May 21 20:47:29 2001  

mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 2001  

dtime: 0x31a9a574 -- Mon May 27 13:52:04 2001  

BLOCKS:  

594810 594811 594814 594815 594816 594817 ………………………………….  

TOTAL: 38  

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

debugfs:dump <196829> /mnt/hda/01.sav  

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

debugfs:quit  

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

debugfs:mi <196829>  

Mode [0100644]  

User ID [0]  

Group ID [0]  

Size [149500]  

Creation time [0x31a9a574]  

Modification time [0x31a9a574]  

Access time [0x31a21dd1]  

Deletion time [0x31a9a574] 0  

Link count [0] 1  

Block count [38]  

File flags [0x0]  

Reserved1 [0]  

File acl [0]  

Directory acl [0]  

Fragment address [0]  

Fragment number [0]  

Fragment size [0]  

Direct Block #0 [594810]  

…………………………….  

Triple Indirect Block [0]

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

  debugfs:quit

  然后用fsck检查/dev/hda5

  fsck /dev/hda5

  程序会说找到丢失的数据块,放在lost+found里面。这个目录里的文件就是我们要的东东。

关键字:

相关信息 用户评论
·了解Linux系统强大的控制台、终端和shell
·VMWare虚拟机上安装Ubuntu Linux方法
·Linux安装不求人 无需分割硬盘安装Ubuntu
·Ubuntu6.0.6下的apache2+php5+mysql配置的一些问题
·在Linux桌面上 随意使用Windows的文档
·Ubuntu 7.04 桌面服务器配置
·在Linux系统下优化Oracle具体步骤
·linux学习(远程控制跟IP地址配置)
·Ubuntu Linux:MySQL安装指南
·在Linux系统下建立强大的FTP搜索引擎
·Linux系统下如何加载U盘或移动硬盘
·在嵌入式Linux中实现802.11b无线网关
·Linux下安装JDK,Tomcat及设置Cron程序
·Linux系统环境下的高级隐藏技术介绍
·内核操作 Linux2.6内核驱动移植参考
·轻松实现 Linux系统下互联网过滤功能
·Linux操作系统下利用SSH进行远程控制
·制作在软盘上跑的Linux引导器详细过程

 

更多评论

验证码:
验证码