日期:2014-05-16  浏览次数:20706 次

linux恢复硬盘误删文件

前段时间,一个同学拿一个硬盘过来让我帮他恢复被删除的监控录像文件。经检查该硬盘是linux的ext3磁盘格式。我的linux是装在VMware虚拟机上的。我的笔记本通过usb连接他的硬盘。经过如下操作帮他恢复了被删除内容。

1、通过 #fdisk -l 命令查询虚拟机是否识别硬盘了,在这儿,可以看到,虚拟机系统并没有识别硬盘。有两种处理办法,如下:
a、在主系统(我的是windows XP)中弹出硬盘,点击虚拟系统界面,将活动光标置于虚拟系统中,此时再次插入硬盘,可以看到主系统右下角弹出虚拟机识别硬盘的消息提示,否则,重新上述操作,直到虚拟机识别硬盘为止。这种方法比较笨的,大家可以采取第二种方法,如下:
b、在虚拟机界面的VM菜单选项中设置即可,按以下菜单操作:VM/Removable Devices/USB Devices/选择要移除的硬盘。

此时,可以看到XP系统右下角弹出安全退出USB设备的消息提示,说明硬盘已被虚拟系统识别。再次通过#fdisk -l命令确认虚拟系统是否识别硬盘。

2、在/mnt目录下建立一个挂装USB存储器的目录,用下面的命令就可以创建:
#mkdir /mnt/usb。

3、一切准备工作已做好,终于可以将USB设备(/dev/sdb1)挂装到/mnt/usb目录下,用下面这个命令就可以了:
#mount -t ext3 /dev/sdb1/ /mnt/usb -o iocharset=utf8
mount命令格式:mount [-参数] [设备名称] [挂载点] [其他参数]??????
-t?? 指定设备的文件系统类型,在此,使用 -t ext3 是由于所使用硬盘的文件系统类型是 ext3;如果是ntfs 则使用 -t ntfs 等等,大家可根据自己的文件系统类型灵活修改。
-o?? 指定挂载文件系统时的选项,在此, -o iocharset=utf8 设定utf8字符集。假设你的locale是zh_CN.gb18030,相应命令应为 -o iocharset=gb2312;否则(在此,所使用Linux系统locale是zh_CN.UTF-8),使用gb2312即可。

4、运行如下命令即可查看USB存储器中的文件信息.做mount只是检查下硬盘,在恢复被删除文件时,还需要umount。
#ls -l /mnt/usb

5、检查linux是否自带了e2fsprogs这个软件:
[root@hscbu-tx18 ~]# rpm -qa |grep e2fsprogs
e2fsprogs-libs-1.39-20.el5
e2fsprogs-devel-1.39-20.el5
e2fsprogs-1.39-20.el5
这表示已安装e2fsprogs软件,如果没有安装,在光盘中找,或到网上找http://rpmfind.net/linux/RPM,
http://rpm.pbone.net。
6、下载安装ext3grep:
#wget http://ext3grep.googlecode.com/files/ext3grep-0.7.0.tar.gz
#tar zxf ext3grep-0.7.0.tar.gz
#cd ext3grep-0.7.0
#./configure
#make && make install
#ext3grep
没错误的话就安装成功了。
7、卸载硬盘,必须在不同的目录下进行卸载,也就是说不能在/mnt/usb目录下进行卸载.Linux下卸载硬盘命令如下:
#cd /root
#umount /mnt/usb
卸载成功。我们可以看到,/mnt/usb目录下已经为空。如果显示device is busy,可以用如下命令进行卸载:
#cd /root
#fuser -km /mnt/usb
#umount /mnt/usb
8、然后运行ext3grep查看被删除的文件:
#ext3grep /dev/sdb1 --ls --inode 2
现在恢复文件:
#ext3grep /dev/sdb1? --restore-all