Linux恢复rm删除文件
Contents
[NOTE] Updated April 8, 2015. This article may have outdated content or subject matter.
##步骤一:将磁盘挂载为只读
这个是必须一定得放在第一步来做。如果不做,其它进程写了这个磁盘那就很难恢复了。磁盘规划时一定要做功能分区,/root 、/home、/tmp等等最好不要放在一个区。
比如/data挂载在/dev/sdc1上,用mount命令查看挂载信息:
[email protected]:~|⇒ mount
/dev/mapper/vg_gcc-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vg_gcc-lv_home on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
gvfs-fuse-daemon on /home/beyond/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=beyond)
/dev/sdc1 on /data type ext4 (rw)
从/dev/sdc1 on /data type ext4 (rw)
可知/data挂载在/dev/sdc1
用命令mount -r -n -o remount /data
来将/dev/sdc1进行重新挂载,挂载模式为只读
如果运行上面命令出现mount: /data is busy
,是还有别的进程占用了这个磁盘。将其统统杀掉。。。。
先查看哪些命令在使用/data
fuser -v -m /data
从这里可以看到好多进程在使用,赶紧全部干掉啊!!!
干完后再运行重挂载命令:
mount -r -n -o remount /data
最后测试下有没有成功改为只读模式:
#touch test
#touch: cannot touch 'test': Read-only file system
上面的方法有点复杂了,来点简单粗暴的,直接卸载磁盘:
# fuser -k /data
umount /data
步骤二:安装数据恢复软件extundelete
-
下载软件 [在此下载](wget http://superb-dca2.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2)
-
安装依赖包
yum -y install e2fsprogs e2fsprogs-libs e2fsprogs-devel
-
解压并安装
tar -xvf extundelete-0.2.4.tar.bz2 ./confiuger make sudo make install
步骤三:数据恢复
-
先查看删除了哪些文件,根据inode查看,先用
ls -id /data
查看inode,再用下面命令查看/data删除的文件:extundelete /dev/sdb2 --inode id(此处的id就是上面的id,2一般代码根目录)
-
从上面可以得到被删除的文件名,如果文件不是很多可以用下面的命令恢复:
开始恢复单个文件 # extundelete /dev/sdc1 --restore-file test(test是你 从上面查看的文件名,要恢复文件的名字) 恢复一个目录 # extundelete /dev/sdc1 --restore-directory test
上面都是默认将恢复的数据拷贝到当前目录的RECOVERED_FILES目录中,所以千万要注意你当前文件夹的容量一定要大于要恢复文件的大小,否则就会放不小。
如果删除的东西很多,最好用全盘恢复,命令如下:
# extundelete /dev/sdc1 --restore-all
-
还可以从时间来恢复和结点来恢复文件
根据时间来恢复文件
删除文件的时候应该记的,我们可以恢复从这个时间之后被删除的文件
# date -d "2015-04-03 16:00:00" +%s 1428048000 # extundelete --restore-all --after "1428048000" /data
根据inode来恢复文件
ls -id /data 1234 # extundelete --restore-inode 1234 /deb/sdc1
最后从实际效果来看还是基本都恢复了。最好用restore-all选项来恢复。
从这次血的教训,还是对rm命令启用别名,防止沉默式删除。
vim /etc/rc 或者 /etc/zshrc
# do not delete / or prompt if deleting more than 3 files at a time #
alias rm='rm -I --preserve-root'
# 都进行提示 #
alias mv='mv -i'
alias cp='cp -i'
alias ln='ln -i'
参考:
Author beyondkmp
LastMod 2015-04-08