zoukankan      html  css  js  c++  java
  • LINUX使用extundelete进行数据恢复

    从删库到跑路不是一句笑话,不小心误删除操作很容易造成整个公司业务崩溃。所以真的误删除了,第一时间就是赶紧停机,不要再进行任何写入操作,把这块磁盘挂载到其他机器进行数据恢复

    这里我们介绍一下使用 LINUX 平台下的 extundelete 对误删除的数据进行恢复的操作

    一、安装恢复软件

    1、epel 仓库安装

    如果我们的源里面添加了 epel 仓库的话,我们可以直接使用下面的命令安装。

    1. yum install extundelete -y

    2、源码编译安装

    1. wget  http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2
    2. yum -y install  bzip2  e2fsprogs-devel  e2fsprogs  gcc-c++ make
    3. tar -xvjf extundelete-0.2.4.tar.bz2
    4. cd extundelete-0.2.4 ./configure
    5. make && make install

    三、删除数据查找

    因为我的数据路径比较深,所以我们需要一步步查找,可以先从根分区 inode 查找

    1. extundelete /dev/sdb1 --inode 2

    我把 Linux 系统上面误删的数据找回来了

    我们会看到 weapps 目录的 inode,

    1. extundelete /dev/sda5 --inode 24641537

    我把 Linux 系统上面误删的数据找回来了

    我们看到项目的 inode,

    1. extundelete /dev/sda5 --inode 24903688

    我把 Linux 系统上面误删的数据找回来了

    我们找到了最终删除数据的目录 upload

    1. extundelete /dev/sda5 --inode 24904454

    我把 Linux 系统上面误删的数据找回来了

    我们可以看到标称的 Deleted,这些数据就是我们要进行恢复的数据。

    四、数据恢复

    那我们就恢复指定目录,以当前分区为根分区进行路径设定,项目名进行掩盖

    1. extundelete /dev/sda5 --restore-directory /webapps/xxxx/upload

    我把 Linux 系统上面误删的数据找回来了

    因为磁盘数据一直在读写,所以有些文件之前的 inode 已经被重新分配了,导致部分数据无法恢复,数据最后会告诉我们有多少文件没有回复,但是大部分数据我们已经恢复了,这就是很重要的事情了。

    那我们查看一下回复的数据吧,软件会在当前目录生成一个目录 RECOVERED_FILES 里面就是我们恢复的数据。

    我把 Linux 系统上面误删的数据找回来了

    恢复全部数据可以使用命令

    1. extundelete /dev/sda5 --restore-all

    使用方法

    extundelete –help

    其中,参数(options)有:
    –version, -[vV],显示软件版本号。
    –help,显示软件帮助信息。
    –superblock,显示超级块信息。
    –journal,显示日志信息。
    –after dtime,时间参数,表示在某段时间之后被删的文件或目录。
    –before dtime,时间参数,表示在某段时间之前被删的文件或目录。

    动作(action)有:
    –inode ino,显示节点“ino”的信息。
    –block blk,显示数据块“blk”的信息。
    –restore-inode ino[,ino,…],恢复命令参数,表示恢复节点“ino”的文件,恢复的文件会自动放在当前目录下的 RESTORED_FILES 文件夹中,使用节点编号作为扩展名。
    –restore-file ‘path’,恢复命令参数,表示将恢复指定路径的文件,并把恢复的文件放在当前目录下的 RECOVERED_FILES 目录中。
    –restore-files ‘path’,恢复命令参数,表示将恢复在路径中已列出的所有文件。
    –restore-all,恢复命令参数,表示将尝试恢复所有目录和文件。
    -j journal,表示从已经命名的文件中读取扩展日志。
    -b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件。
    -B blocksize,通过指定数据块大小来打开文件系统,一般用于查看已经知道大小的文件。

    在数据删除之后,首先要卸载被删除数据所在的磁盘或是分区,如果是系统根分区遭到误删除,就需要进入单用户模式下,将根分区以只读的方式挂载。

    原因:因为文件删除之后,仅仅是将文件的 inode 节点中的扇区指针清零,实际上文件还存在磁盘上面,如果磁盘以读写方式挂载,这些删除的数据块可能会被系统从新分配出去,这些数据块被覆盖之后,这些数据就真的丢失了,所以以只读的方式挂载,尽可能避免数据被覆盖。

  • 相关阅读:
    安装lnmp 时如何修改数据库数据存储地址及默认访问地址
    ubuntu 设置root用户密码并实现root用户登录
    解决ubuntu 远程连接问题
    linux 搭建FTP服务器
    PHP 根据ip获取对应的实际地址
    如何发布自己的composer包
    使用composer安装composer包报Your requirements could not be resolved to an installable set of packages
    laravel 框架配置404等异常页面
    使用Xshell登录linux服务器报WARNING! The remote SSH server rejected X11 forwarding request
    IoTSharp 已支持国产松果时序数据库PinusDB
  • 原文地址:https://www.cnblogs.com/DataArt/p/10173910.html
Copyright © 2011-2022 走看看