EXT 类型文件恢复

删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录里面的 block 中,删除这个文件的名字。Linux 是通过 Link 的数量来控制文件删除的,只有当一个文件不存在任何 Link 的时候,这个文件才会被删除。

在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过“回收站”找回的情况,比如使用“rm -rf”来删除数据。针对 Linux 下的 EXT 文件系统,可用的恢复工具有 debugfs、ext3grep、extundelete 等。 其中 extundelete 是一个开源的 Linux数据恢复工具,支持 3、ext4 文件系统。

在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的 inode 节点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,这些数据就真的丢失了,恢复工具也回天无力。所以以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数据成功的比例。

下面将介绍使用 extundelete 工具如何恢复误删除的文件。

1.编译安装 extundelete

在编译安装 extundelete 之前需要先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel,这两个包在系统安装光盘的/Package 目录下就有,使用 rpm 或 yum 命令将其安装。e2fsprogs-devel 安装依赖于 libcom_err-devel 包。安装完依赖包之后,即可将提前上传的 extundelete 软件包解压、配置、编译、安装。

[root@localhost ~]# yum -y install e2fsprogs-devel e2fsprogs-libs[root@localhost ~]# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2[root@localhost ~]# tar -xf extundelete-0.2.4.tar.bz2[root@localhost ~]# cd extundelete-0.2.4[root@localhost extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete&& make && make installConfiguring extundelete 0.2.4Writing generated files to disk make -s all-recursiveMaking all in src extundelete.cc: In function ‘ext2_ino_t find_inode(ext2_filsys, ext2_filsys, ext2_inode*, std::string, int)’: extundelete.cc:1272:29: warning: narrowing conversion of ‘search_flags’ from ‘int’ to ‘ext2_ino_t {aka unsigned int}’ inside { } [-Wnarrowing]buf, match_name2, priv, 0};^Making install in src /usr/bin/install -c extundelete '/usr/local/extundelete/bin'[root@localhost extundelete-0.2.4]# ln -s /usr/local/extundelete/bin/* /usr/bin/

2.模拟删除并执行恢复操作

1)使用 fdisk 命令创建新分区,将其挂载到/tmp 目录下,往该目录下新建一些文件或目录

[root@localhost ~]# fdisk -l...... //省略部分内容Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytes...... //省略部分内容[root@localhost ~]# fdisk /dev/sdb...... //省略部分内容Command (m for help): nPartition type:p primary (0 primary, 0 extended, 4 free)e extendedSelect (default p): pPartition number (1-4, default 1):First sector (2048-41943039, default 2048):Using default value 2048Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):Using default value 41943039Partition 1 of type Linux and of size 20 GiB is setCommand (m for help): pDisk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk label type: dosDisk identifier: 0x30e29e0fDevice Boot Start End Blocks Id System/dev/sdb1 2048 41943039 20970496 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.[root@localhost ~]# partprobe /dev/sdb[root@localhost ~]# mkfs.ext3 /dev/sdb1mke2fs 1.42.9 (28-Dec-2013)Filesystem label=OS type: LinuxBlock size=4096 (log=2)...... //省略部分内容Allocating group tables: doneWriting inode tables: doneCreating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: done[root@localhost ~]# mkdir /test/[root@localhost ~]# mount /dev/sdb1 /test/[root@localhost ~]# cd /test/[root@localhost test]# echo a>a[root@localhost test]# echo a>b[root@localhost test]# echo a>c[root@localhost test]# echo a>d[root@localhost test]# ls a b c d lost+found

执行完命令‘extundelete /dev/sdb1”后输入”y“即可查看该文件系统的使用情况。也可以使用“extundelete /dev/sdb1 --inode 2”查看文件系统/dev/sdb1 下存在哪些文件,具体的使用情况。其中--inode 2 代表从 i 节点为 2 的文件开始查看,一般文件系统格式化挂载之后,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。

2)模拟误操作并恢复

使用"rm -rf a b"命令删除/tmp/下的 a 文件和 b 文件,当出现误操作时,立刻卸载该文件系统,然后使用“extundelete /dev/sdb1 --restore-all"恢复/dev/sdb1 文件系统下的所有内容。

[root@localhost test]# rm -rf a b[root@localhost test]# ls c d lost+found[root@localhost test]# cd[root@localhost ~]# umount /test/[root@localhost ~]# extundelete /dev/sdb1 --restore-allNOTICE: Extended attributes are not restored.Loading filesystem metadata ... 160 groups loaded.Loading journal descriptors ... 26 descriptors loaded.Searching for recoverable inodes in directory / ...2 recoverable inodes found.Looking through the directory structure for deleted files ...0 recoverable inodes still lost.执行完恢复的命令后,在当前目录下会出现一个/RECOVERED_FILES/目录,里面保存了已经恢复的文件。[root@localhost ~]# ls anaconda-ks.cfg extundelete-0.2.4 extundelete-0.2.4.tar.bz2 RECOVERED_FILES[root@localhost ~]# cd RECOVERED_FILES/[root@localhost RECOVERED_FILES]# ls a b

当然 extundelete 的用法还有很多,可以通过 help 查看详细用法。

EXT 类型文件恢复相关推荐

  1. 模拟inode号耗尽、EXT和XFS类型文件恢复(详细图解)

    图文详解--inode与block,模拟inode号耗尽.EXT和XFS类型文件恢复 一.inode与block 1.概论 扇区(sector) 块(block) 索引节点(inode) 系统访问文件 ...

  2. 【AWSL】之Linux文件系统与日志分析(inode、恢复EXT类型的文件、恢复XFS类型的文件)

    序言 这里我主要介绍Linux文件系统与日志分析 文件系统与日志分析 序言 一.inode与block 1. 概述 ①inode的内容 ②inode号码 ③文件存储 ④inode的大小 ⑤inode的 ...

  3. zip文件类型如何恢复系统默认值--右键->打开方式中 无 “资源管理器”选项

    .zip文件类型如何恢复系统默认值–右键->打开方式中无"资源管理器"选项 问题描述:下载流氓软件后,不知道删除什么文件,导致zip文件不能用win10自带的解压缩(资源管理 ...

  4. linux存储pdf伟岸_Linux 文件恢复的原理

    inode 和 block 首先简单介绍一下 Linux 文件系统的最基本单元:inode.inode 译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份 ...

  5. Linux文件恢复的原理

    转载: https://www.ibm.com/developerworks/cn/linux/1312_caoyq_linuxrestore/index.html 文件恢复的原理 本文要介绍的命令是 ...

  6. 本地服务器文件恢复,本地服务器文件恢复

    本地服务器文件恢复 内容精选 换一换 本节操作介绍如何在Windows操作系统的本地主机上使用FTP上传文件到云服务器.已在待上传文件的云服务器中搭建 FTP 服务.如果您的云服务器为 Windows ...

  7. Ext分区文件恢复工具extundelete

     Ext分区文件恢复工具extundelete Ext是延伸文件系统(Extended system)的缩写.它是为Linux内核开发的第一个文件系统.它有多个版本.现在常见的是Ext3和Ext4.由 ...

  8. 技术揭秘之详解回收站删除文件恢复

    |=------------------------------------------------------------------------=| |=--------------=[技术揭秘之 ...

  9. U盘文件恢复,3个方法恢复教程

    U盘作为存储器还是非常方便的,不管是上学还是上班,都或多或少使用过它.但是有时U盘数据会出现无缘无故丢失的情况或者里面的文件被删除了.那U盘文件恢复难吗?不难的.为了帮助用户解决这个问题,下面给大家解 ...

  10. NTFS(文件恢复)最简单情况

    NTFS文件恢复(最简单情况) 原理:这里我们不深究NTFS 系统的细节,只根据需要了解相关知识. 工具:WinHex,DiskExplorer 问题一:NTFS 是什么? 是Microsoft公司开 ...

最新文章

  1. 使用Java合并图片、修改DPI
  2. html手机怎么样删除掉,怎么样才能删除这个叫做(手机模拟器大师)的软件?...
  3. lnmp 切换mysql 版本_LNMP1.5:php多版本切换
  4. linux电视改安卓,mstar安卓智能电视方案源代码常用修改
  5. 树莓派通过VNC连接时分辨率太低
  6. js接收springmvc传过来的数据_Java修行第072天 ---SpringMVC(中)
  7. node如何让一个端口同时支持https与http
  8. Python 集合 day3
  9. 进入docker容器中查看文件夹_理解 docker 容器中的 uid 和 gid
  10. linux加密狗复制克隆教程,Guardant Code/Guardant加密狗解密 复制 克隆 模拟
  11. ffmpeg java 实时视频流转码
  12. 学计算机平面设计需不需要写生,计算机平面设计毕业论文
  13. 拼接、比较与计算——哥德尔读后之十四
  14. 计算机病毒狭义和广义的区别,狭义相对论和广义相对论的区别是什么?
  15. MYSQL的修改表结构SQL语句
  16. 基于ASP.NET大学生校园招聘网站的设计与开发
  17. 晶体管数字计算机原理,计算机发展-微计算机原理-电子发烧友网站
  18. TeamFlowy——结合Teambition与Workflowy提高生产力
  19. SpringAop动态代理的两种实现方式
  20. ThinkServer RD640 装系统

热门文章

  1. 使用element-ui预览图片(el-image-viewer)
  2. AR育儿机器人,会是智能母婴市场的…
  3. sqoop-1.4.同步数据到hdfs
  4. LeetCode10-正则表达式匹配
  5. 数据恢复和计算机取证试题,对数据恢复与计算机取证的分析.doc
  6. 直播带货系统源码,实现MYSQL数据库的主从同步
  7. 共拓育水之道,许以更好的未来科勒KOHLER携手2023成都马拉松
  8. 清理计算机2——注册表
  9. Git pushing to remote branch
  10. 【语音识别】基于MPCC+IPL特征结合SVM实现中英语种识别含Matlab源码