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の利点の比較

推薦する

Docker で Portainer ビジュアル インターフェースを構築するための詳細な手順

前回述べた問題を解決するために、オンラインで検索したところ、非常に優れたビジュアル インターフェース...

ページネーションの例とベストプラクティス

<br />構造と階層により複雑さが軽減され、読みやすさが向上します。記事やサイトが整理...

MySQL 5.7.18 でパスワードを変更する方法

MySQL 5.7.18 でパスワードを変更する方法: 1. まずMySQLサーバーをシャットダウン...

MYSQL の解凍版における中国語の文字化け問題の解決方法

MYSQLの解凍バージョンがインストールされます1: 解凍後、my.ini ファイルをコピーし、バイ...

Nginx リクエスト制限の設定方法

Nginx は、多くの優れた機能を備えた強力で高性能な Web およびリバース プロキシ サーバーで...

CSS でフロートをクリアするための完全ガイド (要約)

1. 親divは疑似クラスafterとzoomを定義します <スタイル タイプ="...

Linuxはデータディスクがアンインストールされ、新しいカスタムイメージを作成できることを確認します。

カスタムイメージに関するよくある質問データディスクを表示するにはどうすればいいですか? df コマン...

Windows 10 での MySQL 5.7.21 winx64 のインストールと設定方法のグラフィック チュートリアル

mysql 5.7.21 winx64 のインストールと設定方法: MySQLのコミュニティバージョ...

div が contentEditable=true に設定されている場合、コンテンツをリセットした後にカーソルを配置することはできません。

最近、絵文字にコメントする機能が必要なコメント機能に取り組んでいたため、 contentEditab...

Linux サーバーで MySQL リモート接続を有効にする方法

序文以前の非MKレコードを再編成するためのMySQLの学習説明する有効になっていない場合、データベー...

パスワードログインなしのLinux構成スタンドアロンおよびフルディストリビューションの詳細なチュートリアル

目次1: 単一マシンのパスワードフリーログイン構成1. 仮想マシンのホスト名を設定する2. 仮想マシ...

CSS ポインターイベント属性の使用に関する詳細な説明

フロントエンド開発では、ユーザーと直接やり取りするため、ユーザーが操作がスムーズで快適だと感じ、ネイ...

Linux SSHポートを転送する3つの方法

ssh は私が最も頻繁に使用する 2 つのコマンドライン ツールのうちの 1 つです (もう 1 つ...

Vue要素と多言語切り替えの詳細な説明

目次序文複数の言語を切り替えるにはどうすればいいですか? 1. vue-i18nパッケージをインスト...

一般的なメールボックスで正常に表示できる HTML メールを作成するためのヒント

HTML メールを送信するためのヒント: スタイルを使用してインライン CSS を記述する、使用する...