是否有命令来恢复/取消删除已删除的文件rm
?
$ rm -rf /path/to/myfile
我该如何恢复myfile
?如果有这样的工具,我该如何使用?
是否有命令来恢复/取消删除已删除的文件rm
?
$ rm -rf /path/to/myfile
我该如何恢复myfile
?如果有这样的工具,我该如何使用?
Answers:
评论中某人提供的链接可能是您最好的机会。
尽管看起来有些吓人,但实际上还是很容易理解的。通常,步骤如下:
使用debugfs查看文件系统日志
$ debugfs -w /dev/mapper/wks01-root
在debugfs提示符下
debugfs: lsdel
样品输出
Inode Owner Mode Size Blocks Time deleted
23601299 0 120777 3 1/ 1 Tue Mar 13 16:17:30 2012
7536655 0 120777 3 1/ 1 Tue May 1 06:21:22 2012
2 deleted inodes found.
在debugfs中运行命令
debugfs: logdump -i <7536655>
确定文件索引节点
...
...
....
output truncated
Fast_link_dest: bin
Blocks: (0+1): 7235938
FS block 7536642 logged at sequence 38402086, journal block 26711
(inode block for inode 7536655):
Inode: 7536655 Type: symlink Mode: 0777 Flags: 0x0 Generation: 3532221116
User: 0 Group: 0 Size: 3
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 0
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4f9fc732 -- Tue May 1 06:21:22 2012
atime: 0x4f9fc730 -- Tue May 1 06:21:20 2012
mtime: 0x4f9fc72f -- Tue May 1 06:21:19 2012
dtime: 0x4f9fc732 -- Tue May 1 06:21:22 2012
Fast_link_dest: bin
Blocks: (0+1): 7235938
No magic number at block 28053: end of journal.
使用上面的inode信息,运行以下命令
# dd if=/dev/mapper/wks01-root of=recovered.file.001 bs=4096 count=1 skip=7235938
# file recovered.file.001
file: ASCII text, with very long lines
文件已恢复到recovered.file.001
。
如果上述方法不适合您,我过去曾使用过诸如photorec
恢复文件之类的工具,但是它仅适用于图像文件。我已经在我的博客中以以下标题广泛地介绍了这种方法:
debugfs -w /dev/sdb2
但lsdel
0 deleted inodes found.
extundelete
ext3 / 4更容易,并且可能会得到相同的结果。
/dev/mapper/wks01-root: No such file or directory while opening filesystem
你是/dev/mapper/wks01-root
从哪里得到的?
有时,我可以使用此脚本或答案中的下一个解决方案来恢复已删除的文件:
#!/bin/bash
if [[ ! $1 ]]; then
echo -e "Usage:\n\n\t$0 'file name'"
exit 1
fi
f=$(ls 2>/dev/null -l /proc/*/fd/* | fgrep "$1 (deleted" | awk '{print $9}')
if [[ $f ]]; then
echo "fd $f found..."
cp -v "$f" "$1"
else
echo >&2 "No fd found..."
exit 2
fi
还有一个有用的技巧:如果您知道已删除文件中的模式,请输入alt+ sys+ resuo以只读方式重新引导+重新安装,然后使用live-cd grep
来搜索硬盘:
grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover
然后进行编辑/tmp/recover
以仅保留以前的文件。
嘿,如果使用Unix原理全部是文件,是时候利用它了,不是吗?
grep
即使文件系统仍然挂载,您基于解决方案的解决方案也非常聪明并为我工作。谢谢!
grep -av "[^[:print:]]"
grep
解决方案为我用修改:我做了sudo grep --line-buffered -ab "$PATTERN" /dev/sda1 | tee lines
,得到了字节偏移(像123123123:line\n456456456:another\n...
),然后做n=1000; sudo dd of=before if=/dev/sda1 ibs=1 skip=$[123123123-$n] count=$n
,并n=1000; sudo dd of=after if=/dev/sda1 ibs=1 skip=123123123 count=$n
用不同的n
值。
grep -a -C 200 -F 'Unique string in text file' /dev/sdXN
/dev/sdXN
包含丢失文件的分区在哪里(mount
如果不确定,请选中)。
需要一些时间,但是当我不小心删除了一些尚未提交的源代码时可以正常工作!
rm data/*.json python myFile.py
而不是rm data/*.json && python myFile.py
/dev/sdXN
是用于文件系统的,对吗?我与df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
grep: conflicting matchers specified
一种替代方法可能是使用del
而不是rm
用于删除:
http://fex.belwue.de/fstools/del.html
del
具有取消删除功能,并且可以与任何文件系统一起使用。
当然,如果您已经使用“不带任何囚犯” rm删除了文件,这不是解决方案:-}
del
命令。
通过外部接口连接驱动器
umount /dev/{sd*}
extundelete --restore-all /dev/{sd*}
有关更多信息,请参见此链接:使用extundelete取消删除ext4上刚刚删除的文件。
恢复工具-命令行:
恢复工具-Gui:
信息:
以我的个人经验,我使用ufs-explorer和photorec取回数据
(1)=不开源,不免费
(2)=非开源免费
(3)=开源免费
(4)=有ntfs支持
(5)=具有目录结构功能
我不同意这是不可能的,只是非常非常困难,我也从未在Linux上做到过:
删除文件后,它们实际上并没有被删除。发生的情况是它们在硬盘驱动器上的空间已被重置,因此,如果计算机尝试在其中写入数据,则不会有任何抱怨。通常,您认为已删除的硬盘驱动器上的数据可能会在一年后出现。至少,这是我在Windows计算机上的经验。我不确定它是否可以从Linux上的命令行以相同的方式工作,但我不确定,但是您可能需要单独的Live CD来打开该分区,而且也无法保证文件仍然存在。我已经使用零假设恢复在Windows XP上执行了几次。如果您足够努力的话,我相信周围也有类似的工具。