📄 972.html
字号:
<TD><IMG height=1 src="images/spacer.gif" tppabs="http://www.linuxhero.com/docs/images/spacer.gif" width=1
border=0></TD></TR>
<TR>
<TD colSpan=3><A title=linux知识宝库
href="index.html" tppabs="http://www.linuxhero.com/docs/index.html"><IMG height=83
src="images/header_r1_c1.gif" tppabs="http://www.linuxhero.com/docs/images/header_r1_c1.gif" width=472 border=0
name=header_r1_c1></A></TD>
<TD colSpan=3>
<form action="http://www.linuxhero.com/docs/search.html" method=get>
<table
style="BORDER-RIGHT: #c4c4c4 1px solid; BORDER-TOP: #c4c4c4 1px solid; BORDER-LEFT: #c4c4c4 1px solid; BORDER-BOTTOM: #c4c4c4 1px solid"
cellspacing=0 cellpadding=3 width="95%" border=0 align="center">
<tbody>
<tr>
<td noWrap background="images/bgline.gif" tppabs="http://www.linuxhero.com/docs/images/bgline.gif">
<div align=center><font class=normalfont>搜索文章:
<input type=hidden value=result name=action2>
<input type=radio checked value=title name=type>标题
<input type=radio value=content name=type>内容
<input type=image src="images/button_go.gif" tppabs="http://www.linuxhero.com/docs/images/button_go.gif" border=0 name=image2>
</font></div>
</td>
</tr>
<tr>
<td noWrap>
<div align="center">
<input maxlength=100 size=30 name=keyword2>
</div>
</td>
</tr></tbody>
</table>
</form>
</TD>
<TD rowSpan=2><IMG src="images/header_r1_c7.gif" tppabs="http://www.linuxhero.com/docs/images/header_r1_c7.gif" width=26 border=0 name=header_r1_c7></TD>
<TD><IMG height=83 src="images/spacer.gif" tppabs="http://www.linuxhero.com/docs/images/spacer.gif" width=1 border=0></TD></TR>
<TR>
<TD background="images/bgline.gif" tppabs="http://www.linuxhero.com/docs/images/bgline.gif"><IMG height=22
src="images/header_r2_c1.gif" tppabs="http://www.linuxhero.com/docs/images/header_r2_c1.gif" width=296 border=0
name=header_r2_c1></TD>
<TD background="images/bgline.gif" tppabs="http://www.linuxhero.com/docs/images/bgline.gif" colSpan=5>
<DIV align=right><FONT class=normalfont>当前位置:
<A href="index.html" tppabs="http://www.linuxhero.com/docs/index.html">本站首页</A>
<font color="#FF6699">>></font>
<A href="type13.html" tppabs="http://www.linuxhero.com/docs/type13.html">杂项工具</A> | <A href="copyright.html" tppabs="http://www.linuxhero.com/docs/copyright.html">版权说明</A></font></DIV>
</TD>
<TD><IMG height=22 src="images/spacer.gif" tppabs="http://www.linuxhero.com/docs/images/spacer.gif" width=1
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=10 cellPadding=0 width="100%" bgColor=#ffffff
border=0>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=3 width="100%" border=0>
<TR>
<TD vAlign=top align=middle width="60%">
<TABLE cellSpacing=0 cellPadding=0 width="100%"
background="images/back.gif" tppabs="http://www.linuxhero.com/docs/images/back.gif" border=0>
<TBODY>
<TR>
<TD vAlign=top width="80%">
<DIV align=center>
<FORM action="search.html" tppabs="http://www.linuxhero.com/docs/search.html" method=get>
</FORM>
<TABLE cellSpacing=0 cellPadding=0 width="95%"
border=0><TBODY>
<TR>
<TD background="images/bgi.gif" tppabs="http://www.linuxhero.com/docs/images/bgi.gif"
height=30></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=3 width="95%"
align=center border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=3 width="100%"
border=0>
<TBODY>
<TR>
<TD vAlign=top>
<p><FONT class=normalfont><B><font color=blue>ext2文件系统下恢复误删除的文件另一方法</font></B></FONT><BR><FONT class=smallfont color=#ff9900>2004-04-23 15:18 pm</FONT><BR><FONT class=normalfont>作者:zjujoe@263.net<br>来自:Linux知识宝库<br>联系方式:无名<br><br>仔细看了一下,和原先弱智大哥的精华贴不太一样,特贴出,原作出自水木清华,有点老了,针对2.2.x kernel的........<br>
---------------------------------------------------------------<br>
usr/doc/HOWTO/mini/Ext2fs-Undeletion.gz<br>
<br>
在此严正声明!! 写这篇文章的目的,是给那些处于万不得已情况下的人们,有一个挽回的机会,并不意味着从此我们就可以大意,砍档不需要三思。前面提到,我有一个档案无法 100% 救回,事实上,长达 8MB 的档案能救回 99% 已是幸运中的幸运,一般的情况下若能救回 70% - 80% 已经要愉笑了。所以,不要指望 undelete 能救回一切。预防胜于治疗! 请大家平时就养成好习惯,砍档前请三思!!!<br>
<br>
理论分析<br>
我们能救回的机会有多大? 在 kernel-2.0.X 系列中 (本站所用的 kernel 是 2.0.33) ,取决以下两点:<br>
档案原来所在的磁区是否没有被覆写?<br>
档案是否完全连续?<br>
第一点我们可以与时间竞赛,就是当一发现档案误砍时,要以最快的速度 umount 该 filesystem, 或将该 filesystem remount 成唯读。就这次的情况而言,档案误砍是在事发一个小时后才发现的,但由于该 filesystem 写入的机会很少 (我几乎可确定一天才只有一次,做 backup),所以第一点算是过关了。<br>
第二点真的是要听天由命了,就本站所使用的 kernel, 必须要在假设「长档案」所占的 block 完全连续的情况下,才有可能完全救回来! 一个 block 是 1024 bytes,长达 8 MB 的档案就有超过 8000 个 block。在经常读写的 filesystem 中,可以想见长档案很难完全连续,但在我们的系统中,这一点似乎又多了几分指望。同时,Linux ext2 如此精良的 filesystem, 能做到前 7950 多个 block 都连续,这一点也功不可没。<br>
<br>
好了,以下我就讲一下我的步骤。<br>
抢救步骤 I - mount filesystem readonly<br>
该档案的位置原来是在 /var/hda/backup/home/bbs 下,我们系统的 filesystem 组态是:<br>
<br>
root@bbs:/home/ftp/rescue# df<br>
Filesystem 1024-blocks Used Available Capacity Mounted on<br>
/dev/sda1 396500 312769 63250 83% /<br>
/dev/sda3 777410 537633 199615 73% /home<br>
/dev/hda1 199047 36927 151840 20% /var/hda<br>
/dev/hda2 1029023 490998 485710 50% /home/ftp<br>
<br>
因此 /var/hda 这个 filesystem 要马上 mount 成 readonly (以下请用 root 身份):<br>
<br>
mount -o remount,ro /var/hda<br>
<br>
当然也可以直接 umount 它,但有时候可能有某些 process 正在此 filesystem下运作,您可能无法直接 umount 它。因此我选择 mount readonly。但您也可以用:<br>
<br>
fuser -v -m /usr<br>
<br>
看一下目前是那些 process 在用这个 filesystem, 然后一一砍掉,再 umount。<br>
<br>
抢救步骤 II<br>
<br>
执行<br>
<br>
echo lsdel | debugfs /dev/hda1 | less<br>
<br>
看一下该 filesystem 最近被砍的 inode (档案) 有那些 (为什么是 /dev/hda1? 请见上头的 df 列表)? 在这奶F档案的重要资讯,如大小、时间、属性等等。就我们的系统而言,其列示如下:<br>
<br>
debugfs: 92 deleted inodes found.<br>
Inode Owner Mode Size Blocks Time deleted<br>
....................................................................<br>
29771 0 100644 1255337 14/14 Sat Jan 30 22:37:10 1999<br>
29772 0 100644 5161017 14/14 Sat Jan 30 22:37:10 1999<br>
29773 0 100644 8220922 14/14 Sat Jan 30 22:37:10 1999<br>
29774 0 100644 5431 6/6 Sat Jan 30 22:37:10 1999<br>
<br>
请注意!我们必须要在档案大小、被砍时间等资讯中判断出要救回的档案是那一个。在此,我们要救回 29773 这个 inode。<br>
<br>
抢救步骤 III<br>
<br>
执行<br>
<br>
echo "stat <29773>" | debugfs /dev/hda1<br>
<br>
列出该 inode 的所有资讯,如下:<br>
<br>
debugfs: stat <29773><br>
Inode: 29773 Type: regular Mode: 0644 Flags: 0x0 Version: 1<br>
User: 0 Group: 0 Size: 8220922<br>
File ACL: 0 Directory ACL: 0<br>
Links: 0 Blockcount: 16124<br>
Fragment: Address: 0 Number: 0 Size: 0<br>
ctime: 0x36b31916 -- Sat Jan 30 22:37:10 1999<br>
atime: 0x36aebee4 -- Wed Jan 27 15:23:16 1999<br>
mtime: 0x36adec25 -- Wed Jan 27 00:24:05 1999<br>
dtime: 0x36b31916 -- Sat Jan 30 22:37:10 1999<br>
BLOCKS:<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -