zoukankan      html  css  js  c++  java
  • Linux 数据恢复

    1. 前言
      在Linux上进行操作的时候,如果不小心删除了某些重要的目录或者文件怎么办?linux上又没有回收站(服务器版本),一旦不小心,
      不就得删库跑路?保证数据安全最好的方法是做好备份,虽然备份不是万能的,但是没有备份是万万不行的。任何数据恢复工具都有一定局限性,都不能保证完整地恢复出所有数据。数据恢复这方面还是得做好功课的。

    2. linux下的数据 恢复工具
      在Linux下,基于开源的数据恢复工具有很多,常见的有debugfs,ext3grep,extundelete,testdisk,grep。
      在网上看了几篇大佬的博客。前人踩过的坑我们就小心的避开他了。直接上硬菜,这里使用的是 extundelete 进行数据恢复

    3. 简介extundelete
      extundelete是基于Linux的一个数据恢复工具,它通过分析文件系统的日志,解析出所有文件的inode信息,从而可以恢复Linux
      下主流的ext3、ext4文件系统下被误删除的文件。而ext3grep仅支持ext3文件系统的恢复。在恢复速度上,extundelete要快很多,因为extundelete的恢复机制是扫描inode和恢复数据同时进行,并且支持单个文件恢复、单个目录恢复、inode恢复、block恢复、完整磁盘恢复等,而ext3grep就略显笨拙了,它需要首先扫描完要恢复数据的所有inode信息,然后才能开始数据恢复,所以在恢复速度上相对较慢,并且在功能上也不支持目录恢复、时间段恢复等。在利用extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息(根目录的inode一 般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。然后利用inode信息结合日志去查询该 inode所在的block位置,包括直接块、间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件

    4. 安装
      首先,我们在虚拟机软件中新建一个Ubuntu16.04 的虚拟机(安全第一)。ubuntu的文件系统是ext4的。
      默认新建完成。

    sudo apt-get install e2fslibs-dev  //依赖包
    sudo apt-get install extundelete   //安装extundelete
    

    其它Linux系统可以下载extundelete的源包,进行编译安装
    extundelete的官方网站是http://extundelete.sourceforge.net/
    其目前的稳定版本是extundelete-0.2.4。在安装extundelete之前需要安装e2fsprogs和e2fsprogs-libs两个依赖包

    [root@ubuntu app]# tar jxvf  extundelete-0.2.4.tar.bz2  
    [root@ubuntu app]# cd extundelete-0.2.4  
    [root@ubuntu extundelete-0.2.4]# ./configure 
    [root@ubuntu extundelete-0.2.4]# make  
     [root@ubuntu extundelete-0.2.4]# make install 
    

    安装完成后可执行 extundelete --help 查看相关命令

    1. 模拟实战
      数据删除后,第一时间要做的是卸载被删除数据所在的磁盘或磁盘分区。避免再次写入数据
      恢复步骤如下

    0.环境模拟

    [root@ubunutu ~]# mkdir /data  
    [root@ubunutu ~]# mkfs.ext4 /dev/sdb  
    [root@ubunutu ~]# mount /dev/sdb  /data  
    [root@ubunutu ~]# mkdir del_test_files //然后往这个文件放一些测试文件和目录
    [root@ubunutu ~]# cp -r del_test_files /data
    [root@ubunutu data]# rm -rf /data/*
    

    1.卸载误删文件所在的分区

    df -T //查看文件系统类型
    df -h //查看分区
    umount /dev/sdb  // 卸载分区
    

    2.使用extundelete 进行数据恢复

    //查询/dev/sdb分区可恢复的数据信息
    [root@ubuntu /]# extundelete  /dev/sdb  --inode 2  
      ......  
      File name                                       | Inode number | Deleted status    
      .                                                 2
      ..                                                2
      lost+found                                        11             Deleted
      del_test_files                                    131073         Deleted
    

    可以通过inode号,文件路径恢复数据

    extundelete /dev/sdb --restore-inode inode号
    extundelete /dev/sdb --restore-file 文件名
    extundelete /dev/sdb --restore-file 路径 //这个路径是文件的相对路径。相对路径是相对于原来文件的存储路径而言的,比如,原来文件的存储路径是/data/test.txt,那么在参数 后面直接指定test.txt文件即可,如果原来文件的存储路径是/data/test/test.txt,那么在参数后面通过“test /mytest.txt”指定即可
    
    

    恢复一个目录及目录下的文件

    root@ubuntu:/home/fy# extundelete  /dev/sdb  --restore-directory /del_test_files
    NOTICE: Extended attributes are not restored.
    Loading filesystem metadata ... 64 groups loaded.
    Loading journal descriptors ... 99 descriptors loaded.
    Searching for recoverable inodes in directory /del_test_files ... 
    13 recoverable inodes found.
    Looking through the directory structure for deleted files ... 
    2 recoverable inodes still lost.
    

    恢复一个文件

    root@ubuntu:/home/fy# extundelete  /dev/sdb  --restore-file 1.txt
    NOTICE: Extended attributes are not restored.
    Loading filesystem metadata ... 64 groups loaded.
    Loading journal descriptors ... 99 descriptors loaded.
    Successfully restored file 1.txt
    

    恢复所有文件

    extundelete /dev/sdb --restore-all--restore-all
    

    执行后会在执行当期目录生成一个RECOVERED_FILES目录,里面包含已恢复的文件

    ![IMAGE](quiver-image-url/4A6ECBC74F654C2FBBD26C9733B9F1C7.jpg =397x37)
    成功恢复

    删库的避免方法 - 自建回收站

    alias rm=trash
    alias rl='ls ~/.Trash'
    alias ur=undelfile
    undelfile()  
    {
      mv -i ~/.Trash/$@ ./
    }
    trash()  
    {
      path=`cd ./ ;pwd -P`
      mkdir -p ~/.Trash/$path
      mv $@ ~/.Trash/$path
    }
    cleartrash()  
    {
        read -p "Clear trash?[n]" confirm
        [ $confirm == 'y' ] || [ $confirm == 'Y' ]  && /usr/bin/rm -rf ~/.Trash/*
    }
    
  • 相关阅读:
    @Value映射到静态属性
    使用RestTemplateBuilder来实例化RestTemplate对象
    数组转String
    Springboot中mybatis配置
    pagehelper配置 多数据源自动切换数据库方言 mysql/sqlserver/oracle等数据库
    SpringBoot调用mybatis-config.xml的方法
    单元测试中模拟mvc测试对象MockMvc
    获取请求体中图片的二进制流直接解析成图片
    zk保证定时任务集群部署时单个节点执行
    Spring框架:BeanFactory容器
  • 原文地址:https://www.cnblogs.com/s42-/p/15330803.html
Copyright © 2011-2022 走看看