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

首先说明:

[[email protected] ~]# rm -rf /      //这条命令不可以执行
[[email protected] ~]# rm -rf /*    //这条命令可以执行,别去试

  ext4文件系统上误删除文件,可以用extundelete恢复。ext3恢复使用ext3grep。Windows恢复使用final data v2.0汉化版和easyrecovery等。

  误删除文件后,第一件事是避免误删除的文件内容被覆盖,这时可以卸载需要恢复文件的分区或以只读的方式挂载。

(1).下载extundelete

https://sourceforge.net/          开源软件发布中心

https://github.com/                   github项目托管平台

(2).准备实验环境

VMare12  CentOS6.8  添加一块硬盘20G

这里创建sdb1分区,挂载到/newpar下。

还有将CentOS6.8的光盘镜像挂载到/mnt下。

(3).复制一些测试文件,然后删除,以备测试恢复。

这里为了更好的展示,安装一下tree。

[[email protected] ~]# rpm -ivh /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm
warning: /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:tree                   ########################################### [100%]

下面开始复制文件

[[email protected] ~]# cp /etc/passwd /newpar/
[[email protected] ~]# cp /etc/hosts /newpar/
[[email protected] ~]# echo abc > a.txt
[[email protected] ~]# mkdir -p /newpar/a/b/c/
[[email protected] ~]# cp a.txt  /newpar/a/
[[email protected] ~]# cp a.txt /newpar/a/b/
[[email protected] ~]# touch /newpar/a/b/test.txt
[[email protected] ~]# tree /newpar/
/newpar/
├── a
│   ├── a.txt
│   └── b
│       ├── a.txt
│       ├── c    //空的
│       └── test.txt    //空的
├── hosts
├── lost+found
└── passwd
4 directories, 5 files

下面开始删除

[[email protected] ~]# rm -rf /newpar/{a,hosts,passwd}
[[email protected] ~]# ls /newpar/
lost+found

删完了,记得误删除第一步,卸载分区。如果是根目录看(7).扩展2

[[email protected] ~]# umount /newpar/    //不能在挂载点下卸载

使用df -a查看文件系统的挂载点

[[email protected] ~]# df -a
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_centos6-lv_root
                      17938864 3958368  13062584  24% /
proc                         0       0         0    - /proc
sysfs                        0       0         0    - /sys
devpts                       0       0         0    - /dev/pts
tmpfs                   953652      72    953580   1% /dev/shm
/dev/sda1               487652   40913    421139   9% /boot
/dev/sr0               3824484 3824484         0 100% /mnt
none                         0       0         0    - /proc/sys/fs/binfmt_misc
[[email protected] ~]# mkdir /cdrom
[[email protected] ~]# mount /dev/sr0  /cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
[[email protected] ~]# df -a
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_centos6-lv_root
                      17938864 3958372  13062580  24% /
proc                         0       0         0    - /proc
sysfs                        0       0         0    - /sys
devpts                       0       0         0    - /dev/pts
tmpfs                   953652      72    953580   1% /dev/shm
/dev/sda1               487652   40913    421139   9% /boot
/dev/sr0               3824484 3824484         0 100% /mnt
none                         0       0         0    - /proc/sys/fs/binfmt_misc
/dev/sr0               3824484 3824484         0 100% /cdrom

(4).安装extundelete

将下载好的extundelete上传到服务器中。

[[email protected] ~]# ls
anaconda-ks.cfg            install.log         模板  文档  桌面
a.txt                      install.log.syslog  视频  下载
extundelete-0.2.4.tar.bz2  公共的              图片  音乐

解压

[[email protected] ~]# tar -jxvf extundelete-0.2.4.tar.bz2    //-j过滤bz2格式

准备依赖包(我的CentOS6.8镜像好像不全,其实还可以用rpm -ivh安装gcc-c++和e2fsprogs-devel)

[[email protected] extundelete-0.2.4]# yum -y install gcc-c++
[[email protected] extundelete-0.2.4]# yum -y install e2fsprogs-devel

安装extundelete

[[email protected] ~]# cd extundelete-0.2.4
[[email protected] extundelete-0.2.4]# ./configure    //检查系统安装环境,为了生成Makefile文件
Configuring extundelete 0.2.4
Writing generated files to disk
[[email protected] extundelete-0.2.4]# make -j 4    //编译,把源代码编译成可执行的二进制文件。-j 4使用4进程或4核同时编译,提高编译速度。根据实际配置修改
make -s all-recursive
Making all in src
extundelete.cc:571: 警告:未使用的参数‘flags’
[[email protected] extundelete-0.2.4]# make install    //安装
Making install in src
  /usr/bin/install -c extundelete ‘/usr/local/bin‘    //在此目录下

(5).恢复文件

创建一个文件夹,将恢复的文件保存到文件夹内

[[email protected] ~]# umount /dev/sdb1    //确保卸载分区
umount: /dev/sdb1: not mounted
[[email protected] ~]# mkdir test    //创建test文件夹
[[email protected] ~]# cd test/
[[email protected] test]# ls

查看inode号

[[email protected] test]# extundelete /dev/sdb1 --inode 2    //ext4文件系统分区根目录的inode值为2,xfs文件系统分区根目录的inode值为64。
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Group: 0
Contents of inode 2:
0000 | ed 41 00 00 00 10 00 00 60 7b 2e 5c 4e 7b 2e 5c | .A......`{.\N{.0010 | 4e 7b 2e 5c 00 00 00 00 00 00 03 00 08 00 00 00 | N{.\............
0020 | 00 00 00 00 06 00 00 00 21 24 00 00 00 00 00 00 | ........!$......
0030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 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 | ................
0080 | 1c 00 00 00 a8 37 a3 c1 a8 37 a3 c1 7c d2 20 60 | .....7...7..|. `
0090 | 7a 72 2e 5c 00 00 00 00 00 00 00 00 00 00 00 00 | zr.\............
00a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00b0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00d0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
00f0 | 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: 4096
Access time: 1546550112
Creation time: 1546550094
Modification time: 1546550094
Deletion Time: 0
Low 16 bits of Group Id: 0
Links count: 3
Blocks count: 8
File flags: 0
File version (for NFS): 0
File ACL: 0
Directory ACL: 0
Fragment address: 0
Direct blocks: 9249, 0, 0, 0, 0, 0, 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
a                                                 262145         Deleted

1)通过inode恢复

根据上面的inode值,使用--restore-inode选项恢复passwd

[[email protected] test]# extundelete /dev/sdb1 --restore-inode 12
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 67 descriptors loaded.[[email protected] test]# ls -l总用量 4drwxr-xr-x. 2 root root 4096 1月   4 07:07 RECOVERED_FILES    //可以看到一个新的文件夹[[email protected] test]# cd RECOVERED_FILES/[[email protected] RECOVERED_FILES]# lsfile.12    //这就是恢复出来的文件[[email protected] RECOVERED_FILES]# diff /etc/passwd file.12  //比较一下是否有不同。没有输出就是一样。

2)通过文件名恢复

也可以根据上面的文件名,使用--restore-file选项恢复passwd。这样还可以同时还原文件名

[[email protected] test]# extundelete /dev/sdb1 --restore-file passwd
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 67 descriptors loaded.
Successfully restored file passwd
[[email protected] test]# ls RECOVERED_FILES/
file.12  passwd    //可以看到恢复出了一个名为passwd的文件
[[email protected] test]# diff RECOVERED_FILES/file.12 RECOVERED_FILES/passwd    //两个文件内容是一样的

3)恢复某个目录

使用--restore-directory选项恢复文件夹a。注意:空目录和空文件无法恢复

[[email protected] test]# extundelete /dev/sdb1 --restore-directory a
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 67 descriptors loaded.
Searching for recoverable inodes in directory a ...
7 recoverable inodes found.
Looking through the directory structure for deleted files ...
3 recoverable inodes still lost.    //3个可回收的inode仍然丢失
[[email protected] test]# tree RECOVERED_FILES/a/
RECOVERED_FILES/a/
├── a.txt
└── b
    └── a.txt    //少了空文件夹c和空文件test.txt

1 directory, 2 files

4)恢复所有文件

使用--restore-all选项恢复所有文件。注意:空目录和空文件无法恢复

[[email protected] test]# rm -rf *
[[email protected] test]# ls
[[email protected] test]# extundelete /dev/sdb1 --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 67 descriptors loaded.
Searching for recoverable inodes in directory / ...
7 recoverable inodes found.
Looking through the directory structure for deleted files ...
0 recoverable inodes still lost.
[[email protected] test]# tree RECOVERED_FILES/
RECOVERED_FILES/
├── a
│   ├── a.txt
│   └── b
│       └── a.txt    //少了空目录c和空文件test.txt
├── hosts
└── passwd

2 directories, 4 files

(6).扩展1:

Linux文件系统由三部分组成:文件名,inode(存放文件元数据信息),block(真正存放数据)。Windows也由这三部分组成。

1)查看inode号

[[email protected] ~]# ls -i anaconda-ks.cfg
137428 anaconda-ks.cfg

查看inode中的文件属性。通过stat命令查看inode中包含的内容

[[email protected] ~]# stat anaconda-ks.cfg
  File: "anaconda-ks.cfg"
  Size: 1700            Blocks: 8          IO Block: 4096   普通文件
Device: fd00h/64768d    Inode: 137428      Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-09-01 18:01:33.658648102 +0800
Modify: 2018-03-13 18:29:40.674999889 +0800
Change: 2018-03-13 18:29:48.813999887 +0800

2)Block块:真正存储数据的地方

为什么删除比复制块?因为一般的删除都是逻辑删除,只删除了文件名。当有新的文件占用inode和block,此时只有找专业的数据恢复公司,通过奇偶校验找回文件。

(7).扩展2:

如果想恢复根下删除的文件怎么办?

方法一:立即断电(因为正常关机会产生日志,防止日志对数据覆盖),然后把磁盘以只读方式挂在到另一台相同相同的电脑中进行恢复

方法二:把extundelete在另一台相同相同的电脑上安装好,然后复制到U盘中。把U盘插入服务器,恢复时将恢复的文件保存到U盘中(不要让恢复的数据写到根下,那样会覆盖之前删除的文件)

原文地址:https://www.cnblogs.com/diantong/p/10209504.html

时间: 2024-11-04 19:50:35

在CentOS6或RHEL6恢复上ext4文件系统误删除的文件的相关文章

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

恢复Linux下被误删除的文件 [[email protected] ~]# mount /dev/cdrom /mnt/ 分一个区:sda4  查找:extundelete 分一个区:sda4  [[email protected] ~]# mkdir /tmp/sda4 [[email protected] ~]# mkfs.ext4 /dev/sda4     格式化 [[email protected] Desktop]# echo $? 0 [[email protected] ~]#

EXT4中恢复使用rm命令误删除的文件

工具:extundelete 关于ext4 文件系统的知识:http://www.ibm.com/developerworks/cn/linux/l-cn-filesrc5/ 一.安装 #  wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.0/extundelete-0.2.0.tar.bz2  # tar -xvf extundelete-0.2.0.tar.bz2  #  cd extundele

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

在使用Eclipse时,可能会不小心误删除一些文件,没关系,Eclipse有个非常强大的功能,能让这些误删除的文件恢复回来,下面就来介绍一下. 第一步: Eclipse能恢复本地删除一段时间之内的文件,并不是说所有删除的文件都可以恢复.这个是有时效性的. 如下图,我不小心删除了方框中的zip文件. 第二步: 删除后工程目录结构就变成了这个样子,那怎么才能恢复回来呢? 第三步: 右击该工程,选择"Restore from Local History...",从本地历史中恢复. 第四步:

如何恢复Linux下被误删除的文件以及如何防止文件被删除

[卸载被误删除文件所在的分区,或以只读方式mount] 当你发现你误删除了文件后,要做的第一件事情是马上卸载被误删除文件所在分区,或者以只读的方式来挂在该防区.如果误删除的是根分区,最好直接断电,进入单用户模式,以只读的方式挂在分区,然后再进行恢复 mount -o ro,remount /dev/sdb /mnt 如果删除的不是根分区,使用umount来将该分区进行卸载   umount /dev/sdb3 [安装Ext3grep工具] 下载Ext3grep工具,http://code.goo

恢复linux里被误删除的文件

慎用删除命令! 之所以能恢复是因为你那块扇区没被覆盖,这就是为什么copy文件那么慢而删除文件那么快,因为删的只是文件名,inode号还在就好. 得先把下载好的extundelete-0.2.4.tar.bz2软件传到Linux系统里,并解压 tar -jxvf extundelete-0.2.4.tar.bz2 卸载需要恢复的分区 umount /tmp/sdb1 cd 到extundelete-0.2.4目录 执行源码编译 ./configure,一般情况下会报错,所以用rpm安装一个叫e2

恢复ext4文件系统superblock

恢复ext4文件系统superblock 1. Create ext4 文件系统. [[email protected] ~]# mkfs.ext4 /dev/vdb1 [[email protected] ~]# partprobe /dev/vdb 2. 挂载文件系统 [[email protected] ~]# grep vdb2 /etc/fstab /dev/vdb1    /ext4    ext4    defaults    0 0 [[email protected] ~]#

Ext4文件系统的特性

与Ext3文件系统兼容:原有的Ext3数据结构仍然照样保留,Ext4作用于新数据,整个系统因此也就获得了Ext4所支持的更大的容量 更大额文件系统和更大的文件:Ext3目前所支持的最大16TB文件系统和最大2TB文件,Ext4分别支持1EB的文件系统,16TB的文件(1EB=1024PB,1PB=1024TB). 无限数量的子目录.Ext3支持32000个子目录,Ext4不限制 Extents:Ext3采用间接块映射,当操作大文件时,效率极其低下.比如一个100M的文件.在Ext3中要建立256

Ext4文件系统的特性和功能简介

Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4. Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已.Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能: /. 与 Ext3 兼容. 执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统.原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 E

在linux系统上建文件系统,建用户,修改用户所属组,重置用户密码

在linux系统上建文件系统,建用户,修改用户所属组,重置用户密码 实验背景:用户及空间 用户名:bosswlb    组别和附属组: bosswlb      主目录:/bosswlb            Shell:bash 空间: 新增    (新增/扩容) 5G   ■解锁  ■密码重置 abcd1234 第一点:建立新的文件系统 我们先来看下系统上现有的文件系统,如下图所示: 下面开始增加一块大小为5G的新盘,使用下面任意一个命令可以扫到新盘: 1.#echo '- - - '>