起因:一个R报错,通过Google查找解决办法,建议删除.rstudio文件
R报错
于是我执行了rm -rf .rstudio*,在这之前我其实通过ls看了当前目录的文件(得知所有文件均在该目录下),但我还是按了enter。转念一想,好像犯了大错,此时我再看我服务器下的文件时---空空如也。内心是崩溃的,我的所有代码均未备份,其实其他文件倒没什么,主要还是代码。
于是我开始了坎坷的文件恢复之旅(Linux知识扩增记)
1. lsof查看删除的文件进程是否还存在。
这里用到一个命令lsof,利用apt-get安装。接着利用lsof查看删除的文件 是否还在
lsof | grep deleted
结果发现不存在了,补:若这种情况进程还存在 ,那么可以开始进行以下恢复操作
恢复命令:
cp /proc/pid/fd/1/指定目录/文件名
进入进程目录,一般是进入/proc/pid/fd/,针对当前情况:
cd /proc/20464/fd
ll
恢复操作:
cp 1/tmp/testdelete.py
查看文件:
cat /tmp/testdelete.py
恢复完成。
2.误删除的文件进程已经不存在,借助于工具还原。采用的工具是extundelete第三方工具。
2.1停止对当前分区做任何操作,防止inode被覆盖。inode被覆盖基本就告别恢复了。比如停止所在分区的服务,卸载目录所在的设备,有必要的情况下都可以断网。2.通过dd命令对当前分区进行备份,防止第三方软件恢复失败导致数据丢失。适合数据非常重要的情况,这里测试,就没有备份,如备份可以考虑如下方式:
dd if=/path/filename of=/dev/vdc1
2.2通过umount命令,对当前设备分区卸载。或者fuser 命令。
#先查看要恢复文件的分区的文件系统
df -Th
#再卸载
umount /dev/vdb1
2.3如果提示设备busy,可以用fuser命令强制卸载:
fuser -m -v -i -k /dev/vdb1
2.4下载第三方工具extundelete安装,搜索误删除的文件进行还原。
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4
./configure
make && make install
#或直接在主服务器
sudo apt-get install extundelete
2.5扫描误删除的文件
extundelete /dev/vdb1 --inode 2 (根分区的inode值是2)
3.通过扫描发现了我们删除的文件夹,现在执行恢复操作。
3.1 恢复单一文件passwd
extundelete /dev/vdb1 --restore-file passwd
恢复文件是放到了当前目录RECOVERED_FILES。 查看恢复的文件:
tail -5 RECOVERED_FILES/passwd
3.2恢复目录deletetest
extundelete /dev/vdb1 --restore-directory deletetest
3.3恢复所有
extundelete /dev/vdb1 --restore-all
3.4恢复指定inode
extundelete /dev/vdb1 --restore-inode 14
注意恢复inode的时候,恢复出来的文件名和之前不一样,需要单独进行改名。内容一般是没问题的。
虽然最终还是没有把文件恢复过来,但是经历了这次“打击”,我相信后面在使用rm时一定会更加小心以及及时做好代码和重要文件的备份,也希望观看帖子的各位都不要遇到这种情况,不说了,我要开始重新“搬砖”了。
罗曼罗兰广为流传的一句话:“There is only one heroism in the world: to see the world as it is and to love it.”世界上只有一种英雄主义,那就是认识生活的真相后依然爱它.
如何在Linux上恢复误删除的文件或目录
(Linux)误删文件恢复命令及方法
Linuxt通过命令lsof或者extundelete工具恢复误删除的文件或者目录
寸言
网友评论