• ubuntu20 extundelete 不能工作


    如果你也遇到了相同的问题,该贴不能帮你解决问题, 书写该贴的目的是记录一下我走得弯路,

    当我走了很长的路,竟然发现此路不通,过程也让人很有收获,待我有空再找到解决问题的方法。

    头昏脑胀的我,在根目录下执行了rm* 命令。

    这是一个危险的操作,地点不对。
    我在根目录频繁得执行着自己的操作
    ls, rm report*
    终于敲得着急, rm *了, 然后提示我:

    无法删除 ...  是一个目录
    无法删除 ...  是一个目录
    除了目录没有删除, 其它文件全删除了!

    定睛一看,原来是敲错了命令,方知不该在根目录下操作,在这里删除的文件是很难恢复的。
    你需要找一个安全的可mount, unmount的磁盘, 当你误删时,才可以恢复回来!

    现在来看看ubuntu 下的 undelete 操作。
    分区类型 83 linux (fdisk -l)
    df -T 查看为ext4型
    lsblk  //常用命令

    需要使用extundelete 工具
    这个适用于ext3和ext4两种文件类型
    这个工具的源代码位于:https://github.com/cherojeong/extundelete
    用 apt install extundelete轻易解决。

    extundelete 的使用:
    1. 卸载磁盘
    sudo umount <磁盘>
    <磁盘>可以写/dev/xxx, 或者你的mount点
    常见的问题:
    umount: /xxx: target is busy.

    lsof /xxx 可以看到是谁占用了磁盘,然后把他们关掉即可。

    2. 使用
    extundelete [options] device-file
    device-file 就是磁盘, 选项就是你想要的操作。
    例如:
    sudo extundelete /dev/sda2

    这个工具的使用我忙活了半天,最终不能在ubuntu20上恢复ext4 文件系统, 但ext3 可以,留此记录,以后有空再研究。
    曾怀疑难道是依赖不对? 进行了源码安装。遇到了配置错误和编译错误,均已解决。 其中要下载补丁才能通过就是shit.找不到答案会无从下手。

    配置错误:
    $ ./configure
    Configuring extundelete 0.2.4
    configure: error: Can't find ext2fs library
    解决方法:
    $ apt-cache search ext2fs        //查看后, 装下边这个库
    $ sudo apt install libext2fs-dev

    编译错误
    $ make
    insertionops.cc: In function ‘std::ostream& operator<<(std::ostream&, const ext2_inode&)’:
    insertionops.cc:36:36: error: ‘const struct ext2_inode’ has no member named ‘i_dir_acl’; did you mean ‘i_file_acl’?
       36 |   os << "Directory ACL: " << inode.i_dir_acl << std::endl;
          |                                    ^~~~~~~~~

    解决方法:
    这下shit了, 代码编译不过去, 查网,发现有人给出办法, 需要下载补丁!

    wget https://sourceforge.net/p/extundelete/tickets/5/attachment/extundelete-0.2.4-e2fsprogs.patch.txt
    patch -p1<extundelete-0.2.4-e2fsprogs.patch.txt
    ./configure
    sudo make && make install


    验证:
    $ extundelete -v
    extundelete version 0.2.4
    libext2fs version 1.45.5
    Processor is little endian.


    工具使用:
    由于根目录的ino 总是2, 用ls -id . 查看,所以
    $ extundelete /dev/sda2 --inode 2
    以/dev/sda2 为例 列出根文件信息。
    ext3 可以列出文件信息,但只能列出存在的文件信息,列不出删除的文件信息
    ext4 什么都列不出, 估计ubuntu 下又要进行什么补丁操作了,网上的文章都是人云亦云不得要领,您要是知道方法,请不吝赐教。

    列出根目录
    $ extundelete /dev/sda2 --inode 2
    File name                                       | Inode number | Deleted status
    .                                                 2
    ..                                                2
    lost+found                                        11
    1.txt                                             73729
    2.txt                                             73730
    3.txt                                             73731
    libmalloc_preload.so                              73732
    log.txt                                           73733
    report-2022-07-02_08:53:26.txt                    73734
    sort.sh                                           73735
    bin                                               9650177

    列出bin目录
    $ extundelete /dev/sda2 --inode 9650177
    File name                                       | Inode number | Deleted status
    .                                                 9650177
    ..                                                2
    memwatch                                          9650178
    myget.sh                                          9650180

    后面恢复文件恢复目录就无从谈起了,
    难道是ubuntu20 加强了删除动作真把文件删除了, 或者是journal 出了问题?
    解决这个问题,或者有人给出答案,或者阅读代码, 留待以后有空再研究了。
    如果你强行执行恢复操作也不会成功。
    例如:
    $ extundelete /dev/sda2 --restore-file 4.txt
    Failed to restore file 4.txt
    Could not find correct inode number past inode 2.
    Try altering the filename to one of the entries listed below.
    File name                                       | Inode number | Deleted status
    .                                                 2
    ..                                                2
    lost+found                                        11
    1.txt                                             73729
    2.txt                                             73730
    3.txt                                             73731
    libmalloc_preload.so                              73732
    log.txt                                           73733
    report-2022-07-02_08:53:26.txt                    73734
    sort.sh                                           73735
    bin                                               9650177

    防止 rm * 的操作, 只能找一个安全的目录, 允许rm *, 不要把重要文件放到这里就可以了。

  • 相关阅读:
    Cy7-NH2/amine氨基修饰荧光染料
    Eureka Server 实现在线扩容
    电脑办公中的函数包含哪些
    贪心算法之哈夫曼编码
    Java对URL中字符串进行编码
    Java多线程wait()和notify()方法图解
    银行双活数据中心建设项目实践
    C语言基础Day7-结构体
    Windows环境MySQL8忘记密码文件解决方案
    session会话跟踪技术--尚硅谷(27、28)
  • 原文地址:https://blog.csdn.net/hejinjing_tom_com/article/details/125571674