荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Mill (继续修行), 信区: Linux
标  题: [转载] 关于Linux下的undelete(转寄)
发信站: BBS 荔园晨风站 (Wed Jan  3 22:22:49 2001), 转信

【 以下文字转载自 Mill 的信箱 】
【 原文由 LSA.bbs@smth.org 所发表 】
发信人: raner (lilo), 信区: Linux
标  题: 关于Linux下的undelete
发信站: BBS 水木清华站 (Tue Sep 23 18:28:19 1997)

      Linux中没有象DOS中undelete这样简单的工具, 它安装好后只是做了个
  alias rm='rm -i'的alias, 先confirm一下才删. 但假如真错删了重要
 文件怎么办? 一个解决办法是用mc(midnight commander), 它有个undelete
 功能,可以找到ext2 fs上被删掉的i-node, 文件名是无法恢复了(因为ext2
 也用Unix的传统,目录文件中保存文件名和i-node index, 删除时将i-node
 清为0, 因此从i-node table是无法反查到目录文件的), 但文件的其余信息
 都还在.

    我在恢复一个重要文件时发现mc只能恢复前12K内容,觉得很奇怪, 用
 lde(Linux Disk Editor, 仿Norton做的, 编辑硬盘block很好用)学了一下
 ext2 fs, 结构很简单, 每个i-node中12个direct block, 3个1/2/3次indirect
 block. 而Linux Kernel在删文件时做了一件令我费解的事:  它把所有的
 indirect block全清0! 按道理在block bitmap中标为free就得了,将其
 zero简直是吃力不讨好. 这也就是为什么mc只能恢复12K(direct block)的原因
 而且若文件的block不是连续存放的,那将导致后面的block根本无法恢复!

    不过幸好,我那个文件只几十K(源程序), 而且是unfragmented的,即
 block连续,用lde手工恢复了个indirect block就OK了. 据说在2.1.x板的
 kernel中已将zero indirect block的举动去掉了, 那样恢复起来就好办多了.
 (干完后才发现有篇mini-HOWTO是讲undelete的 :-( )

    吸取这次教训,我装了个safedelete, alias rm=safedelete, alias purge=rm
  它起Win95中RecycleBin的作用,删掉的文件存于一个地方,过指定时间自动
  purge, 还廷好用。

--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.5.84]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.92]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店