linux使用rm -rf删除数据后恢复
centos7 rm之后数据恢复的方式
仅供自己学习参考 如果文件没有被使用 初次测试发现基本无法恢复。
场景1 文件正在被程序使用
创建一个文件 并用tail -f一直读取文件信息 不要使用tailf 这个文件删除后会被终止掉
在另一个窗口删除这个文件
安装lsof并通过lsof 查看正在读取这个文件的进程
yum -y install lsof
lsof |grep delete test.txt
去/proc下查找对应pid的文件句柄
cd /proc/13419/fd
ls -l
把状态为delete的数字 copy到任意文件夹恢复
cp 3 /opt/test.txt_bak
# 查看test.txt_bak的内容 与原文件一致
cat /opt/test.txt_bak
场景2 文件未被程序使用
xfs貌似没有成熟的恢复工具啊。看网上都是恢复ext4的。关于xfs我查到的都是先备份
基本上我自己测试恢复 都无法恢复。。。也可能是我不熟练的缘故
下面测试的工具都恢复失败,或者恢复出来的文件不对。
查看磁盘类型
df -lhT
如果是外挂盘 应该先umount 确保没有读写操作影响恢复
df -h
umount /${mount_dir}
df -h
工具0 ReclaiMe xfs格式windows恢复软件
官网:http://www.reclaime.com/library/xfs-recovery.aspx
支持虚拟硬盘文件vhd,vmdk,还支持xfs格式系统。只有windows exe 我这边没有测试安装
工具1 extundelete
yum -y install bzip2
cd /opt
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
bzip2 -d extundelete-0.2.4.tar.bz2
tar xvf extundelete-0.2.4.tar
yum install -y gcc-c++ e2fsprogs-devel
cd extundelete-0.2.4
./configure
make && make install
/usr/local/bin/extundelete -v
安装完成 查看版本号
测试磁盘是xfs 恢复不了
测试磁盘是ext4 这里引用了阿里云的例子
完成以下操作,使用extundelete模拟数据误删除后恢复的过程:
-
检查ECS现有的磁盘和可用分区,并对/dev/vdb进行分区和格式化。
fdisk -l # 此处省略格式化等命令
-
将分区后的磁盘挂载到/zhuyun目录下,然后在/zhuyun下新建测试文件hello,并写入内容
test
。mkdir /zhuyun #新建zhuyun目录 mount /dev/vdb1 /zhuyun #将磁盘挂载到zhuyun目录下 echo test > hello #写入测试文件
-
记录文件hello的md5值。md5sum命令用于生成和校验删除前和恢复后两个文件的md5值。
md5sum hello
-
模拟删除hello文件。
rm -rf hello cd ~ fuser -k /zhuyun #结束使用某分区的进程树(确认没有资源占用的话,可以跳过此步)
-
卸载数据盘。
umount /dev/vdb1 #任何的文件恢复工具,在使用前,均要将要恢复的分区卸载或挂载为只读,防止数据被覆盖使用
-
使用extundelete工具恢复文件。
-
extundelete --inode 2 /dev/vdb1 #为查找某i节点中的内容,使用2则说明为整个分区搜索,如果需要进入目录搜索,只须要指定目录I节点即可。这是可以看到删除的文件名和inode
-
/usr/local/bin/extundelete --restore-inode 12 /dev/vdb1 #恢复删除的文件
这个时候会在执行命令的同级目录下出现RECOVERED_FILES目录。
-
-
通过md5sum命令查看恢复后RECOVERED_FILES文件的md5值。
md5sum RECOVERED_FILES
查看删除前的hello和恢复后的RECOVERED_FILES两个文件的md5值是否一致,如果一致,则数据恢复成功。
这一部分是自己测试失败的情况 可以跳过
一定要umount 磁盘 不然会直接提示Space has been reallocated。我这里只有一块系统盘 vda1 所以直接被回收了。
# 执行命令
extundelete /dev/vda1 --inode 2239548
# 恢复文件 最后这个file是根据上面命令获取到的名称 如图
extundelete /dev/vda --restore-file file
# 恢复成功的文件会在当前文件夹的RECOVERED_FILES下 会有历史版本。
# 恢复目录
extundelete /dev/vda --restore-directory testdir
# 恢复全部
extundelete /dev/vda --restore-all
挂一块盘测试
初始化vdb
[aaa@qq.com ~]# fdisk -l
磁盘 /dev/vda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b2d99
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 83875364 41936658+ 83 Linux
磁盘 /dev/vdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[aaa@qq.com ~]# fdisk /dev/vdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xa7a2f339 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa7a2f339
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):L
0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris
1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏的 C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx
5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问
a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC
11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq 诊断 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f2 DOS 次要
16 隐藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自动
1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fe LANstep
1c 隐藏的 W95 FAT3 75 PC/IX be Solaris 启动 ff BBT
1e 隐藏的 W95 FAT1 80 旧 Minix
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[aaa@qq.com ~]# part
parted partprobe partx
[aaa@qq.com ~]# partprobe
[aaa@qq.com ~]# pvcreate /dev/vdb1
Physical volume "/dev/vdb1" successfully created.
[aaa@qq.com ~]# vgcreate vg01 /dev/vdb1
Volume group "vg01" successfully created
[aaa@qq.com ~]# lvcreate -L 19G -n lv01 vg01
Logical volume "lv01" created.
[aaa@qq.com ~]# mkfs.ext4 /dev/vg01/lv01
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1245184 inodes, 4980736 blocks
249036 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
152 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[aaa@qq.com ~]# mount /dev/vg01/lv01 /test/
开始测试
lvm 卷 不能恢复? 直接说格式不对
再买了一块盘测试 这回没有做lvm
[aaa@qq.com ~]# fdisk -l
磁盘 /dev/vda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b2d99
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 83875364 41936658+ 83 Linux
磁盘 /dev/vdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[aaa@qq.com ~]# fdisk /dev/vdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xb27699d1 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xb27699d1
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[aaa@qq.com ~]# mkfs.ext4 /dev/vdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242624 blocks
262131 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[aaa@qq.com ~]# mount /dev/vdb
vdb vdb1
[aaa@qq.com ~]# mount /dev/vdb1 /test/
[aaa@qq.com ~]# cd te
-bash: cd: te: 没有那个文件或目录
[aaa@qq.com ~]# lscd ^C
[aaa@qq.com ~]# cd /test/
[aaa@qq.com test]# ls
lost+found
[aaa@qq.com test]#
尬住 测试了几次 都不行。。我都是删除了就umout了 要么就是inode找不到删除的文件
报错Bad magic number in super-block when trying to open filesystem,经查证extundelete工具不能对xfs文件系统进行数据恢复.已知该工具能够对ext4文件系统进行数据恢复 测试好像也不是所有ext4 都可以
工具2 testdisk
恢复失败 测试的磁盘格式为xfs
yum -y install bzip2
cd /opt
wget https://www.cgsecurity.org/testdisk-7.2-WIP.linux26-x86_64.tar.bz2
bzip2 -d testdisk-7.2-WIP.linux26-x86_64.tar.bz2
tar xvf testdisk-7.2-WIP.linux26-x86_64.tar
cd testdisk-7.2-WIP
mkdir /srv/test
echo a > /srv/test/a.txt
fdisk -l
df -h
# 删除文件之后 下掉对应磁盘
rm -rf /srv/test && umount /srv/
df -h
恢复失败 测试的磁盘格式为ext4
工具3 foremost
yum install https://forensics.cert.org/centos/cert/7/x86_64//foremost-1.5.7-13.1.el7.x86_64.rpm -y
touch 123.zip
# 删除文件测试
rm -rf 123.zip
# 这里recovery文件夹必须为空
foremost –I /dev/vda -o /recovery3/
恢复完成之后 找不到删除的txt 只能恢复固定格式的文件 感觉一般 测试了3次 失败2次。没有生成我删除的文件 这些doc文件也没有验证
avi, bmp, dll, doc, exe, gif, htm, jar, jpg, mbd, mov, mpg, pdf, png, ppt, rar, rif, sdw, sx, sxc, sxi, sxw, vis, wav, wmv, xls, zip
工具4 scalpel
yum -y install scalpel
# 查看支持恢复的文件格式 这个好像也不支持txt格式
cat /etc/scalpel.conf
scalpel -c /etc/scalpel.conf /dev/sda2 -o /pngrecovery/
恢复出来也不是我想要的
下一篇: XImageServer是什么?