2/17/2008

拯救被删的文件

Linux 下误删文件后,怎么恢复呢?可以参考以下步骤:
  1. 第一时间将要拯救的 ext2 分区 (比如我的是挂到 /mnt/entertain 的 /dev/hda9) 挂载为只读模式:

    # umount /mnt/entertain
    # mount /dev/hda9 /mnt/entertain -o ro

  2. 运行 debugfs 里的 lsdel 获取最近被删的文件列表 (lsdel 命令运行会需要一点时间, 请耐心等等):

    # debugfs /dev/hda9
    debugfs 1.35 (28-Feb-2004)
    debugfs: lsdel

  3. 根据 lsdel 给出的列表中的时间, 想想自己是在什么时候删的, 这样可以找到相应的被删文件的 inode, 例如我是在昨晚 (01 月 22 日) 8 点多删的那个电影, 于是在 lsdel 列表里找到对应的这几个记录:

    311298 1000 100644 1136 1/ 1 Sat Jan 22 20:24:50 2005
    311299 1000 100644 62 1/ 1 Sat Jan 22 20:24:51 2005
    311300 1000 100644 730628096 178552/178552 Sat Jan 22 20:24:51 2005
    311297 1000 40755 0 1/ 1 Sat Jan 22 20:24:52 2005

  4. 使用 dump 命令恢复数据到另一分区. 很明显, 这几项记录就是被我删掉的那个电影 (包括它的文件夹, 它的两个文本信息文件, 它自己 (第三行, 大小为 730628096 那个)). 我只需要电影本身, 于是查到它的 inode 值 (第一列) 为 311300, 接着在 debugfs 的提示符里使用 dump 命令将它拯救到另一个分区里 (比如我的 /mnt/share/dump)

    # debugfs /dev/hda9
    debugfs 1.35 (28-Feb-2004)
    debugfs: lsdel
    debugfs: dump <311300> /mnt/share/dump/movie.avi

    留心括起 inode 值 311300 的那俩尖括号 <>, 这是必须的, 否则 debugfs 会告诉你找不到文件.
  5. 重复 dump /path/to/file 命令一个个恢复你还想拯救的文件

没有评论: