如何取消删除(恢复) btrfs 分区上已删除的文件?
我还没有拍过快照,所以我不能使用这个功能。我知道有一些 工具针对其他 Linux 文件系统,但谷歌没有找到任何特定于 btrfs 的内容。我偶然发现有人含糊地提到 btrfs 包含一个取消删除工具,但我找不到它。在尝试其他文件系统的工具之前,我在这里询问。
更多信息:
- (两个)被删除的文件是由于远程
rsync
命令出错而删除的。 - 这些都是小型的纯文本文件。
- 我知道这些文件的名称。
- 我可能能够记住文件中的某些字符串。
- 该磁盘是常规 HDD,但很大(2TB)。
- 我正在运行 Kubuntu 12.04 (beta2),包含所有最新更新。
- 我没有向删除文件的分区中写入任何新数据。
- 我没有这些文件的快照或备份。(上次备份比这些文件早几个小时。)
- 奇怪的是,COW 文件系统的文件恢复选项似乎比 ext3/4 少……
答案1
由于您的文件很小且是纯文本,我会尝试将“字符串”的输出扫描到文件系统所在的设备中,即
strings /dev/sda1 | less
然后使用“/”搜索该文件中可能存在的字符串。找到文本后,用“m”分隔文本的开头,然后移至结尾,并使用“|cat >file”将其保存到文件中。
几年前,当我在另一个没有取消删除的文件系统上遇到类似情况时,我实际上就这样做过,而且效果很好。
答案2
Jörg Walterbtrfs-undelete
使用find-root
和restore
工具实现了一个 shell 脚本btrfs-progs
,可以在这里并应该帮助处于类似境况的其他人。
由于它是在 GPLv2 下授权的,所以我不能将它包含在这里。
答案3
如果您的 btrfs 驱动器有子卷,则需要将附加-r <subvol-id>
选项传递给btrfs restore
。不幸的是,那里的脚本,例如 user414471 发布的脚本(http://oelkers.de/tips/undeleteBtrfs.sh),没有这样做的选项,但他们可能可以适应这一点。
如果您想手动执行此操作,则需要获取正确的 subvol-id,方法是:
# mount /dev/sdXY /mnt/blah
# btrfs subvolume list /mnt/blah
# umount /mnt/blah
或者使用以下方式:
# btrfs restore -l /dev/sdXY | grep ROOT_ITEM
之后,您可以使用btrfs-find-root
获取要恢复到的块号(通常是最大块号(即当前根)之前的块号)。为此,您需要首先将默认子卷设置为要从中恢复文件的子卷(然后恢复此更改):
# mount /dev/sdXY /mnt/blah
# btrfs subvolume set-default <subvol-id> /mnt/blah
# umount /mnt/blah
# btrfs-find-root /dev/sdXY
Well block 4321280 seems great, but generation doesn't match, have=400760, want=400984 level 0
...
Well block 9928704 seems great, but generation doesn't match, have=400764, want=400984 level 1
Well block 1094836224 seems great, but generation doesn't match, have=400983, want=400984 level 1
Found tree root at 1095270400 gen 400984 level 1
您最终可以使用btrfs restore
with-r <subvol-id>
进行恢复(--dry-run
如果愿意,最初可以使用参数):
# btrfs restore -r <subvol-id> -t 9928704 -v --path-regex '^/(|dir1(|/dir2(|/dir3(|/.*))))$' /dev/sdXY /tmp/recovery
更多详细信息请参见此处: https://btrfs.wiki.kernel.org/index.php/Restore
答案4
我在使用 btrfs 文件系统的 NAS 上丢失了一堆视频文件。由于我不熟悉 Linux,我试图找到一些从用户角度来看技术性较低的工具。我尝试了 photorec,但它只恢复了照片(我甚至没有意识到这些照片已被删除),但没有找到我的视频 .mkv 文件。
我最终使用了一种名为ReclaiMe文件恢复 (https://www.reclaime.com/download.aspx/)(简称 ReclaiMe)。我从 Windows 10 电脑运行该程序,将 NAS btrfs 驱动器连接到备用 SATA 连接器。ReclaiMe 找到了我的 NAS 驱动器和我删除的所有文件,包括视频文件和照片。它整齐地显示了文件在其原始子目录中,我能够选择要恢复的单个文件。恢复的文件必须存储在 NAS 驱动器以外的其他地方,所以我只使用了便携式 USB 3.0 硬盘。然后,我将 NAS 驱动器重新安装到我的 NAS 中,并使用 NAS 软件界面将文件从 USB 驱动器上传到 NAS 驱动器。
虽然 ReclaiMe 不是免费程序,但它使用起来很简单,让我能够恢复所有已删除的文件。我本来需要大约 60 - 80 小时才能从 DVD 重新创建视频文件,所以我认为该软件的价格对我来说是合理的。我恢复的照片无法复制,这也使该软件的价格更加合理。我会向任何需要恢复已删除文件的人推荐 ReclaiMe 软件,因为它对我来说效果很好。我还要补充一点,您可以下载该软件并在购买前试用。您无法使用免费软件恢复文件,但您可以在购买前查看它是否能找到您的文件。如果它找不到您要查找的文件,可能为时已晚。