暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

误删数据恢复系列1



数据误删一般有两种场景,一是从数据盘直接删除,二是从数据库删除。今天主要介绍场景1数据盘数据误删

常见情况下来说呢,数据盘数据误删主要有两种场景:

场景一 :在执行rm -rf 删除文件时,该文件正在被进程使用。

场景二:这个文件没有被进程占用,从而被误删除。

所以理论上可以通过block块找回数据,因为上面保存着真实的数据。

风险:如果有进程在在不断地往磁盘写数据时,需要申请新的block块,如果操作系统分配已删除的block块时,新写入的数据就会覆盖原来的数据,此时就会造成数据真正丢失。

在这种情况下,应该第一时间umount目录所在的磁盘,或者不对磁盘进行任何写入,以保证理论数据还存在磁盘上,那么还可以通过相关分析找回数据。

针对场景一 搭建测试环境:

# 创建测试文件夹

mkdir /tmp/test

# 创建测试文件

echo "aaa.al" > /tmp/test/aaa.txt

tail -f /tmp/test/aaa.txt


此时,新开一个终端二,删除aaa.txt文件。

rm -rf /tmp/test/aaa.txt


此时的状态为终端一仍在占用进程,终端二中把文件删除掉了。

场景一恢复:

下面执行恢复操作,使用lsof命令:

# lsof | grep 删除的文件名,如:

lsof | grep aaa.txt


可以看到查询出来的结果处于“deleted”的状态,我需要找到此进程的pid,比如我这里的结果pid为9403。

根据pid号查找文件句柄:

# cd proc/记录的pid号/fd,如:

cd proc/1364000/fd

ll


恢复文件,执行以下命令,可以看到数据已经恢复回来了。

cp 3 /tmp/test/aaa.txt.bak

cat /tmp/test/aaa.txt.bak


4、场景二演示

场景二搭建:

我们这里使用单独的一块硬盘来做演示,我这里的硬盘是/sdb1,格式为ext4。

我这里在挂载的目录创建aaa.txt,写入内容和aaa的文件夹。

echo "aaa.al" > /test/aaa.txt

mkdir -p  /test/aaa

cd /test

ls


然后对硬盘内容删除:

cd test

rm -rf *

ls


场景二恢复:

恢复前需要对硬盘进行取消挂载:

umount /test -l

# 创建一个用于恢复数据的目录

mkdir /tmp/test

cd tmp/test


执行extundelete命令,如果没有此命令,可以直接安装:

yum -y install epel-release

yum -y install extundelete



完成后,执行命令,可以看到最后显示出误删除的文件,状态为Deleted。

开始恢复文件,找到我们需要恢复文件的Inode number,比如我这里图示为12,则执行以下命令,执行后,会在当前目录下生成RECOVERED_FILES目录,里面包含我们恢复的文件:


同样还可以恢复文件夹和所有文件,命令格式如下:

1)通过inode号(extundelete dev/sdb1 --restore-inode InodeNum)

2)通过file文件名(extundelete dev/sdb1 --restore-file FileName)

3)通过directory目录名(extundelete dev/sdb1 --restore-directory DirectoryName)

4)all全部恢复(extundelete dev/sdb1 --restore-all)

同样的xfs格式可以使用xfs_undelete工具修复

下载地址https://github.com/ianka/xfs_undelete

tcllib下载地址:https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/t/tcllib-1.14-1.el7.noarch.rpm

xfs文件系统删除恢复

查看文件系统格式

df -h


cd data                                                             

ls -l     

ls -l ahi-python



find ./ -name *.gz|xargs ls -l


rm -rf data/*   


发现误删除文件后,立马把误删除文件所在的分区设置成只读状态,或者卸载掉该分区,让分区没有写操作

umount data/             

使用xfs_undelete工具修复

误删文件所在的文件系统格式是xfs,所以选择了xfs_undelete工具进行修复

https://github.com/ianka/xfs_undelete

tcllib下载地址:

https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/t/tcllib-1.14-1.el7.noarch.rpm

源码安装tcllib

# tar -xf pgs.tar.gz                                                  

# cd pgs/ # tar -xf tcl8.6.11-src.tar.gz                              

# cd tcl8.6.11/unix/                                                  

# ./configure && make && make install   


# cd opt/pgs/                                                      

# ls -l       


执行xfs_undelete工具找回误删的文件

# unzip xfs_undelete-master.zip                                     

# cd xfs_undelete-master                                            

# ls -l


存放在目录下./xfs_undeleted,文件和之前的有差异,根据文件比对找到对应的数据,主要恢复sh、py和zip文件

# find ./ -name *.gz|xargs ls -l          

# tar -tf ./2021-02-24-21-00_423425453.tar.gz|head -n 10     


使用testdisk工具找回文件

这个工具使用比较简单,无需源码编译,解压即可使用

https://www.cgsecurity.org/wiki/TestDisk

photorec找回文件 

# tar -xf testdisk-7.2-WIP.linux26-x86_64.tar.bz2                   

# cd testdisk-7.2-WIP                                               

# ]# mkdir data_recovery                                            

# ./photorec_static                                                 

选择/dev/mapper/centos-data逻辑分区 ,Proceed继续


选择XFS分区,file opt可以选择修复的文件类型,如txt压缩等等,最后选择search继续


选择other文件系统,enter继续


选择要恢复文件所要存放的路径


开始恢复文件




欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。欢迎觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以扫描下面的二维码加入群聊,与业界的大佬们一起交流学习。



文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论