如何恢复rm -rf后的文件(ext4)

本文档给出了恢复ext4文件系统被误删的文件的方法,需要使用的软件是extundelete,这款软件对ext4文件系统的恢复成功率比较高,值得拥有!
恢复ext4文件系统被误删的文件恢复ext4文件系统被误删的文件

[root@localhost ~]# rm -Rf / #执行不成功的!
rm: 在"/" 进行递归操作十分危险
rm: 使用 --no-preserve-root 选项跳过安全模式
[root@localhost ~]# rm -rf /* #这个可以执行成功! 呵呵。。。
ext4文件系统上删除文件,可以恢复: extundelete ,ext3恢复使用:ext3grep
windows恢复误删除的文件: final data v2.0 汉化版 和 easyrecovery
扩展:

Linux文件系统由三部分组成:文件名,inode,block
windows也由这三部分组成。
a.txt -->inode --> block
文件名 存放文件元数据信息 真正存放数据
查看文件文件名:
[root@localhost ~]# cp /etc/passwd a.txt
[root@localhost ~]# ls a.txt
a.txt

查看inode号:
常识: 每个文件,有一个inode号。
[root@localhost ~]# ls -i a.txt
440266 a.txt
查看inode中的文件属性; 通过stat命令查看inode中包含的内容
[root@localhost ~]# stat a.txt #查看inode信息:
[root@localhost ~]# ls -l a.txt
-rw-r–r-- 1 root root 1720 Oct 25 10:21 a.txt

block块:真正存储数据的地方
逻辑删除:假删除
为什么删除比复制快?
恢复ext4文件系统被误删的文件恢复ext4文件系统被误删的文件

误删除文件后,第一件事要做什么? 你不心删除把存了几十年的大片删除了!
要避免误删除的文件内容被覆盖,如何避免?

卸载需要恢复文件的分区或者以只读的方式挂载
例如:

mount -o remount,ro /mnt
实战:恢复ext4文件系统被误删的文件

下载extundelete
http://sourceforge.net/ 开源软件发布中心

extundelete-0.2.4.tar.bz2
链接:https://pan.baidu.com/s/1n0dtGnhffcH7XrLv0TqUsw
提取码:a5m7

准备测试分区:

[root@localhost ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb
[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x539f33b8.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won’t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to
switch off the mode (command ‘c’) and change display units to
sectors (command ‘u’).

Command (m for help): p #查看分区表信息

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x539f33b8

Device Boot Start End Blocks Id System

Command (m for help): n #创建一个新分区
Command action
e extended
p primary partition (1-4)
p #创建一个主分区
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G #指定分区大小

Command (m for help): p #查看分区表信息

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x539f33b8

Device Boot Start End Blocks Id System
/dev/sdb1 1 132 1060258+ 83 Linux

Command (m for help): w #保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@localhost ~]# partx -a /dev/sdb1 #获得新分区表
或者
[root@localhost ~]# reboot
扩展:
如果在根下删除文件了,想恢复,怎么办?
方法1: 立即断电,然后把磁盘以只读方式,挂载到另一个电脑中进行恢复。
方法2:把extundelete在虚拟机上(虚拟机系统要和服务器版本一样),提前安装好后再复制到U盘中,把U盘插入服务器,恢复时,恢复的文件要保存到U盘中,(不要让恢复的数据写到/下,那样会覆盖之前删除的文件)。

使用新的分区:

[root@localhost ~]# mkdir /tmp/sdb1 #创建挂载点
[root@localhost ~]# mkfs.ext4 /dev/sdb1 #把/dev/sdb1分区文件系统格式化成ext4
[root@localhost ~]# mount /dev/sdb1 /tmp/sdb1 #把/dev/sdb1分区挂到/tmp/sdb1
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 18G 1.3G 16G 8% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
/dev/sr0 3.6G 3.6G 0 100% /media/cdrom
/dev/sdb1 1020M 34M 935M 4% /tmp/sdb1
复制一些测试文件,然后把这些文件再删除,然后演示恢复:

[root@localhost ~]# cp /etc/passwd /tmp/sdb1
[root@localhost ~]# cp /etc/hosts /tmp/sdb1
[root@localhost ~]# echo aaa > a.txt
[root@localhost ~]# mkdir -p /tmp/sdb1/a/b/c
[root@localhost ~]# cp a.txt /tmp/sdb1/a
[root@localhost ~]# cp a.txt /tmp/sdb1/a/b
[root@localhost ~]# touch /tmp/sdb1/a/b/kong.txt
[root@localhost ~]# yum install -y tree
[root@localhost ~]# tree /tmp/sdb1
/tmp/sdb1
├── a
│ ├── a.txt
│ └── b
│ ├── a.txt
│ ├── c #空目录
│ └── kong.txt #空文件
├── hosts
├── lost+found
└── passwd

4 directories, 5 files
删除文件:

[root@localhost ~]# cd /tmp/sdb1
[root@localhost sdb1]# ls
a hosts lost+found passwd
[root@localhost sdb1]# rm -rf a hosts passwd
[root@localhost sdb1]# ls
lost+found
误删除文件后,第一件事要做什么???
如何避免误删除的文件内容被覆盖???
卸载需要恢复文件的分区或者以只读的方式挂载

[root@localhost sdb1]# cd /root
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 18G 1.3G 16G 8% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
/dev/sr0 3.6G 3.6G 0 100% /media/cdrom
/dev/sdb1 1020M 34M 935M 4% /tmp/sdb1
[root@localhost ~]# echo “/dev/sdb1 /tmp/sdb1 ext4 defaults 0 0” >> /etc/fstab
[root@localhost ~]# mount -o remount,ro /tmp/sdb1 #以读写的形式重新挂载/tmp/sdb1所在分区
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 18G 1.3G 16G 8% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
/dev/sr0 3.6G 3.6G 0 100% /media/cdrom
/dev/sdb1 1020M 34M 935M 4% /tmp/sdb1
[root@localhost ~]# touch /tmp//sdb1/testfile
touch: cannot touch `/tmp//sdb1/testfile’: Read-only file system
或者

[root@localhost ~]# umount /tmp/sdb1 #卸载/tmp/sdb1所在分区
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 18G 1.3G 16G 8% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
/dev/sr0 3.6G 3.6G 0 100% /media/cdrom
安装extundelete工具

上传extundelete到Linux中:
从Windows上传extundelete文件到Linux,安装SecureCRT或者XShell
[root@localhost ~]# yum install -y lrzsz

安装后就有了rz命令和sz命令

rz: 将Windows中的文件上传到Linux
sz: 将Linux中的文件下载到Windows
源码安装extundelete

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# ls
[root@localhost src]# rz
rz waiting to receive.
zmodem trl+C ȡ
100% 105 KB 105 KB/s 00:00:01 0 Errorsbz2…

[root@localhost src]# ls
extundelete-0.2.4.tar.bz2
[root@localhost src]# tar xjvf extundelete-0.2.4.tar.bz2
[root@localhost src]# cd extundelete-0.2.4
[root@localhost extundelete-0.2.4]# yum install -y e2fsprogs-devel gcc*
[root@localhost extundelete-0.2.4]# ./configure #检查系统安装环境
[root@localhost extundelete-0.2.4]# make -j 4 #编译,把源代码编译成可执行的二进制文件。 -j 4 使用4进程同时编译,提升编译速度或者使用4核CPU同时编译。
[root@localhost extundelete-0.2.4]# make install #编译安装
扩展:

install 和cp 有什么区别?
install 复制时可以指定权限 cp不可以
例:
[root@localhost ~]# install -m 777 /bin/find /opt/a.sh
[root@localhost ~]# ll /opt/
开始恢复:

方法一:通过inode结点恢复
方法二:通过文件名恢复
方法三:恢复某个目录,如目录a下的所有文件:
方法四:恢复所有的文件

[root@localhost extundelete-0.2.4]# mkdir /test #创建一个目录使用于存放恢复的数据
[root@localhost extundelete-0.2.4]# cd /test
[root@localhost test]#

通过inode结点查看被删除的文件名字:
[root@localhost test]# extundelete /dev/sdb1 --inode 2
File name | Inode number | Deleted status
. 2
… 2
lost+found 11
passwd 12 Deleted
hosts 13 Deleted
a 7377 Deleted

扩展:ext4文件系统的分区根目录的inode值为2,xfs分区根目录的inode值为64

[root@localhost test]# ls -id /boot/ #xfs文件系统
64 /boot/

[root@localhost test]# ls -id /tmp/sdb1
2 /tmp/sdb1
方法一:通过inode结点恢复

[root@localhost test]# ls
[root@localhost test]# extundelete /dev/sdb1 --restore-inode 12
NOTICE: Extended attributes are not restored.
Loading filesystem metadata … 9 groups loaded.
Loading journal descriptors … 61 descriptors loaded.
[root@localhost test]# ls
RECOVERED_FILES
[root@localhost test]# ls RECOVERED_FILES/
file.12
[root@localhost test]# diff /etc/passwd RECOVERED_FILES/file.12 #对比文件内容,没有任何输出,说明恢复后的文件内容没有变化
方法二:通过文件名恢复

[root@localhost test]# extundelete /dev/sdb1 --restore-file passwd
[root@localhost test]# diff /etc/passwd RECOVERED_FILES/passwd #对比文件内容,没有任何输出,说明恢复后的文件内容没有变化
方法三:恢复某个目录,如目录a下的所有文件:

[root@localhost test]# extundelete /dev/sdb1 --restore-directory a
[root@localhost test]# tree RECOVERED_FILES/a/
RECOVERED_FILES/a/
├── a.txt
└── b
└── a.txt

1 directory, 2 files
方法四:恢复所有的文件

[root@localhost test]# rm -rf RECOVERED_FILES/*
[root@localhost test]# extundelete /dev/sdb1 --restore-all
[root@localhost test]# ls RECOVERED_FILES/
a hosts passwd
[root@localhost test]# tree RECOVERED_FILES/
RECOVERED_FILES/
├── a
│ ├── a.txt
│ └── b
│ └── a.txt
├── hosts
└── passwd

2 directories, 4 files
数据对比

删除前:

[root@localhost ~]# tree /tmp/sdb1
/tmp/sdb1
├── a
│ ├── a.txt
│ └── b
│ ├── a.txt
│ ├── c #空目录
│ └── kong.txt #空文件
├── hosts
├── lost+found
└── passwd

4 directories, 5 files
恢复后:

[root@localhost test]# tree RECOVERED_FILES/
RECOVERED_FILES/
├── a
│ ├── a.txt
│ └── b
│ └── a.txt
├── hosts
└── passwd

2 directories, 4 files
extundelete在恢复文件的时候能不能自动创建空文件和目录?
答:不能

如何恢复rm -rf后的文件(ext4)相关推荐

  1. rm rf 后的文件如何恢复

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 原贴:h ...

  2. extundelete工具恢复rm -rf 删除的目录(ext4、ext3)

    extundelete工具恢复rm -rf 删除的目录(ext4) ext3grep工具只能用于恢复ext3文件系统下删除的文件,对于ext4文件系统,可以使用extundelete工具.使用的方法类 ...

  3. linux恢复rm删除文件ssd,科学网—linux恢复rm -rf删除的文件 - 罗晓光的博文

    ext3grep这个软件可以恢复linux ext3分区下rm -rf删除的文件,以下是部分存档操作记录(不全),仅供参考 1-step Writing analysis so far to 'sda ...

  4. 如何抢救恢复 rm -rf 误删除的文件?

    Linux中有一种可怕的误操作 -- rm -rf 误删除文件.对于数据库而言,如果误删除了数据文件,而数据库进程还没挂掉的话,可以尝试抢救一下.注意误rm后千万不要去重启数据库.对于其他文件,下面方 ...

  5. 通过lsof命令恢复rm -rf 误删的文件

    针对rm -rf 删除的且在lsof能够看到的情况下 当误删了重要数据时,可以通过lsof |grep deleted命令查询出 user 18940 19112 polkitd 4u REG 0,3 ...

  6. 不小心敲了 rm -rf / 后反应是怎样的?

    某通信公司,HK某运营商项目,某中间件产品,实时系统,三期割接上线. 因为一期二期已经上线,现网系统已经承载C网200w用户. 连续两晚通宵,终于成功割接,系统运行正常. 一觉醒来,下午四点,业务高峰 ...

  7. 当同事用 Root 权限输入rm -rf 后,鬼知道我经历了什么

    安排一个妹子在一台生产服务器上安装 Oracle,妹子边研究边安装,感觉装的不对,准备卸载重新安装. 从网上找到卸载方法,其中要执行一行命令删除 Oracle 的安装目录,命令如下: rm -rf $ ...

  8. Centos 7.5安装safe-rm,防止rm -rf /命令误删除文件

    一. 环境 本地华为桌面云服务器环境 Centos 7.6 二. 问题描述: 安装safe-rm,防止rm -rf /命令误删除文件,防止这种误删除操作 三. 解决方案: 1.安装safe-rm 下载 ...

  9. Linux下rm -rf 后恢复文件

    在linux系统下,如果你不小心误删除了一个文件价或文件,如rm -rf xxx,而xxx文件夹下有非常重要的数据,因为这个命令意味着一旦删除的文件是无法挽回的,事实是如此吗?真的没有补救措施了吗?答 ...

最新文章

  1. SQLServer2008/2005 生成数据字典语句
  2. 微信年末最后一发新功能!对生活很有帮助,必须了解一下!
  3. 使用Qt作窗口截屏(含源码)
  4. [目录]Linux 核心系统命令目录
  5. docker 安装nginx_docker安装nginx搭建简单文件共享服务
  6. 加速 SpringBoot 应用开发,官方热部署神器真带劲!
  7. Python中的多进程创建和传值(克隆)Queue方法
  8. 拼多多成为2021年春晚独家红包互动合作伙伴
  9. save cookies and get cookies in system using asp.net
  10. 软件文档的作用和分类
  11. 智能车图像处理(三)元素判断
  12. 对SPEA算法的一些总结
  13. RStudio打开后空白的解决
  14. Java内存区域与Java内存模型
  15. 安装debian8操作系统
  16. fast-lio2论文阅读 《FAST-LIO2: Fast Direct LiDAR-inertial Odometry》
  17. 手把手教学MFC吃豆子教程
  18. android 图片加载 软引用_android Listview 软引用SoftReference异步加载图片
  19. IDEA设置自动生成注释模板
  20. 外网连接腾讯云mysql

热门文章

  1. android 悬浮窗的检查
  2. Ruby Enumerator的各种迭代
  3. uniapp [JS Framework] 当前运行的基座不包含原生插件[sp-tcp],请在manifest中配置该插件,重新制作包括该原生插件的自定义运行基座
  4. 定义一个复数类complex,包含两个属性:实部和虚部,包含构造函数,包含成员函数void display()输出,包括成员函数complex add(complex a), 进行复数加法。
  5. Windows系统安装IDEA并配置开发环境
  6. [Unity] 优化您的移动游戏性能2020(上)
  7. 图解深度学习-提高泛化能力的方法
  8. Katalon自动化测试基础教程
  9. npm淘宝镜像码云element-UI
  10. javaweb设计简易购物车