您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

Linux系统中文件被删除后的恢复方法(ext4)

时间:2020-04-26 11:46:16  来源:  作者:

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

Linux系统中文件被删除后的恢复方法(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块:真正存储数据的地方
逻辑删除:假删除
为什么删除比复制快?
Linux系统中文件被删除后的恢复方法(ext4)

 

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

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

mount -o remount,ro /mnt

实战:恢复ext4文件系统被误删的文件

下载extundeletehttp://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在恢复文件的时候能不能自动创建空文件和目录?
答:不能



Tags:Linux 文件   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在本文中,我们将查看一些用于排序和合并文件内容的命令,并重点介绍结果有何不同。• 来源:linux.cn • 作者:Sandra Henry-stocker • 译者:geekpi •(本文字数:3...【详细内容】
2020-08-24  Tags: Linux 文件  点击:(88)  评论:(0)  加入收藏
常用逻辑组织方式有两种,即无结构文件和有结构文件1.无结构文件无结构文件是指文件内部不再划分记录,是由一组相关信息组成的有序字符流,又称为流式文件其长度直接按字节计算。...【详细内容】
2020-08-16  Tags: Linux 文件  点击:(151)  评论:(0)  加入收藏
一、find 查找命令# 在目录下查找文件并打印路径,子目录也会查找find /home/test -name test.sh -print 12命令选项: -name 按照文件名查找 -perm 按照文件权限来查找文件 -pr...【详细内容】
2020-07-29  Tags: Linux 文件  点击:(57)  评论:(0)  加入收藏
一、文件系统特性1.1 结构体磁盘分区后还要进行格式化,操作系统才能使用这个文件系统。每个操作系统能识别和使用的文件系统不完全相同,如Windows98以前支持FAT,Windows2000后...【详细内容】
2020-07-28  Tags: Linux 文件  点击:(116)  评论:(0)  加入收藏
磁盘为系统提供了最基本的持久化存储。文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构。那么,磁盘和文件系统是怎么工作的呢?又有哪些指标可以衡量它们的性能呢?索...【详细内容】
2020-07-08  Tags: Linux 文件  点击:(70)  评论:(0)  加入收藏
1. 前言本文主要讲解在Linux系统中,常用的文件管理工具有哪些?他们分别有什么样的作用。在Linux中,大多数操作都是在文件上执行的。为了处理这些文件,Linux的文件夹也称为目录,它...【详细内容】
2020-05-31  Tags: Linux 文件  点击:(69)  评论:(0)  加入收藏
1. 前言请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习本文主要讲解如何查看Linux中的文件类型。在Linux...【详细内容】
2020-05-28  Tags: Linux 文件  点击:(758)  评论:(0)  加入收藏
本文档给出了恢复ext4文件系统被误删的文件的方法,需要使用的软件是extundelete,这款软件对ext4文件系统的恢复成功率比较高,值得拥有! [root@localhost ~]# rm -Rf / #执行不...【详细内容】
2020-04-26  Tags: Linux 文件  点击:(76)  评论:(0)  加入收藏
1、错误现象运维的监控系统发来通知,报告一台服务器空间满了,登录服务器查看,根分区确实没有空间了:[root@localhost ~]# df -h这里首先说明一下服务器的一些删除策略,由于Linux...【详细内容】
2020-01-13  Tags: Linux 文件  点击:(89)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(40)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条