Linuxはlsof/extundeleteツールを使用して、誤って削除されたファイルやディレクトリを復元します。

Linuxはlsof/extundeleteツールを使用して、誤って削除されたファイルやディレクトリを復元します。

序文

Linux には Windows のような目立つごみ箱がないため、簡単に復元することはできません。

Linux でファイルを削除した後に復元できる状況は 2 つあります。1 つは削除後にプロセス内に削除情報が存在する場合、もう 1 つは削除後にプロセスが見つからず、ツールの助けを借りてのみ復元できる場合です。検査と紹介はこちら

1. 誤ってファイルを削除するプロセスがまだ存在する状況。

これは通常、継続的な標準入力または標準出力を持つアクティブなプロセスがある場合に発生します。ファイルが削除されても、プロセス PID は依然として存在します。このため、一部のサーバーでは一部のファイルが削除されてもディスクは解放されません。たとえば、現在の例:

シェル ターミナルを使用して、テスト ファイルに cat を追加します。

[root@21yunwei_backup ~]# echo "hello py" > testdelete.py
[root@21yunwei_backup ~]# cat >> testdelete.py 
こんにちは削除

このファイルを別の端末で表示すると、内容が明確に表示されます。

[root@21yunwei_backup ~]# cat testdelete.py 
こんにちは、パイ
こんにちは削除

この時点で、現在のサーバー上のファイルrm -f ./testdelete.pyを削除します。

このディレクトリを確認するコマンドです。ファイルはもう存在しないので、復元します。

1. lsof を使用して、削除されたファイル プロセスがまだ存在するかどうかを確認します。ここでは lsof コマンドを使用します。インストールされていない場合は、yum または apt-get でインストールしてください。同様の状況では、まず lsof を使用して、削除されたファイルがまだ存在するかどうかを確認できます。

[root@21yunwei_backup ~]# lsof | grep 削除済み
mysqld 1512 mysql 5u REG 252,3 0 6312397 /tmp/ibzW3Lot (削除済み)
cat 20464 root 1w REG 252,3 23 1310722 /root/testdelete.py (削除済み)

幸いなことに、この場合はプロセスがまだ存在するので、回復操作を開始します。

2. 回復。

復元コマンド:

cp /proc/pid/fd/1 /指定されたディレクトリ/ファイル名

現在の状況のプロセス ディレクトリ (通常は /proc/pid/fd/) を入力します。

[root@21yunwei_backup ~]# cd /proc/20464/fd
[root@21yunwei_backup fd]# ll
合計 0
lrwx------ 1 ルート ルート 64 11月15日 18:12 0 > /dev/pts/1
l-wx------ 1 root root 64 11月15日 18:12 1 > /root/testdelete.py (削除済み)
lrwx------ 1 ルート ルート 64 11月15日 18:12 2 > /dev/pts/1

回復作戦:

cp 1 /tmp/testdelete.py

ファイルを表示:

[root@21yunwei_backup fd]# cat /tmp/testdelete.py
こんにちは、パイ
こんにちは削除

回復が完了しました。

第二に、誤って削除されたファイルプロセスは存在しなくなり、ツールの助けを借りて復元できます。

削除するディレクトリを作成し、その内容を含むファイルをエコーし​​ます。

[root@21yunwei_backup 21yunwei]# ツリー
。
├── 削除テスト
│ └── メール
│ └── テスト.py
├── 失われたもの+見つかったもの
└── パスワード
 
3 つのディレクトリ、2 つのファイル
[root@21yunwei_backup 21yunwei]# cat /21yunwei/deletetest/mail/test.py 
こんにちはDJ
[root@21yunwei_backup 21yunwei]# テール -2 パスワード 
haproxy:x:500:502::/home/haproxy:/bin/bash
tcpdump:x:72:72::/:/sbin/nologin

削除操作を実行するには:

[root@21yunwei_backup 21yunwei]# rm -rf ./*
[root@21yunwei_backup 21yunwei]# ll
合計 0

誤って削除したファイルの復元を開始します。この状況は通常、デーモンまたはバックグラウンド プロセスが継続的に入力していない場合に発生し、削除されて lsof がそれを認識できなくなります。ツールを使用する必要があります。ここで使用するツールは、サードパーティ製のツールである extundelete です。回復手順は次のとおりです。

1. inode が上書きされないように、現在のパーティションでのすべての操作を停止します。 inode が上書きされると、基本的にサイクリングは完了です。たとえば、パーティションのサービスを停止したり、ディレクトリが配置されているデバイスをアンインストールしたり、必要に応じてネットワークから切断したりできます。

2. サードパーティ製ソフトウェアの回復失敗によるデータ損失を防ぐために、dd コマンドを使用して現在のパーティションをバックアップします。データが非常に重要な状況に適しています。このテストではバックアップはありません。バックアップが必要な場合は、次の方法を検討できます。

dd if=/path/filename of=/dev/vdc1

3. umount コマンドを使用して、現在のデバイス パーティションをアンインストールします。または、fuser コマンド。

umount /dev/vdb1 または umount /21yunwei

デバイスがビジー状態の場合は、fuser コマンドを使用してアンインストールを強制することができます: fuser -m -v -i -k /21yunwei

4. サードパーティのツール extundelete をダウンロードしてインストールし、誤って削除されたファイルを検索して復元します。

http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 で実行します。
tar jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4
./configure 
作る
インストールする

誤って削除されたファイルをスキャンします:

[root@21yunwei_backup extundelete-0.2.4]# extundelete --inode 2 /dev/vdb1
注意: 拡張属性は復元されません。
ファイルシステムのメタデータを読み込んでいます... 8 つのグループが読み込まれました。
グループ: 0
inode 2の内容:
 
。
.N 行を省略 ファイル名 | Inode 番号 | 削除ステータス
. 2
.. 2
紛失+発見 11 削除済み
deletetest 12 削除されました
パスワード 14 削除
 

スキャンにより削除したフォルダーが見つかったので、回復操作を実行します。

(1)単一ファイルのパスワードを復元する

[root@21yunwei_backup /]# extundelete /dev/vdb1 --restore-file パスワード  
注意: 拡張属性は復元されません。
ファイルシステムのメタデータを読み込んでいます... 8 つのグループが読み込まれました。
ジャーナル記述子を読み込んでいます... 46 個の記述子が読み込まれました。
ファイルpasswdが正常に復元されました
 

復元されたファイルは現在のディレクトリ RECOVERED_FILES に配置されます。

復元されたファイルを表示します:

[root@21yunwei_backup /]# tail -5 回復したファイル/passwd 
mysql:x:497:500::/home/mysql:/bin/false
nginx:x:496:501::/home/nginx:/sbin/nologin
zabbix:x:495:497:Zabbix 監視システム:/var/lib/zabbix:/sbin/nologin
haproxy:x:500:502::/home/haproxy:/bin/bash
tcpdump:x:72:72::/:/sbin/nologin

(2)ディレクトリの復元deletetest

[root@21yunwei_backup /]# extundelete /dev/vdb1 --restore-directory deletetest 
注意: 拡張属性は復元されません。
ファイルシステムのメタデータを読み込んでいます... 8 つのグループが読み込まれました。
ジャーナル記述子を読み込んでいます... 46 個の記述子が読み込まれました。
ディレクトリ deletetest 内の回復可能な inode を検索しています... 
回復可能な i ノードが 5 つ見つかりました。
削除されたファイルのディレクトリ構造を調べています... 
[root@21yunwei_backup /]# cat RECOVERED_FILES/deletetest/mail/test.py 
こんにちはDJ

(3)すべてを復元する

[root@21yunwei_backup /]# /dev/vdb1 を消去 --restore-all
注意: 拡張属性は復元されません。
ファイルシステムのメタデータを読み込んでいます... 8 つのグループが読み込まれました。
ジャーナル記述子を読み込んでいます... 46 個の記述子が読み込まれました。
ディレクトリ / ... 内の回復可能な inode を検索しています。 
回復可能な i ノードが 5 つ見つかりました。
削除されたファイルのディレクトリ構造を調べています... 
回復可能な inode はまだ 0 個失われています。 
[root@21yunwei_backup /]# cd RECOVERED_FILES/
[root@21yunwei_backup 回復されたファイル]# ツリー
。
├── 削除テスト
│ └── メール
│ └── テスト.py
└── パスワード
 
2 つのディレクトリ、2 つのファイル

(4)指定されたinodeを復元します。

[root@21yunwei_backup /]# /dev/vdb1 を extundelete --restore-inode 14 に変更します
注意: 拡張属性は復元されません。
ファイルシステムのメタデータを読み込んでいます... 8 つのグループが読み込まれました。
ジャーナル記述子を読み込んでいます... 46 個の記述子が読み込まれました。
[root@21yunwei_backup /]# 末尾 -5 /RECOVERED_FILES/file.14 
mysql:x:497:500::/home/mysql:/bin/false
nginx:x:496:501::/home/nginx:/sbin/nologin
zabbix:x:495:497:Zabbix 監視システム:/var/lib/zabbix:/sbin/nologin
haproxy:x:500:502::/home/haproxy:/bin/bash
tcpdump:x:72:72::/:/sbin/nologin

inode を復元する場合、復元されたファイル名は以前のものと異なるため、個別に名前を変更する必要があることに注意してください。内容は問題ありません。

extundelete の詳しい使用方法については、extundelete –help オプション パラメータの説明を参照してください。現在、すべての回復操作が完了しています。

要約する

Linux で lsof/extundelete ツールを使用して誤って削除されたファイルやディレクトリを復元する方法についての記事はこれで終わりです。Linux で誤って削除されたファイルやディレクトリを復元する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linuxで削除されたファイルを回復するためのlsofコマンドの詳細な説明
  • Linuxで誤ってパッケージを削除した例
  • Linux grub 起動時の暗号化と削除の回復方法
  • Linux環境でrmによって誤って削除されたファイルを回復する方法

<<:  6秒でMySQLに100万件のレコードを挿入する方法を教えます

>>:  vue3とvue2の利点の比較

推薦する

Nginxはドメイン名のアクセス方法を定義しています

最近Nginxを構築しているのですが、ドメイン名でアクセスできません。 nginx 構成ファイル n...

Ubuntu 14.04 で QT5 をインストール、設定、アンインストールするための詳細な手順

1. 以前 QT5.13 バージョンをダウンロードしましたが、インストール後、Qtcreator を...

スタックメニューを実装するためのjQueryプラグイン

jQueryプラグインの毎日の積み重ねメニュー、参考までに、具体的な内容は次のとおりです。スタックメ...

誰もが登録できるようにJiedaibaoを宣伝するにはどうすればよいでしょうか? ジエダイバオのプロモーション方法とスキル

借財宝は最近人気が出ている携帯電話ローンソフトウェアプラットフォームです。知人同士の貸し借りが特徴で...

vue-element-admin プロジェクトのインポートとエクスポートの実装

vue-element-admin インポートコンポーネントのカプセル化テンプレートとスタイルまず、...

Navicateを使用してAlibaba Cloud Server上のMySQLに接続する

1. まず、サーバーの mysql にアクセスして権限を変更します。 GRANT オプション付きで、...

VantフレームワークをWeChatアプレットに導入するプロセス全体の記録

序文WeChat ミニプログラムのネイティブ UI が少し物足りないと感じることがあるので、サードパ...

JavaScript でのカスタム スワイパー コンポーネントの詳細な説明

目次エフェクト表示コンポーネント設定ステップ1ステップ2ステップ3コンポーネントの使用ステップ1ステ...

完全バックアップとポイントインタイムバックアップにmysqldumpを使用する方法

Mysqldump は MySQL の論理バックアップに使用されます。高速ではありませんが、柔軟性が...

JavaScript で配列の変更を監視する方法

序文以前、defineProperty を紹介したとき、オブジェクトの変更のみを監視でき、配列の変更...

MySQLサーバーは--read-onlyオプションで実行されているため、このステートメントを実行できません

会議中に同僚から開発ライブラリを書き込めないとの報告を受けました。エラー メッセージは次のとおりでし...

LayUI+Shiroは動的なメニューを実装し、メニュー拡張の例を記憶します

目次1. Maven 依存関係2. メニュー関連クラス1. メインメニュー2. サブメニュー3. S...

HTML で #include ファイルを使用する例

a.htmとb.htmの2つのファイルがあります。同じディレクトリ内のa.htmの内容は次のとおりで...

React Nativeはモニタリングジェスチャーの上下プル効果を実現します

React Native は、プルアップとプルダウンの監視ジェスチャを実装します。詳細なコアコードは...