web-dev-qa-db-ja.com

月曜日の朝の間違い:Sudo rm -rf --no-preserve-root /

注意:この質問への回答とコメントには、外部メディアから多くの注目を集めているが、ある種のバイラルマーケティングスキームではデマの質問であることが判明した別の同様の質問のコンテンツが含まれています。このような方法でServerFaultが悪用されることは許可されていないため、元の質問は削除され、回答はこの質問にマージされました。


ここに面白い悲劇があります。今朝、次のコマンドを誤って実行したときに、運用サーバーで少しメンテナンスを行っていました。

Sudo rm -rf --no-preserve-root /mnt/hetznerbackup /

私は前に最後のスペースを見つけませんでした/とその数秒後、警告がコマンドラインにあふれてくると、自己破壊ボタンを押しただけだと気づきました。これが私の目に焼き付いたものの少しです:

rm: cannot remove `/mnt/hetznerbackup': Is a directory
rm: cannot remove `/sys/fs/ecryptfs/version': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/inode_readahead_blks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_max_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/delayed_allocation_blocks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/max_writeback_mb_bump': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stream_req': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_min_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stats': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/trigger_fs_error': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/session_write_kbytes': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/lifetime_write_kbytes': Operation not permitted
# and so on..

タスクを停止し、運用サービスがまだ実行中であることを発見したときは安心しました。 残念ながら、サーバーはSSH経由でユーザーの公開鍵またはパスワードを受け入れなくなります。

ここからどのように進めますか? SSHアクセスを取り戻すために、有刺鉄線の海を泳ぎます。

サーバーはUbuntu-12.04を実行しており、Hetznerでホストされています。

147
Jonas Nielsen

Hetznerが提供するレスキューシステムを起動して、どのようなダメージを与えたかを確認します。
ファイルを安全な場所に転送し、後でサーバーを再展開します。

それはあなたの場合に最良の解決策だと思います。

94
faker

実は?現時点では、これに対する簡単で簡単な自動修正はありません。データ復旧は科学であり、基本的な一般的なツールでさえ、誰かが座ってデータがそこにあることを確認する必要があります。大量のダウンタイムなしでこれから回復することを期待している場合、あなたは失望するでしょう。

Testdiskを使用することをお勧めしますorファイルシステム固有のリカバリツール。 1つのシステムを試し、それが機能するかどうかを確認します。プロセスを自動化する実際の方法はありませんbutおそらく注意深くバッチで実行できます。

とは言っても、質問とコメントには非常に恐ろしいことがいくつかあり、それはアクション後のレポートの一部となるはずです。

まず、最初にチェックせずにコマンドをどこでも実行しました。 1つのボックスでコマンドを実行します。それからいくつか、そしてもっと。基本的に何か問題が発生した場合、すべてのシステムではなくfewに影響を与える方が良いでしょう。

第二に

@Timサーバーにリモートドライブをマウントせずにバックアップを行う方法

私を怖がらせます。ファイルレベルの一方向バックアップは解決した問題です。 Rsyncを使用して、アクセス許可を保持し、ファイルをコピー一方向でバックアップサイトにコピーできます。誤って何か? rsyncを(できれば自動的に)再インストールすると、正常に動作します。将来的には、ファイルシステムレベルのスナップショットをbtrfsまたはzfsスナップショットと組み合わせて使用​​し、システムレベルのバックアップ用に出荷する可能性があります。実際にアプリケーションサーバー、データベース、ストレージを分離し、最小特権の原則を導入して、このようなリスクを分散できるようにします。

私にできることは何でも知っています。自分を守る方法を考える必要があります

何かが起こった後、これを検討する最悪の時期です。

これから何を学ぶことができますか?

  1. バックアップはデータを保存します。おそらくキャリア。
  2. あなたがツールを持っていて、それが何をすることができるか知らないならば、それは危険です。ジェディはライトセーバーで素晴らしいことをすることができます。ライトセーバーを備えたチンパンジーが一杯...乱雑になるでしょう。
  3. どこでも一度にコマンドを実行しないでください。テストマシンと生産マシンを分離し、できれば段階的に生産マシンを実行します。 100や1000ではなく、1か10のマシンを修正する方が良いです。

  4. ダブルおよびトリプルチェックコマンド。同僚に「ドライブをddしようとしているのですが、これをチェックして、ドライブをワイプしないようにすることはできますか?」ラッパーも役立つかもしれませんが、それほど疲れていない目を打ち負かすものはありません。

あなたは今何ができますか?顧客にメールを送ります。ダウンタイムがあり、致命的な障害があることを知らせます。上層部、法務、売上高などと話し、被害を軽減する方法を確認してください。回復の計画を開始し、必要に応じて、せいぜい、余分な手を雇う必要があります。最悪の場合、回復に多くのお金を費やすことを計画します。この段階では、技術的な修正だけでなく、フォールアウトの緩和にも取り組みます。

222
Journeyman Geek

rm -rf --no-preserve-rootを使ってデータを削除すると、回復するのはほぼ不可能になります。重要なファイルをすべて紛失した可能性があります。

@ fakerが彼の回答で述べたように、最善の方法は、ファイルを安全な場所に転送し、後でサーバーを再デプロイすることです。

今後、同様の状況を回避するために、次のことをお勧めします。

  • 毎週、または少なくとも隔週でバックアップを作成します。これは、影響を受けるサービスを最小限のMTTRでバックアップするのに役立ちます。

  • 不要な場合はrootとして機能しません。そしてalways何かをする前によく考えます。 safe-rm もインストールすることをお勧めします。

  • そのため、--no-preserve-root--permission-to-kill-kittens-explicitly-grantedなど、呼び出すつもりのないオプションを入力しないでください。

92
Amal Murali

同じ問題が発生しましたが、ハードドライブでテストしただけですべてが失われました。役に立つかどうかはわかりませんが、何もインストールしないでくださいデータを上書きしないでください、ハードドライブをマウントしてフォレンジックを起動する必要があります私たちのような剖検、photorec、Testdiskなどのツール。

Testdiskを強くお勧めします。いくつかの基本的なコマンドを使用すると、上書きしなかった場合にデータを回復できます。

47
Octo

このような問題を修正する最善の方法は、最初から問題を解決しないことです。

引数リストにスラッシュがある「rm -rf」コマンドを手動で入力しないでください。 (このようなコマンドをシェルスクリプトに入れて、非常に優れた検証/正気ルーチンを使用して、愚かなことをしないように保護することは異なります。)

しないでください。
これまで。あなたがそれをする必要があると思うなら、あなたは十分に一生懸命考えていません。

代わりに、作業ディレクトリを、削除を開始する予定のディレクトリの親に変更して、rmコマンドのターゲットにスラッシュが不要になるようにします。

cd/mnt

Sudo rm -rf hetznerbackup

33
Monty Harder

すべてのコピーが保存されているバックアップマシンを復元しようとしました。

  • 最初のステップ-この消去された「バックアップマシン」ドライブのバックアップをddコマンドで作成します。
  • 2番目のステップ- testdisk を使用してファイルを復元します。

したがって、1 TBを回復したいとします。バックアップ用に1 TB(第1ステップ)と回復用に1 TB(第2ステップ)を追加した2 TBが必要になります。

私はエイリアスrm -fr [phone rang]で同様のミスをし、貴重なディレクトリにcdしました。今、私はいつも二回考え、rmまたはddコマンドを使用する前に数回再確認します。

16
Abc Xyz

別の回答で述べたように、Hetznerにはレスキューシステムがあります。 sshアクセスのあるネットブートオプションと、Javaアプレットの両方で、vserverの画面とキーボードを提供します。

可能な限り回復したい場合は、サーバーを再起動してネットブートシステムに入れ、ログインし、適切なデバイスiノードから読み取ってファイルシステムのイメージをダウンロードします。

私はこのようなものがうまくいくと思います:

ssh root@Host cat /dev/sda > server.img

もちろん、リダイレクトはsshコマンドが呼び出される前にシェルによって行われるため、server.imgはローカルファイルです。ディスク全体ではなくルートファイルシステムのみが必要な場合は、sdasda3に置き換えてください。

7
kasperd

ここからどのように進めますか?

私は一生rmを使うことを断言し、trash-cliがnixシステムのデフォルトの削除コマンドではないのは狂気だと思います。

https://github.com/andreafrancia/trash-cli

新しいシステムに最初にインストールするものであることを確認し、alias rmを代わりにtrash-cliを使用するように指示します。また、実際に/bin/rmを実行するが、ほとんどの場合は使用しないように指示する別のエイリアスに関するメモも含まれます。

:( 実話

2
Gerry

このような場合は、マウント解除して debugfs を使用することをお勧めします。 lsdel を使用すると、最近削除されたすべてのファイルをリストできます。ジャーナルからクリーンアップし、 dump 必要なファイル。同じものの高速検索リンク: http://www.linuxvoodoo.com/resources/howtos/debugfs

それが誰かを助けることを願っています。 ;)

そしてはい、提案の1つはスクリプトを作成することです。これは、連数 rm real.rmおよびsymlinc mvに移動しましたから rm ;)

1
BiG_NoBoDy