是否可以恢复 Linux 中被 rm 删除的文件?

是否可以恢复 Linux 中被 rm 删除的文件?

在 Windows 中,如果您没有按,则可以在垃圾箱中找到已删除的文件转移

rm -fLinux 中删除的文件怎么办

答案1

要记住的第一件事是——停止在文件系统上进行任何进一步的写入活动。

然后,您可以尝试一些查看文件系统并尝试在已删除的节点中找到数据的工具。' extundelete'是 sourceforge 中的一个这样的工具。

删除是一个可以从扩展或者ext4分区。使用 Linux 时,ext3 文件系统是最常见的文件系统,ext4 是其后继者。extundelete 使用存储在分区日志中的信息来尝试恢复已从分区中删除的文件。无法保证任何特定文件都能恢复,因此请始终尝试建立良好的备份系统,或者至少在恢复文件后建立备份系统!

答案2

第一步是尝试使用用于根驱动器的文件系统的取消删除工具。

如上所述,ext3grep 和 extundelete 是 ext 文件系统系列的工具。

另一个选项(取决于要恢复的文件类型)是在驱动器上运行文件雕刻器。这将比上述实用程序花费的时间更长。

最重要的是我为此使用过的一个选项。

最后一个选项是,如果您碰巧知道文件中的某个字符串,则在十六进制编辑器中打开驱动器并搜索该字符串。

根据您的设置,您的窗口管理器可能会提供回收站/垃圾桶。

归根结底,没有什么可以替代良好的备份系统设置。找到一个无需您动手就能完成工作的备份系统并进行设置。从长远来看,您将节省大量时间、麻烦和痛苦。

答案3

我将尝试这个,ext3grep:
http://www.xs4all.nl/~carlo17/howto/undelete_ext3.html
您必须在开始之前卸载该分区。

高血压

答案4

由于 undelete_ext3 似乎不见了,这里有一个简单的 bash 脚本,它帮助我恢复了一些无法使用的文件删除或者调试文件系统. 解决方案共享。

您可以预先设定要查看的块列表,请参阅 PRESEED。每行需要一个块号。如果您不预先设定,则将搜索所有块,这是默认设置。

  • 对于每个块,都会探测第一个字节以查找 gzip 内容。
  • 如果成功,则对有问题的块进行 gunzip 以进一步探测字节 257 处的“ustar”字符串,从而标记出 tar 档案。
  • 最后,提取与文件模式匹配的数据(使用 tar 的通配符选项的后缀路径样式)并查找特定的字符串。查看变量文件输入适合内容为了这。
  • 如果找到,则保存该文件。

由于您可能有不同的用例,这可能会为您提供一个框架来作为您自己的过滤依据。在寻找其他文件类型时,您肯定需要调整值。

示例调用:./ext-undelete-tar-gz.sh devimage found_files/

#!/bin/bash

# Brute force (linear) search specific tar files with
# certain contents on ext2 / ext3 / ext4 devices or files
#
# .. this is a last resort if extundelete and/or debugfs
#    did not find what you were looking for and limited
#    in that recoverable data must not have been stored
#    in fragments, i.e. non-sequentially

[[ -n "$2" ]] || {
    echo "usage: $0 [ device | imagefile ] "\
    "[ destdir_for_recovered_data ] "\
    "[ max_blocks_to_search (optional) ]" 
    exit 1
}

IMG=$1
DEST=$2
TMP=/dev/shm/cand.tmp
PRESEED=/dev/shm/cand.list

GZMAGIC=$(echo -e "\x1f\x8b\x08")
TARMAGIC=$(echo -e "ustar")

# max bytes to read into $TMP when a .tar.gz has been found
LEN=$((160*1024))

# pick $TMP for recovery based on matched strings..
FILE_IN_TAR="debian/rules" # ..in the tar index (suffix-search)
FIT_CONTENT="link-doc="    # ..within FILE_IN_TAR matches

# determine FS parameters
BLOCKS=$(tune2fs -l $IMG | grep -Po "(?<=^Block count:).*" | xargs)
    BS=$(tune2fs -l $IMG | grep -Po "(?<=^Block size:).*"  | xargs)
LEN=$((LEN/BS))

function _dd     { dd     $@ 2>/dev/null ; }
function _gunzip { gunzip $@ 2>/dev/null ; }
function _tar    { tar    $@ 2>/dev/null ; }

function inspect_block {
    bnum=$1

    if _dd if="$IMG" skip=$bnum bs=$BS count=1 | tee "$TMP" \
    | _dd bs=1 count=3 \
    | grep -qF "$GZMAGIC" 
    then
        if _gunzip -c "$TMP" \
        | _dd bs=1 count=5 skip=257 \
    | grep -qF "$TARMAGIC"
        then
            _dd if="$IMG" skip=$((bnum+1)) bs=$BS count=$((LEN-1)) >> "$TMP"
            echo -n found $bnum.tar.gz

            if _tar xzf "$TMP" -O --wildcards *"$FILE_IN_TAR" \
            | grep -qF "$FIT_CONTENT"
            then
                echo " ..picked, stripping trailing garbage:"
                exec 3>&1
                gunzip -c "$TMP" 2>&3 | gzip > $DEST/$bnum.tar.gz
                exec 3>&-
            else
                echo
            fi
        fi
    fi

    echo -ne "$((bnum+1)) / $BLOCKS done.\r" >&2
}


if [[ -f "$PRESEED" ]]
then
    while read bnum
    do inspect_block $bnum
    done <"$PRESEED"
else
    for (( bnum = 0 ; bnum < ${3:-$BLOCKS} ; bnum++ ))
    do inspect_block $bnum
    done
fi | gzip >"$PRESEED.log.gz"

echo
  • 发现错误删除后,请尽快停止使用有问题的文件系统。
  • 该脚本可能会在处理大文件时失败,因为它不会解析文件系统的更高级别的结构。
  • 基本上,现代文件系统并非设计用于强大地恢复未链接的数据,因此无法保证恢复丢失的数据。
  • 对文件系统的备份映像进行操作。

相关内容