周五篮球群里有人问误删文件了怎么恢复,得知是ext4文件系统之后我推荐了ext4magic这个工具,然后又有人提到了xfs的话怎么办,正好前几天看到Dave Chinner在邮件列表里提到了这个问题,他推荐的工具是xfs_irecover。这里就稍微总结一下Linux下误删文件如何恢复。

1. 当发现误删了文件之后,立即把文件系统卸载掉,或者remount成ro状态,就是不要再写了,让数据不要被其他数据覆盖。因为大部分文件系统在删除文件的时候只是把这个文件标记成删除,把文件所使用的数据块标记成可用,但是上边的数据还没有被清除,数据还是在的。那么这个时候不再写硬盘也就保证了数据块不会被其他数据覆盖掉,也就还有希望找回来。

2. 这一步是可选的。最好把要恢复的分区做一个镜像,dd if=/dev/sda5 of=/path/to/image/file bs=4k,这样在恢复的时候在镜像上尽兴,就算恢复出错数据被毁掉了,那也是镜像。

3. 根据不同的文件系统,选用不同的工具来找回删除的文件。ext3推荐用ext3grep,ext4用ext4magic,其实ext4magic是基于ext3grep的,而且ext4magic也能处理ext2/3文件系统;xfs用xfs_irecover,xfs_irecover的manpage在这里。

4. 至于能够恢复多少数据出来,那就看人品了

这里用ext4做个例子

# create ext4 fs and copy some files there

fallocate -l 16m ext4.img

losetup -f --show ext4.img

mkfs -t ext4 /dev/loop0

mount /dev/loop0 /mnt/ext4

cp  /mnt/ext4/

sync

# delete some files

rm /mnt/ext4/*

# umount the ext4 fs, this is important!

umount /dev/loop0

# make a copy of the fs

dd if=/dev/loop0 of=ext4-copy.img bs=4k

# run ext4magic on the image

ext4magic -m -d outputdir ext4-copy.img

# some sample output from the command

eguan@localhost:~/workspace/src/kernel$ sudo /home/eguan/bin/ext4magic -m ext4.img -d testdir

Warning: Activate magic-scan or disaster-recovery function, may be some command line options ignored

"testdir"  accept for recoverdir

Filesystem in use: ext4.img

Using  internal Journal at Inode 8

Activ Time after  : Sun Jun  7 22:43:54 2015

Activ Time before : Sun Jun  7 23:02:18 2015

Inode 2 is allocated

Unknown code ext2 45 #0 for block bitmap for ext4.img

Warning: error-NR 2133571363 can not found file: /

MAGIC-1 : start lost directory search

MAGIC-2 : start lost file search

--------        testdir/MAGIC-2/image/jpeg/I_0000000012.jpg

--------        testdir/MAGIC-2/image/jpeg/I_0000000013.jpg

--------        testdir/MAGIC-2/image/jpeg/I_0000000014.jpg

MAGIC-2 : start lost in journal search

MAGIC-3 : start ext4-magic-scan search

ext4magic : EXIT_SUCCESS

更多使用方法看ext4magic的manpage吧,就在源码包里。

阅读原文

Linux下恢复误删文件:思路+实践的更多相关文章

  1. linux下恢复误删除的文件方法(ext2及ext3)

     linux下恢复误删除的文件方法(ext2及ext3) 2009-12-19 15:23:47 分类: LINUX 如果是ext2文件系统的,直接用debugfs是可以恢复出来的,但对于ext3,d ...

  2. Linux下删除的文件如何恢复

    Linux下删除的文件如何恢复 参考自: [1]linux下误操作删除文件如何恢复 [2]Linux实现删除撤回的方法 以/home/test.txt为例 1.df -T 文件夹 找到当前文件所在磁盘 ...

  3. Linux下重命名文件或文件夹(mv命令与rename命令)

    在Linux下重命名文件或目录,可以使用mv命令或rename命令 mv ———————————— mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a ...

  4. Linux下几种文件传输命令

    Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具 ...

  5. 【转载】恢复误删文件--DOS命令应用实例(一)

    <电脑爱好者>报转载第一辑第二篇之恢复误删文件--DOS命令应用实例(一)                             恢复误删文件--DOS命令应用实例(一) 上期我们讲述了 ...

  6. 用脚本如何实现将Linux下的txt文件批量转化为Windows下的txt文件?

    众所周知,Windows和Linux的文件换行回车格式不同,Windows下换行格式是\r\n(回车+换行),Linux下换行格式为\n(只是换行),因此,其中一个操作系统的文本文件若需要在另外一个中 ...

  7. 【Linux学习】Linux下用户组、文件权限详解

    原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...

  8. Linux下几种文件传输命令 sz rz sftp scp

    Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具 ...

  9. Linux下执行.sh文件

    Linux下执行.sh文件有两种情况: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必须有x权限] 二.直接sh 加上文件名.sh,如运行hello.s ...

随机推荐

  1. Linux进程间通信—信号

    三.信号(Signal) 信号是Unix系统中使用的最古老的进程间通信的方法之一.操作系统通过信号来通知某一进程发生了某一种预定好的事件:接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认 ...

  2. 使用SQL SERVER FOR XML PATH将多个结果集转换成一行并进行去重处理

    在一个医药行业的系统中需要根据患者的接触记录ID获取不同接触类型的集合,效果像这样     --患者接触记录信息,一个患者可以有N个不同的接触记录,每个接触记录又有N个接触类型记录 IF OBJECT ...

  3. 转:美团Android资源混淆保护实践

    转自:http://tech.meituan.com/mt-android-resource-obfuscation.html 前言 Android应用中的APK安全性一直遭人诟病,市面上充斥着各种被 ...

  4. Cognos TM1_10.1.1服务端配置

    场景:本文继Cognos TM1_10.1.1服务端安装 之后,简单的说一下本人对简单配置的拙见,确保服务端在安装过程一切正常,成功安装. 1:进入TM的Cognos Configuration 2: ...

  5. Word TOC域的使用说明

    TOC域的使用说明: 域代码:TOC(目录)域 { TOC [Switches ] } 建立一个目录.TOC 域根据标题级别.指定样式或由 TC(目录项)域指定的项目来收集目录项.在使用“插入”菜单中 ...

  6. UIWebView页面的控制(二)

    1.UIWebView的内容控制的属性/方法列表 loading属性               确认当前页面是否在读入中 canGoForward属性   确认goForward  方法是否可运行, ...

  7. iOS 真机调试多台mac电脑共用一个证书

    大致流程:在你的开发电脑上导出一个 p12文件,以及在 apple开发者中心下载一个profile文件,把这两个文件导出给你的mac开发友就行了 打开 mac  钥匙工具-----找到你的证书---- ...

  8. JDK中注解的底层实现

    前提 用Java快三年了,注解算是一个常用的类型,特别是在一些框架里面会大量使用注解做组件标识.配置或者策略.但是一直没有深入去探究JDK中的注解到底是什么,底层是怎么实现了?于是参考了一些资料,做了 ...

  9. Android日常开发总结

    全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效. 数据库表段字段常量和SQL逻辑分离,更清晰,建议使用 ...

  10. react 中使用 lodash 中的 _.throttle

    1.场景: 首次调用执行一次,一定时间内再次调用,不再执行. 2.实现 debounce (函数去抖) 多次触发,只在最后一次触发时,执行目标函数. _.debounce(func, [wait=0] ...