ここでは、CentOS 7 を例として、誤って削除したデータをすばやく復元するためのオープンソースツールである Extundelete の使い方を紹介します。

概要

作業中に、データを誤って削除してしまうことがあります。 この場合、データをすばやく効果的に復元するにはどうしたらよいでしょうか。 Alibaba Cloud には、以下に示す例のように、データを復元する方法がいくつかあります。

debugfs、R-Linux、ext3grep、Extundelete など、Linux 用のさまざまなオープンソースデータリカバリツールがあります。 その中で、ext3grep と Extundelete が一般的に使用されています。 どちらのツールも同じリカバリ手法を採用していますが、Extundelete の方が強力です。

Extundelete は、Linux ベースのオープンソースのデータリカバリソフトウェアです。 Linux インスタンスを使用する場合、Linux にはごみ箱がないため、誤って削除したデータをすばやく復元するためにこのツールを手軽にインストールできます。

Extundelete は、inode 情報とログを組み合わせることによって inode ブロックの位置を特定し、目的のデータを検索して復元できます。 この強力なツールは、ext3 および ext4 デュアルフォーマットパーティションのディスク全体の復元をサポートします。

誤ってデータを削除してしまった場合は、まず削除したデータを含むディスクまたはディスクパーティションのマウントを解除する必要があります。 これは、ファイルが削除された後、実際のファイルはまだディスクに保存されているのに、そのファイルの inode ポインタだけがゼロに設定されるためです。 ディスクが読み書きモードでマウントされている場合、削除されたファイルのデータブロックは、オペレーティングシステムによって再割り当てされる可能性があります。 データブロックが新しいデータで上書きされると、元のデータは完全に失われ、決して復元することはできません。 したがって、ディスクを読み取り専用モードでマウントすると、データがブロック単位で上書きされるリスクを減らすことができるため、データを正常に復元する可能性が高くなります。
オンライン復元プロセス中に、削除されたファイルがあるディスクに Extundelete をインストールしないでください。 インストールすると、復元するデータが上書きされる可能性があります。 操作の前にスナップショットを取ってディスクをバックアップすることを忘れないでください。

対象ユーザー

  • 誤ってディスク上のファイルを削除し、削除後にディスク上で書き込み操作を行っていないユーザー。
  • Web サイトのトラフィックが少なく、ECS インスタンスをほとんど持っていないユーザー。

手順

ソフトウェアリリース: e2fsprogs-devel e2fsprogs gcc-c++ make (コンパイラおよびそれ以上) Extundelete-0.2.4。
Extundelete の通常の操作には、libext2fs 1.39 以上が必要です。 ただし、ext4 をサポートするには、e2fsprogs 1.41 以上が備わっていることを確認します (コマンド dumpe2fs を実行して、バージョン出力を確認することができます )。

このページが書かれている時点で利用可能なのは、上記のリリースです。 お客様の手元には、違うものがダウンロードされているかもしれません。

  • Extundelete のデプロイ

    wget  http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2
    yum -y install  bzip2  e2fsprogs-devel  e2fsprogs  gcc-c++  make    #Install related dependencies and libraries
    tar -xvjf extundelete-0.2.4.tar.bz2
    cd extundelete-0.2.4                                #Enter the program directory
    ./configure                                         #Installed successfully as shown below
    make && make install

    この時点で、src ディレクトリが表示されます。 Extundelete 実行可能ファイルと対応するパスが含まれています。 以下のように、デフォルトのファイルが "usr/local/bin" にインストールされ、次のデモは "usr/local/bin" ディレクトリに作成されます。

  • ファイルを削除し、Extundelete を使って復元します。

    1. ECS インスタンスの使用可能なディスクとパーティションを確認し、次に /dev/vdb パーティションをフォーマットしてパーティション分割します。 フォーマットとパーティションの詳細は、「データディスクの形式とマウント」をご参照ください。
      fdisk -l
    2. パーティションに分割されたディスクを "/zhuyun" ディレクトリ配下にマウントしてから、"hello" という名前のファイルを作成します。
      mkdir /zhuyun                              #Create the zhuyun directory.
      mount /dev/vdb1 /zhuyun                     #Mount the disk under the zhuyun directory.
      echo test > hello                           #Create a test file.
    3. md5sum コマンドを実行してファイルの MD5 値を生成し、書き留めます。 削除前と削除後のファイルの MD5 値 を比較して、ファイルの整合性を確認できます。
      md5sum hello
    4. "hello" ファイルを削除します。
      rm -rf hello
      cd ~
      fuser -k /zhuyun                    #Terminate the process tree that uses a certain partition (skip this if you are sure that no resources are occupied).
    5. データディスクのマウントを解除します
      umount /dev/vdb1                     #Before using any file restoration tool, unmount or mount the partitions to be restored in read-only mode to prevent their data from being overwritten.
    6. Extundelete を使用してファイルを復元します。
      extundelete --inode 2 /dev/vdb1    #Query the contents in a certain inode. ”2” を使用するとは、パーティション全体を検索するということです。 ディレクトリを検索するには、inode とディレクトリを指定するだけです。 これで、削除したファイルと inode を確認できます。
      /usr/local/bin/extundelete  --restore-inode 12  /dev/vdb1    #Restore the deleted file.

      この時点で、RECOVERED_FILES ディレクトリが、コマンドが実行されたディレクトリ配下に表示されます。 ファイルが復元されたかどうかを確認します。

      削除前と削除後のファイルの MD5 値を確認します。 MD5 値が同じであれば、復元は成功です。

      --restore-inode 12                   # --restore-inode Restore by the specified inode.
      --extundelete --restore-all         # --restore-all   Restore all.