一.关于ext4文件系统

​ EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,是ext3文件系统的

后继版本。Ext4是由Ext3的维护者Theodore Tso领导的开发团队实现的。相比于ext3文件系统,ext4文件系统支持更大的文件系统和更

大的文件,更多的子目录数量,更多的块和i-节点数量等等。

​ 对于ext4文件系统上误删除文件,可以使用extundelete恢复,对于ext3文件系统,则使用ext3grep恢复误删除的文件。在windows上

恢复误删除的文件可以使用final data v2.0 汉化版和easyrecovery。

二.linux文件系统的组成(inode,block)

​ Linux文件系统由三部分组成:文件名,inode,block。inode存放文件元数据信息,block是真正存放数据的地方。windows也由这三部分组成。

​ 每个文件都有一个inode号,可以使用ls -i和stat查看。

[root@node5 ~]# ls -i test.txt
34566868 test.txt
[root@node5 ~]# stat test.txt
File: ‘test.txt’
Size: 12 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 34566868 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-10 17:30:12.532654117 +0800
Modify: 2020-10-10 17:30:12.532654117 +0800
Change: 2020-10-10 17:30:12.533654118 +0800
Birth: -

三.问题:为什么删除比复制快?

​ 因为这只是逻辑删除。删除的时候并不是将整个数据都真正删除了,它只是将文件列表设置为可以写入状态,在有新数据要写入时,直

接覆盖原来的数据。可以使用如下图表示:

四.问题:当我们误删除文件后,第一件事要做什么?

​ 由于在linux中,删除只是逻辑删除,此时我们要避免误删除的文件内容被新写入的文件覆盖。可以卸载需要恢复文件的分区或者以只

读的方式挂载。

​ 如果在根下删除文件,想恢复数据,应该怎么办?

​ 方法1: 立即断电,然后把磁盘以只读方式,挂载到另一个电脑中进行恢复。

​ 方法2:把extundelete在虚拟机上(虚拟机系统要和服务器版本一样),提前安装好后再复制到U盘中,把U盘插入服务器,恢复

时,恢复的文件要保存到U盘中,(不要让恢复的数据写到/下,那样会覆盖之前删除的文件)。

五.准备测试环境

1.首先去https://sourceforge.net/projects/extundelete/这个网站下载extundelete-0.2.4.tar.bz2软件。值得一提的是http://sourceforge.net/ 是开源软件发布中心,好多软件可以去这里下载。

2.可以添加一块硬盘,或者在现有硬盘的基础上进行分区。磁盘分区大致步骤是fdisk进行分区,创建挂载点,格式化成ext4文件系统,最

后挂载。具体磁盘分区可以查看磁盘分区工具章节https://www.cnblogs.com/renshengdezheli/p/13941563.html。

3.准备测试文件,删除测试文件,卸载分区

#因为/dev/sdb5是ext4文件系统,所以在/sdb5目录下创建测试文件
[root@node5 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 17G 11G 6.2G 64% /
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 8.0K 3.9G 1% /dev/shm
tmpfs tmpfs 3.9G 8.8M 3.9G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 125M 890M 13% /boot
/dev/sdb1 xfs 47M 2.7M 45M 6% /sdb1
/dev/sdb5 ext4 190M 1.6M 175M 1% /sdb5
/dev/sdb6 xfs 295M 16M 280M 6% /sdb6
tmpfs tmpfs 785M 0 785M 0% /run/user/0
[root@node5 ~]# cd /sdb5
[root@node5 sdb5]# pwd
/sdb5
[root@node5 sdb5]# ls
lost+found #复制一些文件当做测试文件
[root@node5 sdb5]# cp /etc/passwd ./
[root@node5 sdb5]# cp /etc/hosts ./
[root@node5 sdb5]# cp -r /boot/grub2 ./
[root@node5 sdb5]# mkdir -p a/b/c/d
[root@node5 sdb5]# touch a/b/test.txt
[root@node5 sdb5]# tree ./ -L 2
./
├── a
│   └── b
├── grub2
│   ├── device.map
│   ├── fonts
│   ├── grub.cfg
│   ├── grubenv
│   ├── i386-pc
│   └── locale
├── hosts
├── lost+found
└── passwd 7 directories, 5 files
[root@node5 sdb5]# ls
a grub2 hosts lost+found passwd #删除测试文件
[root@node5 sdb5]# rm -rf a grub2 hosts passwd
[root@node5 sdb5]# ls
lost+found #卸载分区,避免写入新数据把原先数据覆盖
[root@node5 sdb5]# cd
[root@node5 ~]# umount /sdb5

六.安装extundelet

1.由于extundelete-0.2.4.tar.bz2是源码包,所以安装extundelete使用源码安装的方式。

2.源码编译安装extundelete

[root@node5 ~]# ls extundelete*
extundelete-0.2.4.tar.bz2 #解压缩安装包
[root@node5 ~]# tar jxvf extundelete-0.2.4.tar.bz2
[root@node5 ~]# ls
201810240430234009.pcm apache-tomcat-8.0.51.tar.gz extundelete-0.2.4 idea快捷键.txt linux-4.19.77.tar qemu-4.1.0 test2.txt
a busybox-1.24.2 extundelete-0.2.4.tar.bz2 iu.jpg linux脚本.sh qemu-4.1.0.tar test.txt
aaa.txt busybox-1.24.2.tar.bz2 glibc-aarch64-linux-gnu-2.24-2.sdl7.2.noarch.rpm jdk-8u172-linux-x64.tar.gz nginx-1.8.0.tar.gz rootfs 测试乱码文件.txt
anaconda-ks.cfg ceshi.txt glibc-aarch64-linux-gnu-devel-2.24-2.sdl7.2.noarch.rpm linux-4.19.77 qemu-2.11.0.tar.xz telnet-0.17-64.el7.x86_64.rpm [root@node5 ~]# cd extundelete-0.2.4
[root@node5 extundelete-0.2.4]# pwd
/root/extundelete-0.2.4
[root@node5 extundelete-0.2.4]# ls
acinclude.m4 aclocal.m4 autogen.sh config.h.in configure configure.ac depcomp install-sh LICENSE Makefile.am Makefile.in missing README src #安装依赖包
[root@node5 extundelete-0.2.4]# yum -y install e2fsprogs-devel #检查系统安装环境
[root@node5 extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
Writing generated files to disk #$?返回上一个命令的返回值,返回0就是正确
[root@node5 extundelete-0.2.4]# echo $?
0 #编译,把源代码编译成可执行的二进制文件。-j 4表示使用4个进程同时进行编译,提升编译速度或使用4核CPU同时编译
[root@node5 extundelete-0.2.4]# make -j 4
make -s all-recursive
Making 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};
^
[root@node5 extundelete-0.2.4]# echo $?
0 #编译安装
[root@node5 extundelete-0.2.4]# make install
Making install in src
/usr/bin/install -c extundelete '/usr/local/bin' [root@node5 extundelete-0.2.4]# echo $?
0 #可以看到已经存在extundelete这个可执行文件
[root@node5 extundelete-0.2.4]# which extundelete
/usr/local/bin/extundelete #扩展install和cp有什么区别?
#install复制时可以指定权限,但是cp不可以
#例如
[root@node5 ~]# install -m 777 /bin/find /opt/a.sh
[root@node5 ~]# ll /opt/

七.恢复误删除文件

1.恢复误删除文件有四种方法:

  • ​ 通过inode号恢复数据
  • ​ 通过文件名恢复数据
  • ​ 恢复指定目录
  • ​ 恢复所有的文件

2.创建一个用于存放恢复数据的文件夹,通过inode结点查看被删除的文件名字。

[root@node5 ~]# pwd
/root
[root@node5 ~]# mkdir reback
[root@node5 ~]# cd reback/
[root@node5 reback]# pwd
/root/reback #通过inode结点查看被删除的文件名字
#扩展:ext4文件系统的分区根目录的inode值为2,xfs分区根目录的inode值为64
[root@node5 reback]# extundelete /dev/sdb5 --inode 2
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 25 groups loaded.
Group: 0
Contents of inode 2:
0000 | ed 41 00 00 00 04 00 00 78 fe 83 5f 76 fe 83 5f | .A......x.._v.._
0010 | 76 fe 83 5f 00 00 00 00 00 00 03 00 02 00 00 00 | v.._............
0020 | 00 00 08 00 08 00 00 00 0a f3 01 00 04 00 00 00 | ................
0030 | 00 00 00 00 00 00 00 00 01 00 00 00 24 11 00 00 | ............$...
0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ Inode is Allocated
File mode: 16877
Low 16 bits of Owner Uid: 0
Size in bytes: 1024
Access time: 1602485880
eation time: 1602485878
▽odification time: 1602485878
Deletion Time: 0
Low 16 bits of Group Id: 0
Links count: 3
Blocks count: 2
File flags: 524288
File version (for NFS): 0
File ACL: 0
Directory ACL: 0
Fragment address: 0
Direct blocks: 127754, 4, 0, 0, 1, 4388, 0, 0, 0, 0, 0, 0
Indirect block: 0
Double indirect block: 0
Triple indirect block: 0 File name | Inode number | Deleted status
. 2
.. 2
lost+found 11
passwd 12 Deleted
hosts 13 Deleted
grub2 14 Deleted
a 324 Deleted

3.通过inode号恢复指定数据

[root@node5 reback]# extundelete /dev/sdb5 --restore-inode 12

4.通过文件名恢复指定数据

[root@node5 reback]# extundelete /dev/sdb5 --restore-file hosts

5.恢复指定目录的所有文件

[root@node5 reback]# extundelete /dev/sdb5 --restore-directory a

6.恢复所有文件

[root@node5 reback]# extundelete /dev/sdb5 --restore-all

7.注意:extundelete在恢复文件的时候不能自动创建空文件和空目录。例如

Centos6/RHEL6下恢复ext4文件系统下误删除的文件的更多相关文章

  1. NTFS(Windows)、ext4(RHEL6)和xfs(RHEL7)文件系统的误删除恢复和备份

    前言 对于误删除文件的设备,要马上停止任何写的操作,防止删除的文件被覆盖,导致数据丢失! 恢复NTFS文件系统下误删的文件 以Windows为例,市面上能恢复的工具不少,例如EasyRecovery. ...

  2. 恢复ext4文件系统superblock

    恢复ext4文件系统superblock 1. Create ext4 文件系统. [root@localhost ~]# mkfs.ext4 /dev/vdb1 [root@localhost ~] ...

  3. 使用hexdump工具追踪EXT4文件系统中的一个文件

    昨天追踪EXT4文件系统的过程中出了点问题,就是找不到文件,于是试了一下追踪FAT32文件系统的,成功之后有了点信心,今天继续嗑EXT4文件系统,终于找到啦,记录一下. 操作系统:linux(cent ...

  4. 如何恢复Eclipse中被误删除的文件

    在使用Eclipse时,可能会不小心误删除一些文件,没关系,Eclipse有个非常强大的功能,能让这些误删除的文件恢复回来,下面就来介绍一下. 工具/原料   Eclipse Kepler 方法/步骤 ...

  5. 在CentOS6或RHEL6恢复上ext4文件系统误删除的文件

    首先说明: [root@CentOS6 ~]# rm -rf / //这条命令不可以执行 [root@CentOS6 ~]# rm -rf /* //这条命令可以执行,别去试 ext4文件系统上误删除 ...

  6. Ext4文件系统架构分析(三)

    ioctl源码分析之交换两个文件的物理extents 1. 交换两个文件的extents Ext4 的EXT4_IOC_MOVE_EXT命令用于交换两个文件的extents,实际上是交换两个文件的对应 ...

  7. ext4文件系统由文件的inode号定位其inode Table

    在ubuntu中(以16.06为例),stat filename 可以查看文件的inode数值,但是如何确定该inode项具体在哪个块组下的inode Table中不是那么容易,接下来通过一步步计算来 ...

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

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

  9. 恢复Linux下被误删除的文件(笔记)

    恢复Linux下被误删除的文件 [root@xuegod63 ~]# mount /dev/cdrom /mnt/ 分一个区:sda4  查找:extundelete 分一个区:sda4  [root ...

  10. linux下rm误删除数据库文件的恢复方法

    在linux redhat 5.4版本,rm误删除数据库文件的恢复过程分享.测试没有问题,可用. 1.首先测试rm 误删除数据库文件 [oracle@primary dbwdn]$ ll total ...

随机推荐

  1. K8s技术全景:架构、应用与优化

    本文深入探讨了Kubernetes(K8s)的关键方面,包括其架构.容器编排.网络与存储管理.安全与合规.高可用性.灾难恢复以及监控与日志系统. 关注[TechLeadCloud],分享互联网架构.云 ...

  2. C#开发的绑定类型默认应用例子 - 开源研究系列文章

    这次在用C#编写一个看图软件小工具,然后其它的基本完成了,就是绑定看图软件到那些个图片扩展名的时候碰到了问题,就是如何将看图软件绑定图片文件的默认应用,以及解绑默认应用.这个涉及到注册表操作,但是找度 ...

  3. 国密 SM2 的非对称加密解密过程

    国密 SM2 的非对称加密解密过程 椭圆曲线 椭圆曲线是由一组方程描述的点的集合: y2 = x3 + ax + b 其中 a, b 满足 (4a3 + 27b2 ≠ 0) SM2 定义了一个 sm2 ...

  4. GAN的实现和一些问题

    GAN的学习是一个二人博弈问题,最终目标是达到纳什平衡.对抗指的是生成网络和判别网络的互相对抗.生成网络尽可能生成逼真样本,判别网络则尽可能去判别该样本是真实样本,还是生成的假样本.示意图如下: 生成 ...

  5. 三款免费强大的SSH工具食用指南

    食用清单 XShell FinalShell Electerm 食用方案 XShell 先说说老牌ssh工具XShell吧,用过很多年,说实话没啥别的毛病挺好用的.不过,还是有些地方有待加强,比如文件 ...

  6. 力扣122(java&python)-买卖股票的最佳时机 II(中等)

    题目: 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格. 在每一天,你可以决定是否购买和/或出售股票.你在任何时候 最多 只能持有 一股 股票.你也可以先购买 ...

  7. 爱奇艺在 Dubbo 生态下的微服务架构实践

    简介: 本文整理自作者于 2020 年云原生微服务大会上的分享<爱奇艺在 Dubbo 生态下的微服务架构实践>,重点介绍了爱奇艺在 Dubbo.Sentinel 等开发框架方面的使用经验以 ...

  8. 小米电商 Apache Dubbo-go 微服务实践

    ​简介:2021 年是小米中国区电商部门变动调整较大的一年,小米中国区早期电商.服务体系建立在 Go 语言构建的微服务体系之上,由内部自研的 Go 语言微服务框架 koala 支撑起数以千计的微服务应 ...

  9. PolarDB 并行查询的前世今生

    简介:本文会深入介绍PolarDB MySQL在并行查询这一企业级查询加速特性上做的技术探索.形态演进和相关组件的实现原理,所涉及功能随PolarDB MySQL 8.0.2版本上线. ​ 作者 | ...

  10. Serverless 工程实践 | 自建 Apache OpenWhisk 平台

    ​简介: OpenWhisk 是一个开源.无服务器的云平台,可以在运行时容器中通过执行扩展的代码响应各种事件,而无须用户关心相关的基础设施架构. OpenWhisk 简介 OpenWhisk 是基于云 ...