IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

这样恢复 Linux 分区下误删的文件

风云阁 2011-09-25 14:02:58 累计浏览 5,151 次
本机暂存

以前总是在网上看到很多人问怎么恢复 Linux 分区下误删的文件。当时并没有仔细关注过,真没想到昨天这事摊我身上了。

大致说说这场悲剧的整个过程吧(为了避免一些不必要的麻烦,本文中的文件夹名和设备名都作了修改)

当时我的工作目录是 /source/needrecovered 。

$ pwd
/source/needrecovered

原本打算清空其中的一个子文件

$ rm -rf canbedeleted/*

却把命令给打错了。

$ rm -rf canbedeleted/ *

当时我琢磨着今天怎么删个小文件夹这么慢呢。等我仔细看了下命令,反应过来的时候,已经太迟了。整个工作目录被清空了 原图已失效

没辙了,只能先到网上找找解决方案了,网上大致提到的方法有两种:一种是利用 debugfs ;第二种是利用 ext3grep 。第一种方法,我尝试了若干次都以失败告终,第二种成功了。但是统一的是:两种方法首先提到的都是将对该分区进行操作的应用先全部关闭,具体如下:
以下的操作尽量使用 root 操作,以提高数据恢复的成功率

#该命令用于列出操作该分区的进程
fuser -v -m /source
#如果没有很重要的进程,利用下面的命令将其全部 kill 掉
fuser -k -v -m /source

执行上面那个命令的时候,务必要将你的工作目录切换到 /source 以外,否则你的 sshd 会被 kill 掉

这样子可以达到两个好处:

  1. 防止新的文件操作影响数据的恢复
  2. 方便对磁盘或者分区进行进一步的操作
    如: mount 和 umount

接下来我们看看磁盘分区情况

$ df -Th
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda8     ext3    7.9G  6.3G  1.2G  84% /source
/dev/sdb1  fuseblk    299G  266G   33G  90% /data/

需要恢复的分区是 /dev/sda8 ,挂载点是 /source 。

先将此分区卸载,并在 /data 分区建立一个用于存储备份数据的文件夹

umount -v /source
mkdir -p /data/recovery

现在轮到主角登场了,先去下载一份 ext3grep 的源码,并安装

cd /data/recovery
#此链接地址以官网最新版本为准
wget http://ext3grep.googlecode.com/files/ext3grep-0.10.2.tar.gz
tar xfz ext3grep-0.10.2.tar.gz
cd ext3grep-0.10.2
./configure --prefix=/data/recovery
make
make install

接下来就进入正式的恢复工作了,先对需要恢复的磁盘进行扫描。

cd /data/recovery
nohup /data/recovery/bin/ext3grep /dev/sda8 --ls --inode 2 &
#建议使用 nohup 和 &,因为如果分区很大的话耗时比较长

扫描完毕后, /data/recovery 中会出现两个分别名为 c0d2.ext3grep.stage1 和 c0d2.ext3grep.stage2 的文件。前者可以直接忽略,后者里面保存着可以被恢复备份的文件名。

由于我需要备份的文件很多,几十G,就用下面这个命令进行全部恢复

cd /data/recovery
nohup /data/recovery/ext3grep/bin/ext3grep /dev/sda8 --restore-all &
#建议使用 nohup 和 &,因为如果分区很大的话耗时比较长

需要注意的是,restore-all 参数会将整个磁盘所有文件(已删除可恢复的文件和未被删除还存在的文件)进行恢复和备份处理,所以请确认你的存放恢复文件的分区有足够的空间

如果仅仅是恢复几个文件的话,建议使用 restore-file 参数
备份的文件会存放在工作目录的名为 RESTORED_FILES 的文件夹里,本文中就是 cd /data/recovery/RESTORED_FILES

最后补充一句话:慎用 rm -rf 。

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. Linux如何统计进程的CPU利用率 (累计阅读 16,308)
  2. 我的 RHCA 之路 (累计阅读 14,014)
  3. Linux内存点滴 用户进程内存空间 (累计阅读 13,232)
  4. 给程序员新手的一些建议 (累计阅读 13,090)
  5. Linux 性能监控、测试、优化工具 (累计阅读 13,013)
  6. 关于linux内存free的一些事情 (累计阅读 12,870)
  7. ps - 按进程消耗内存多少排序 (累计阅读 12,691)
  8. Google怎么用linux (累计阅读 12,583)
  9. Linux Used内存到底哪里去了? (累计阅读 11,868)
  10. find命令的一点注意事项 (累计阅读 11,867)