1. 当发现误删了文件之后,立即把文件系统卸载掉,或者remount成ro状态,就是不要再写了,让数据不要被其他数据覆盖。因为大部分文件系统在删除文件的时候只是把这个文件标记成删除,把文件所使用的数据块标记成可用,但是上边的数据还没有被清除,数据还是在的。那么这个时候不再写硬盘也就保证了数据块不会被其他数据覆盖掉,也就还有希望找回来
2. 这一步是可选的。最好把要恢复的分区做一个镜像,dd if=/dev/sda5 of=/path/to/image/file bs=4k,这样在恢复的时候在镜像上尽兴,就算恢复出错数据被毁掉了,那也是镜像。
3. 根据不同的文件系统,选用不同的工具来找回删除的文件。ext3推荐用ext3grep,ext4用ext4magic,其实ext4magic是基于ext3grep的,而且ext4magic也能处理ext2/3文件系统;xfs用xfs_irecover,xfs_irecover的manpage在这里。
4. 至于能够恢复多少数据出来,那就看人品了
这里用ext4做个例子
# create ext4 fs and copy some files there fallocate -l 16m ext4.img
losetup -f --show ext4.img
mkfs -t ext4 /dev/loop0
mount /dev/loop0 /mnt/ext4
cp /mnt/ext4/ sync
# delete some files rm /mnt/ext4/*
# umount the ext4 fs, this is important! umount /dev/loop0
# make a copy of the fs dd if=/dev/loop0 of=ext4-copy.img bs=4k
# run ext4magic on the image ext4magic -m -d outputdir ext4-copy.img
# some sample output from the command eguan@localhost:~/workspace/src/kernel$
sudo /home/eguan/bin/ext4
magic -m ext4.img -d testdir
Warning: Activate magic-scan or disaster-recovery function, may be some command line options ignored "testdir" accept for recoverdir Filesystem in use: ext4.img Using internal Journal at Inode 8 Activ Time after : Sun Jun 7 22:43:54 2015 Activ Time before : Sun Jun 7 23:02:18 2015 Inode 2 is allocated Unknown code ext2 45
#0 for block bitmap for ext4.img Warning: error-NR 2133571363
can not found file: / MAGIC-1 : start lost directory search MAGIC-2 : start lost file search
-------- testdir/MAGIC-2/image/jpeg/I_0000000012.jpg
-------- testdir/MAGIC-2/image/jpeg/I_0000000013.jpg
-------- testdir/MAGIC-2/image/jpeg/I_0000000014.jpg
MAGIC-2 : start lost in journal search MAGIC-3 :
start ext4-magic-scan search ext4magic : EXIT_SUCCESS
评论