linux rm文件恢复总结

来源:互联网 发布:mysql编写存储过程 编辑:程序博客网 时间:2024/05/11 13:10

昨天意外删除了一些重要文件,经过一天左右的时候恢复,成功实现rm恢复。在这里总结一下方法。当然防范这种情况还是最重要的,可以参考之前写过的linux rm安全

恢复条件和一些准备:
一、保护数据。
先提点删除恢复常识:文件删除后,虽然没有清除文件内容,但是文件所占的存储空间已经允许被申请写入,所以要恢复文件的话,必需保证不要再向文件所在分区写数据,我的是虚拟机,直接kill进程了,非虚拟机可以umount分区,如果是主分区,直接断电。对于主分区,安全起见用livecd将硬盘只读挂载后操作。如果是虚拟机,即使是要恢复根分区,也可以不用livecd,通过复制硬盘镜像的方式生成多份硬盘来实现还原。将复制的硬盘添加到虚拟系统里,这样系统里就有两份硬盘了。但是我在尝试时发现,虽然可以正确识别为a和b两块硬盘,但如论启动哪个系统,都是从一块硬盘加载的,可能是boot信息的问题。

二、linux LVM文件系统
这个是逻辑卷管理,不是像ntfs、ext3一样的文件系统,所以不能直接挂载,因为一个lmv下面可能对应着多个逻辑分区,我们一次只能挂载其中的一个。所以要根据lvm找到逻辑分区。
1.“fdisk -l”
查看连接的硬盘是不是lvm,如果不是,则可以跳过这一部分。

fdisk -l
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        1044     8281507+  8e  Linux LVM
2.如果是,安装lvm2
    自动安装:“apt-get install lvm2”(可能不提供包),或者“yum install 包名”安装(可能不提供包)
    直接下载:http://sources.redhat.com/lvm2/
3.“vgscan”,扫描逻辑分区

root@ubuntu:~# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "VolGroup00" using metadata type lvm2
4.“lvscan”, 查看逻辑分区,状态未激活

root@ubuntu:~# lvscan
 inactive            '/dev/VolGroup00/LogVol00' [6.88 GiB] inherit
 inactive            '/dev/VolGroup00/LogVol01' [1.00 GiB] inherit
5.“vgchange -a y”  激活
6.“lvscan” 查看状态

root@ubuntu:~# lvscan
  ACTIVE            '/dev/VolGroup00/LogVol00' [6.88 GiB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [1.00 GiB] inherit

现在就可以通过来挂载指定的分区了。
参考:http://apps.hi.baidu.com/share/detail/19631288
三、linux源码安装
1. ./configure 如果失败,刚是缺少依赖库,下载安装所需库即可。
2. make 编译
3. make install 安装

恢复方法
方法一:使用debugfs(不适用我的情况,没有严格测试恢复,只列出了node值)
debugfs是调试文件系统的,可以查看文件的node值,根据文件系统Journal日志找到数据所在的块,将指定块存放起来即可。
适用范围:删除后,未关机,因为关机后Journal会丢失。
1。“umount 设备描述符文件”, 卸载指定分区
2。“debugfs 设备描述符文件”,启动debugfs
3。“cd 目录”,进入删除文件所在指定的目录
4。“ls -ld”,查看文件node值。如果没有你要的文件,那么很遗憾,它已经被破坏了。
5。“dumplog -i<node值>” 获取日志信息,找到块信息,示例Blocks: (0+1): 10234
6。保存块的数据,示例dd if=/dev/sda5 of=/tmp/test.txt bs=4096 count=1 skip= 10234
参考http://linux.net527.cn/Linuxwendang/xitongguanliyuan/16884.html

方法二:使用ext3grep
说明:使用方法网上有,但我在使用时并没有成功,因为它没有识别出lvm逻辑分区。
适用:lmv分二个分区我失败了,所以觉得没有用lmv分多个逻辑分区的应该适用。不可以恢复目录,只以恢复文件
提示:在要保存恢复文件的目录操作,确保空间足够,如果inode值为2,则会将整体分区数据保存而不仅是已被删的
1。下载安装ext3grep
http://code.google.com/p/ext3grep/
2。如果是lvm,则按上面提到的方式激活逻辑分区。
3。ext3grep --ls --inode node值   (node值是你要恢复的文件所在目录的node值,可以用debugfs查看,2则是分区根目录)
3。恢复目录里面的一个文件
 ext3grep /home/sheng/file --restore-file del/1 (注:del在分区根目录下)
 恢复所有文件
 ext3grep /home/sheng/file --restore-all
 参考:http://linux.chinaunix.net/techdoc/system/2009/07/07/1122061.shtml

方法三:使用extundelete (最有效方法
extundelete是基于ext3grep的软件,提供方便的命令,可以恢复文件,而且对lmv逻辑分区也有效,我就是用这种方法还原的数据。
适用:删除数据未被破坏的数据
提示:在要保存恢复文件的目录操作,确保空间足够,如果inode值为2,则会将整体分区数据保存而不仅是已被删的
1。下载安装extundelete
   http://extundelete.sourceforge.net/
2。如果是lvm,用上面提到的方法激活逻辑分区。
3。extundelete 分区设备 参数
  常用参数:--restore-all     全恢复到当前目录下
    --restore-inode 值 按inode恢复
 --restore-files filename
 --restore-directory path/of/directory
 参考:http://extundelete.sourceforge.net/


原创粉丝点击