以下方法在ext3的文件系统上测试通过,ext2和ext4的没有测试过。假设删除的文件在dir下面,位于/dev/sda5上。
主要借助debugfs
1 运行debugfs,进入调度模式
2 执行open /dev/sda5
3 执行ls -d dir 会列出此目录最近的 *** 作,其中可以看到<num>的日志删除记录
4 执行logdump -i <num> 显示此日志内容
5 在输出中寻找删除文件对应的block,记录下来blockid
6退出debugfs,运行dd if=/dev/sda5 of=/tmp/saved bs=1024 count=1 skip=blockid
此时就把删除的文件恢复了,不过这个方法有个问题,如果删除的是大文件,则占用多个block, *** 作起来比较麻烦。
debugfs在调试模式下,命令行比较难用,不过其支持-R选项,可以在SHELL里执行,就是用多个-R把要执行的命令连接起来,若命令中需要指定参数则需要加"",否则SHELL解析会有问题。
比较好用的工具有testdisk,之前用过他来恢复和备份系统的分区表,没有恢复过文件。作为一个多用户、多任务的 *** 作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux,或者误删文件后及时补救,还是可以回复的1、Ext2文件系统结构的简单介绍在Linux所用的Ext2文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分。每个文件还有一个节点,节点中包含有文件所有者,读写权限,文件类型等信息。对于一个小于12个块的文件,在节点中直接存储文件数据块的块号。如果文件大于12个块,那么节点在12个块号之后存储一个间接块的块号,在这个间接块号所对应的块中,存储有256个文件数据块的块号(Ext2fs中每个块号占用4字节,这样一个块中所能存储的块号就是1024/4=256)。如果有更大的文件,那么还会在节点中出现二级间接块和三级间接块。2、恢复被误删文件的方法大多数Linux发行版都提供一个debugfs工具,可以用来对Ext2文件系统进行编辑 *** 作。不过在使用这个工具之前,还有一些工作要做。首先以只读方式重新挂载被误删的文件所在分区。使用如下命令:(假设文件在/usr分区)mount–r–n–oremount/usr-r表示只读方式挂载;-n表示不写入/etc/mtab,如果是恢复/etc上的文件,就加上这个参数。如果系统说xxxpartionbusy,可以用fuser命令查看一下是哪些进程使用这个分区上的文件:fuser–v–m/usr如果没有什么重要的进程,用以下命令停掉它们:fuser-k–v–m/usr然后就可以重新挂载这些文件系统了。如果是把所有的文件统一安装在一个大的/分区当中,可以在boot提示符下用linuxsingle进入单用户模式,尽量减少系统进程向硬盘写入数据的机会,要不干脆把硬盘挂在别的机器上。另外,恢复出来的数据不要写到/上面,避免破坏那些有用的数据。如果机器上有dos/windows,可以写到这些分区上面:mount–r–n/dev/hda1/mnt/had然后就可以执行debugfs:(假设Linux在/dev/hda5)#debugfs/dev/hda5就会出现debugfs提示符debugfs:使用lsdel命令可以列出很多被删除的文件的信息:debugfs:lsdeldebugfs:2692deletedinodesfoundInodeOwnerModeSizeBlocksTimedeleted164821010060081921/1SunMay1319:22:462001…………………………………………………………………………………36137010064441/1TueApr2410:11:152001196829010064414950038/38MonMay2713:52:042001debugfs:列出的文件有很多(这里找到2692个),第一字段是文件节点号,第二字段是文件所有者,第三字段是读写权限,接下来是文件大小,占用块数,删除时间。然后就可以根据文件大小和删除日期判断那些是我们需要的。比如我们要恢复节点是196829的文件:可以先看看文件数据状态:debugfs:statInode:196829Type:regularMode:0644Flags:0x0Version:1User:0Group:0Size:149500FileACL:0DirectoryACL:0Links:0Blockcount:38Fragment:Address:0Number:0Size:0ctime:0x31a9a574--MonMay2713:52:042001atime:0x31a21dd1--TueMay2120:47:292001mtime:0x313bf4d7--TueMar508:01:272001dtime:0x31a9a574--MonMay2713:52:042001BLOCKS:594810594811594814594815594816594817…………………………………TOTAL:38然后就可以用dump指令恢复文件:debugfs:dump/mnt/hda/01sav这样就把文件恢复出来了。退出debugfs:debugfs:quit另一种方法是手工编辑inode:debugfs:miMode[0100644]UserID[0]GroupID[0]Size[149500]Creationtime[0x31a9a574]Modificationtime[0x31a9a574]Accesstime[0x31a21dd1]Deletiontime[0x31a9a574]0Linkcount[0]1Blockcount[38]Fileflags[0x0]Reserved1[0]Fileacl[0]Directoryacl[0]Fragmentaddress[0]Fragmentnumber[0]Fragmentsize[0]DirectBlock#0[594810]……………………………TripleIndirectBlock[0]使用mi指令后每次显示一行信息以供编辑,其它行可以直接按回车表示确认,把deletiontime改成0(未删除),Linkcount改成1。改好后退出debugfs:debugfs:quit然后用fsck检查/dev/hda5fsck/dev/hda5程序会说找到丢失的数据块,放在lost+found里面。这个目录里的文件就是我们要的东东。linux上的话对于一个已经打开则没有关闭的文件被删除时
可以试着找到打开该文件的进行pid然后从/proc/pid/下查找到文件的标识符
然后通过复制(写个程序等等方法)从这个文件标识符中就可以将原有文件复制出来
这一般是因为打开的文件被映射进内存,虽然在硬盘上已经删除了该文件
但在内存中该文件内容还存在,所以可以复制出来
当然如果是比较大的文件,而且是通过部分映射打开的文件可能就不能完全恢复了
另一方面根据所要恢复的分区所使用的文件系统不同也有相应不同的恢复工具
比如ext就可以使用debugfs、ext3grep、extundelete等等
也可以使用foremost进行数据恢复
所以进行数据恢复之前先要了解自己所要恢复的数据所在分区所使用的文件系统是什么
然后依这个文件系统为关键词再从搜索引擎中搜索相应数据恢复工具
一般数据恢复都要求文件被删除后立即停止对文件所在分区进行 *** 作(一般为写 *** 作)
linux上的话最好对该分区umount,然后再进行数据恢复
这是因为后续的 *** 作(写 *** 作)可能会将删除的数据覆盖,如果覆盖则无法恢复
另一方面如果对删除文件的方法是对其进行写零或者填充其它数据的话则无法进行恢复删除Linux之后,Linux的LILO却仍旧留在系统之中,使得机器启动的第一个界面不能回到选择Windows的菜单。 本文要告诉你解决的方法: 随着Linux的影 响越来越广泛,许多电脑爱好者也开始在自己的爱机上安装Linux。于是,硬盘上除了原来的Windows系统之外,还要加上一个Linux,开机时看到的第一个 *** 作系统选择菜单也变成了Linux的LILO或GRUB。 一段时间之后,由于实在不习惯使用Linux,或者硬盘空间紧张等原因,一些人又决定删除Linux。虽然删除Linux的过程很顺利,但LILO却留了下来。那么,如何才能删除LILO,恢复Windows的启动界面呢 LILO(或GRUB)是Linux的启动管理器。当前的大多数Linux发行版默认把LILO装入到主硬盘的主引导记录(MBR)。这就是安装Linux之后,机器启动的第一个画面变成Linux LILO的原因。 安装Linux的时候,我们可以要求安装程序把Linux启动管理器安装到另一个硬盘驱动器或启动软盘,避免Linux启动器改写MBR。但是,对于第一次安装Linux的用户,或者采用自动安装模式的用户,很可能不会想到Linux启动管理器改写MBR的问题。MBR被改写之后,Windows本身的启动模块仍没有丢失,只是现在需要通过Linux的启动管理器LILO或GRUB才能访问它了。 那么,如何才能清除LILO或GRUB,返回Windows本身的启动界面对于只有一个Windows的系统,很简单:制作一张包含FDISK程序的启动软盘,用软盘启动机器,然后在命令行执行FDISK /MBR。这个命令重置MBR,使得系统直接启动Windows。但是,如果系统在安装Linux之前有多个Windows,按照这种方式运行FDISK /MBR命令将覆盖Windows多重启动菜单,使得机器只能从默认的主 *** 作系统启动。 要清除LILO或GRUB返回以前的Windows启动界面,最快速、可靠的办法是使用Windows的故障恢复控制台。故障恢复控制台可以从Windows CD访问,也可以安装到系统上。如果要从CD运行故障恢复控制台,假设机器的主 *** 作系统是Windows XP,先用WinXP CD启动机器,出现提示时,选择手工恢复(按R键)。 直接把故障恢复控制台安装到系统上可以加快处理速度。 首先,打开Win XP的命令行窗口(选择菜单“开始”→“运行”,执行cmd);然后,在CD-ROM中插入WinXP光盘,在命令行上运行D:i386winnt32exe/cmdcons命令,其中D:是CD-ROM驱动器的盘符。安装结束后,下一次启动时就可以从Windows启动屏幕选择故障恢复控制台了。 如果机器上安装了一个以上的Win XP系统,故障恢复控制台会提示要修复的是哪一个Win XP。这时,应当选择最后安装的系统,然后输入管理员的密码登录该WinXP。在命令行上,输入fixmbr,并按Enter。系统提示说已经有一个不合法的启动记录存在,不必理会,只需确认继续 *** 作即可。重新启动,Windows启动菜单又回来了。
1、先要进行重启ubuntu,随即长按shirft进入grub菜单,这时候注意的是再进行选择recovery mode,按"e"键进入编辑页面,如下图所示。
2、然后这时候注意的是就会进入恢复模式的,然后就是要将要找回的文件所在的分区重新挂载成只读,如下图所示。
3、接着就是将ro recovery nomodeset注意的是进行替换为"rw single init=/bin/bash" ,然后就是要这时候注意的是按ctrl+x进入单用户模式,这时候就可以看到当前用户即为root即可。
4、最后要按ctrl+x 启动,这时候就会进行进入root的shell环境,然后就可以恢复文件了,如下图所示。
您好,方法1、执行命令“cd /home”进入服务器根目录home;
2、执行命令“ touch demotxt”创建一个演示文稿;
3、执行命令“ rm -rf demotxt ”删除该文件;
4、执行命令“ debugfs ”运用系统自带恢复工具debugfs来修复;
5、额外开一个xshell,执行命令“ df /home/ ”打开刚刚被删除文件所在分区;
6、执行命令“ open /dev/mapper/vg_root-lv_root ”查看目录分区;
7、执行命令“ ls -d /home ”显示被删除文件所在目录;
8、执行命令“ logdump -i <1030>”查找文件所在区块号;
9、记住上图block后面的数值并执行命令“ quit ”退出debugfs;
10、执行命令“ dd if=/dev/mapper/vg_root-lv_root of=/home/demotxt bs=640 count=1 skip=1089 ”恢复文件 *** 作;
11、bs与上图offset值一致,skip与block值一致;
12、执行命令“ ls ”可以看到文件demotxt被删除后又重新找回来了,恢复成功。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)