这种一般是有活动的进程存在持续标准输入或输出,到时文件被删除后,进程PID还是存在。这也就是有些服务器删除一些文件但是磁盘不释放的原因。比如当前举例说明:
通过一个shell终端对一个测试文件做cat追加 *** 作:
[root@21yunwei_backup ~]# echo "hello py" >testdelete.py
[root@21yunwei_backup ~]# cat >>testdelete.py
hello delete
另外一个终端查看这个文件可以清楚看到内容:
[root@21yunwei_backup ~]# cat testdelete.py
hello py
hello delete
此时,在当前服务器删除 *** 作文件rm -f ./testdelete.py
命令查看这个目录,文件已经不存在了,那么现在我们将其恢复出来。
1,lsof查看删除的文件进程是否还存在。这里用到一个命令lsof,如没有安装请自行yum或者apt-get。类似这种情况,我们可以先lsof查看删除的文件 是否还在:
[root@21yunwei_backup ~]# lsof | grep deleted
mysqld 1512 mysql 5u REG 252,3 0 6312397 /tmp/ibzW3Lot (deleted)
cat 20464 root 1w REG 252,3 23 1310722 /root/testdelete.py (deleted)
幸运的是这种情况进程还存在 ,那么开始进行恢复 *** 作。
2,恢复。
恢复命令:
cp /proc/pid/fd/1 /指定目录/文件名
进入 进程目录,一般是进入/proc/pid/fd/,针对当前情况:
[root@21yunwei_backup ~]# cd /proc/20464/fd
[root@21yunwei_backup fd]# ll
total 0
lrwx------ 1 root root 64 Nov 15 18:12 0 >/dev/pts/1
l-wx------ 1 root root 64 Nov 15 18:12 1 >/root/testdelete.py (deleted)
lrwx------ 1 root root 64 Nov 15 18:12 2 >/dev/pts/1
恢复 *** 作:
cp 1 /tmp/testdelete.py
查看文件:
[root@21yunwei_backup fd]# cat /tmp/testdelete.py
hello py
hello delete
恢复完成。
第一种 误删文件进程还在这种方法就比较简单,能还原的文件限制也比较多。如果被删除的文件的进程还是存在,即能找到进程PID。通过命令 lsof | grep (deletefile) 查找到进程id。然后就是进入进程目录 cd /proc/PID/fd 。然后可以通过 ll 命令查看具体文件信息,将有软连接到被删除文件的文件复制就可还原了。
第二种 使用extundelete之类基于inode的工具
针对 Linux 下的 ext 文件系统来说,常用的 Linux 文件删除恢复工具有 debugfs、ext3grep、extundelete 等。extundelete 是一个开源的数据恢复工具,支持 ext3、ext4 文件系统,其官方站点位于http://extundelete.sourceforce.net/,目前最新稳定版本为 0.2.0。
这个工具和还有一些其他类似的恢复工具,都是基于inode,还原文件的,也就是说,需要被删除文件的inode还在,没有被覆盖,即在文件删除之后,没有读写输入。所以第一件事就是挂起文件所在分区。但是这个 *** 作有个问题就是,如果系统只有一个挂载盘,而且还是线上服务的话,挂起是不现实的。并且就算读写不多,但是系统本身没有安装这些恢复工具,在你安装编译这些恢复工具时的读写,也很可能把删除的文件inode覆盖了。
但是如果,系统拥有多个挂载盘,且被删除文件分区所在的文件盘挂起并不印象,你还是可以尝试这个方法的。或者系统本身就有安装这个工具,距离文件删除不是很久,也可以试一下,也许inode还在呢。
具体使用方法这里就不说了,网上很多教程,随便搜一下都是。
第三种 testdisk工具
testdisk 是分区表恢复、raid 恢复、分区恢复的开源免费工具(testdisk 支持如下文件系统: FAT12/FAT16/FAT32/NTFS/ext2/ext3/ext4)。testdisk 支持的功能: 修复分区表, 恢复已删除分区,用 FAT32 备份表恢复启动扇区,重建 FAT12/FAT16/FAT32 启动扇区,修复 FAT 表,重建 NTFS 启动扇区,用备份表恢复 NTFS 启动扇区,用 mft 镜像表(mft mirror)修复 mft 表,查找 ext2/ext3 备份的 superblock,从 FAT,NTFS 及 ext2 文件系统恢复删除文件,从已删除的 FAT,NTFS 及 ext2/ext3 分区复制文件。
所以,这个工具是不基于inode的,即时文件后,没有挂起分区,读写 *** 作一直在进行,或者过去很久了,都是可以有机会恢复文件的。
但也不是百分百能成功,举个栗子,被删除的是 /usr/local/mytest 这个文件夹。然后你这个文件夹下部分文件的备份,为了及时先恢复部分线上业务,然后你mkdir /usr/local/mytest 然后将部分备份复制了进去。那么testdisk也无法拯救恢复了。还有就是testdisk恢复文件时,还需要注意看一下文件大小。如果文件大小显示为0,那么就算选择恢复这个文件,也是会得到一个0kb的文件。
所以这个适用于,一些inode已经被覆盖,但是文件物理存储块还未被覆盖的文件,可以尝试一下这个方法,也许可以找回部分丢失文件。
在使用rm -rf这个命令时一定要小心再小心,不然造成的后果是很严重的,因此提醒大家再使用这个命令时一定要保持头脑清醒。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)