免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: tian1118
打印 上一主题 下一主题

如何恢复 rm -fr * 后的文件。 [复制链接]

论坛徽章:
0
61 [报告]
发表于 2004-06-30 09:49 |只看该作者

如何恢复 rm -fr * 后的文件。

朋友能讲讲为什么
touch ./-i
rm -fr *
后,系统会跳出删除提示?

论坛徽章:
0
62 [报告]
发表于 2004-06-30 09:56 |只看该作者

如何恢复 rm -fr * 后的文件。

In order to undelete a file, you must know the following things:

On which device your file was stored
What kind of file system was used (eg. ext2, reiserFS, vfat)
To find it out, type 'mount | column -t' in the shell, or to make it evan more easy, copy-paste or type this into your shell:

echo "DEVICE DIRECTORY FS-TYPE" >; tmp; mount | cut -d" " -f1,3,5 | \
sort >;>; tmp; cat tmp | column -t | sed -e "1s/.*/`tput smso`&`tput rmso`/"
The output should be something like this:



bash$ mount | column -t
/dev/hda5  on  /               type  ext2      (rw)
proc       on  /proc           type  proc      (rw)
usbdevfs   on  /proc/bus/usb   type  usbdevfs  (rw)
devpts     on  /dev/pts        type  devpts    (rw)
/dev/hda1  on  /mnt/windows/C  type  vfat      (rw,noexec,nosuid,nodev)
/dev/hda6  on  /mnt/windows/E  type  vfat      (rw,noexec,nosuid,nodev)
/dev/hdc5  on  /mnt/oldwin     type  vfat      (rw,noexec,nosuid,nodev)

bash$ echo "DEVICE DIRECTORY FS-TYPE" >; tmp; mount | cut -d" " -f1,3,5 | \
sort >;>; tmp; cat tmp | column -t | sed -e "1s/.*/`tput smso`&`tput rmso`/"
DEVICE     DIRECTORY       FS-TYPE
/dev/hda1  /mnt/windows/C  vfat
/dev/hda5  /               ext2
/dev/hda6  /mnt/windows/E  vfat
/dev/hdc5  /mnt/oldwin     vfat
devpts     /dev/pts        devpts
proc       /proc           proc
usbdevfs   /proc/bus/usb   usbdevfs
Now, of which (printed) directory was the directory of your deleted file a subdirectory? E.g. if your file was stored on /home/user , you'll have to look for '/', since no closer match can be found. Found it? Cool, right now it's a piece of cake to find the device on which the file was stored and the filesystem type of the device.

Ok, now you know the essentials to undelete a file. This can be done in several ways:

论坛徽章:
0
63 [报告]
发表于 2004-06-30 10:07 |只看该作者

如何恢复 rm -fr * 后的文件。

你在LINUX也可以进入到E盘啊,
mkdir /mnt/win_x(E)
mount -o codepage=936,iocharset=cp936 /dev/hdc2 /mnt/win_x就可以看WINDOWS里面的东东了。。

论坛徽章:
0
64 [报告]
发表于 2004-06-30 10:39 |只看该作者

如何恢复 rm -fr * 后的文件。

原帖由 "tian1118" 发表:
朋友能讲讲为什么
touch ./-i
rm -fr *
后,系统会跳出删除提示?


因为*会由shell解析后由所有文件名代替,比如当前目录下由文件1 2 3三个文件
rm -fr * = rm -fr 1 2 3
如果有个-i的文件,由于“-”会排在大多数文件的前面(如果有","开头的文件,这方法不奏效,因为,号排在-号前面),所以
rm -fr * = rm -fr -i 1 2 3
因为大多数的unix在-f 和-i同时出现时以-i为准,所以..........

这个方法在很多系统中测试过,就该死的sco505不行,因为它是按照文件建立时间排列的,如果当前目录下有就旧文件存在,-i这个文件就排到中间去了,这样上面的方法就不去作用了;当然如果你是新建的目录,先建立个-i的文件,还是有效的。

论坛徽章:
0
65 [报告]
发表于 2004-07-01 17:51 |只看该作者

如何恢复 rm -fr * 后的文件。

Linux文件系统的反删除方法

作为一个多用户、多任务的操作系统,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里面。这个目录里的文件就是我们要的东东。
Now all O.K. Good Luck.


这是我以前看到的保存下,不知能不能用上

论坛徽章:
0
66 [报告]
发表于 2004-07-01 19:59 |只看该作者

如何恢复 rm -fr * 后的文件。

exe2undel,还马马虎虎吧

论坛徽章:
0
67 [报告]
发表于 2004-07-01 21:47 |只看该作者

如何恢复 rm -fr * 后的文件。

[quote="zhuangpeipei"]不知道大家看过<反托拉斯>没有,里面用的确实是linux.我记得确实有一个命令可以恢复删除的东东的.电影的主人公用过.如果我说错了,大家当我一人胡言乱语.[/quote]

是那样的,用了一些命令恢复删除的视频,我还在哪个地方看见过具体的用法,再找找吧,祝好运。

论坛徽章:
0
68 [报告]
发表于 2004-07-02 20:28 |只看该作者

如何恢复 rm -fr * 后的文件。

mswin平台下的EasyRecovery的恢复程度似乎取决于运气的。
前面的那位好像比较幸运,我的一个20G的硬盘(Fat32),被人重新分区然后格式化了C盘,又安装了winXP后,我用那个软件做恢复只恢复了1/5的数据,而且都是乱名字的,幸亏重要文件有备份,逃过了一劫,所以大家记着备份!

论坛徽章:
0
69 [报告]
发表于 2004-07-03 00:49 |只看该作者

如何恢复 rm -fr * 后的文件。

记得曾看过的一本书里说过用rm命令删除的文件可以恢复
只是不知道具体过程

论坛徽章:
0
70 [报告]
发表于 2004-07-17 11:26 |只看该作者

如何恢复 rm -fr * 后的文件。

关于误删除文件的恢复


发信人: wwind (随风), 信区: Linux     
标 题: 关于误删除文件的恢复
发信站: BBS 水木清华站 (Sun Apr 30 13:37:50 2000)

  前些天被我误删掉的home directory下的几千个文件,经过本人数天的连续奋战,
现绝大部分已恢复,算是奇迹也不是奇迹。
  删掉文件其实只是将指向数据块的索引点(information nodes)释放,只要不被覆
盖,数据其实还在硬盘上,关键在于找出索引点,然后将其所指数据块内的数据抓出,
再保存到另外的分区。
  我先在网上查有关linux
undelete的信息,找到一个ext2fs-undeletion的mini-Howto,后发觉在RH6.2的
/usr/doc/HOWTO内也有,按它的方法,先将被删掉数据的盘区umount掉(防止写盘覆
盖被删除的数据,显然这一步在误删数据后做得越快越好,尤其是对多人使用的计算
机),然后查文件系统中哪些索引点最近被释放:
#debugfs /dev/hda6 (my 'home' partition)
  debugfs: lsdel
即给出相应信息,包括索引点,文件属主,大小,删除日期等。也可将结果输出到
一个文件中
  debugfs: quit
# echo lsdel | debugfs /dev/hda6 >; lsdel.out
还可用debugfs中stat查看某一索引点的详细信息:
  debugfs: stat <148003>;   (148003为索引点)
尤其注意其数据块是否连续!
然后将该索引点所指数据块内的数据抓出并存到另一盘区:
  debugfs: dump <148003>; /dosd/tmp/recovered.001
  按该mini-Howto的说法,以上方法只使用于大小不超过12个block的文件,对于
超过12个block的文件,由于unix是将数据分段保存的,需要将各段数据分别取出再
拼接,所以比较麻烦。但我用stat检查的结果,大文件的数据块也都是紧挨着的,
并没有被分段, 于是我试着用同样的方法将文件dump出来,发觉结果完全正确,对
六百多兆的大文件也适用!不知道linux就是连续保存文件的,还是因为我的计算机
只有我一个用户而使然,反正我用上述简单方法将我误删的绝大部分文件都恢复了。
  需要说明的一点是,恢复的文件是没有保留文件名的,需要你查看文件内容后,
再重新命名。
  靠人不如靠己,当初没有轻易放弃看来是正确的,尽管我有少量备份。不过经过
这场"灾难",本人的指法倒是又熟练了不少:几千个文件得一个一个恢复!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP