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


146

注:この質問への回答とコメントには、外部メディアから多くの注目を集めているが、ある種のバイラルマーケティングスキームではデマの質問であることが判明した別の同様の質問のコンテンツが含まれています。このような方法で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でホストされています。


48
バックアップから復元します。正直なところ、これはそうした簡単な後退シナリオの1つです。
MadHatter 14

310
どうやって--no-preserve-root誤って入力するのですか?!:-o
ThatGraemeGuy 14

144
Greame、キーは隣同士のようです。
MadHatter 14

38
火曜日の仕事:新しい仕事を探してください;)バックアップが必要な理由のレッスンとして受けてください。
トムトム14

43
これは確かに私にとってトローリングのようです。誤って--i-really-mean-delete-my-whole-rootと入力することはできません。
psusi

回答:


95

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

それがあなたの場合の最善の解決策だと思います。


102
明るい面を見てください、少なくとも彼は心血に問題はありません!
メタコム14

222

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

testdisk またはファイルシステム固有の回復ツールを使用することをお勧めします。1つのシステムを試して、それが機能するかどうかなどを確認します。そこのプロセスを自動化する本当の方法はませんが、あなたはおそらくすることができます慎重にバッチでそれを行います。

とはいえ、質問やコメントには、アクション後のレポートに含めるべき非常に恐ろしいものがいくつかあります。

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

第二に

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

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

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

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

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

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

  4. ダブルおよびトリプルチェックコマンド。同僚にダブルチェックを依頼するのは恥ずかしくない。ラッパーも役立つかもしれませんが、それほど疲れない目を打つものはありません。

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


9
@MarcoMarsala rsyncを使用する前に何かをマウントした場合、正しく実行していませんでした。ssh経由でrsyncを使用する必要があります。
マイケルハンプトン

67
この素晴らしい答えに、コンピューターから離れてください。落ち着くまで何も直そうとしないでください。あなたはすでに深刻なダウンタイムを見ています。(dd上記の問題のように)システムをさらに破壊するのではなく、物事を考える時間をとっても、事態は悪化しません。
ジェニーD

22
コマンドが実際に実行された理由は何ですか?$fooとの$bar両方が未定義の場合rm -rf /--no-preserve-rootメッセージでエラーが発生しているはずです。これがCentOS7マシンで実際に動作したと考えることができる唯一の方法は$bar評価された場合*であるので、実行されたものはそうでしたrm -rf /*
テルドン

9
「偶然何か」の文体が大好きです。これは、「削除」という言葉が誤って「削除」または「削除」されたことを意味するに違いありません。
-sehe

20
あなたは今の有名なているだけでなく、少なくとも@MarcoMarsala independent.co.uk/life-style/gadgets-and-tech/news/...
マーティン・スミス

92

を使用してアイテムを削除するとrm -rf --no-preserve-root、回復することはほぼ不可能です。すべての重要なファイルを失った可能性が非常に高いです。

@fakerが答えで言ったように、最善のアクションは、ファイルを安全な場所に転送し、その後サーバーを再展開することです。

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

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

  • 不要なときはrootとして働いてはいけません。そして、何かをする前に常によく考えてください。safe-rmもインストールすることをお勧めします。

  • あなたが呼び出すために意図していないオプションは入力しないでくださいように、--no-preserve-rootまたは--permission-to-kill-kittens-explicitly-grantedそのことについては、。


18
同様に、本当にそれを意味するのでなければ、に--please-destroy-my-driveパラメーターを追加しないでくださいhdparm
MikeyB 14

3
追加したいと思います。「rootとして作業するときに引数(およびオプション)をトリプルチェックする」、「CurrentWorkingDirectoryをチェックする(rm -rf *などを行う前に)」、「コマンドにフルパスを使用する($ PATHで中継しない)。
バールドコッペルド14

47

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

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


8
可能な場合はストレージをオフラインにし、可能な場合は「読み取り専用」として再マウントすることをお勧めします。ライブディスクまたは別のサーバーインスタンスであるかどうか。
mhouston100

2
安全のために、元のディスクの読み取り専用マウントから新しいディスクへの元のディスクのddビットコピーを行うことも考えています。
ジム

3
«これらのツールはファイル名とパスを復元しません»はい、あります。上記の3つのツールのうち、1つ(Photorec)のみが彫刻を実行します。
アンドレア

34

このような問題を修正する最善の方法は、そもそもそれを持たないことです。

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

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

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

cd / mnt

sudo rm -rf hetznerbackup


31
常に引数リストの最後に-rfを追加していrm /bla/foo/bar -rfます。少なくともそのようにすれば、rm /パーツを入力した後に不意にReturnキーを押しても、それほど問題になりません。
ジェンズティマーマン

5
同様に、「*〜」ファイルを削除するときは、最初にチルダを入力し、次にアスタリスクを追加します。
tekknolagi 14

4
したがって、現在のディレクトリにあるすべてのものよりもむしろあなたの家を削除したいのですか?!?
greg0ire

@ greg0ireいいえ、彼が言いたかったのは、その中で/mnt/hetznerbackup、フォルダ内のすべてをマークするには「/」を使用しなければならなかったと思います。しかし、親からhetznerbackupは、スラッシュなしで十分です。
T.Todua

1
@tazotodua:私はtekknolagiさんのコメントに言及していた
greg0ire

16

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

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

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

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


6
そうすることで、ディスクをほぼゼロにしました。それは真剣に回復するのを非常に難しくします。OPがtestdiskを使用し、最初に回復することを提案した正当な理由があります。ddの構文は少し奇妙な場合がありますが、それはコマンドを実行する前に二重および三重チェックする正当な理由です。サーバーを1つだけ消去しましたか?
ジャーニーマンオタク

1
あなたはまだ回復することができddます、あなたがあなたの最後のチャンスを消すことを許した期間に依存します。
Abc Xyz

129
それを言って申し訳ありませんが、私はこの質問に巨大なトロルを感じます
...-tymik

3
答えに小さなトロルを感じることを願っています:)
Abc Xyz

5
正直に言うと。あなたが本物かどうかわかりません。もしそうなら、あなたはおそらく間違った仕事にいます
...-左ケース

7

別の回答で述べたように、ヘッツナーには救助システムがあります。これには、sshアクセスを備えたnetbootオプションと、vserverの画面とキーボードを提供するjavaアプレットの両方が含まれています。

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

私はこのような何かがうまくいくと思う:

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

もちろん、リダイレクトはsshコマンドが呼び出される前にシェルによって行われるため、server.imgはローカルファイルです。あなただけのルートファイルシステムではなく、完全なディスクが必要な場合は、交換するsdaことにより、sda3あなたは私と同じ画像を使用していると仮定。


多分:(ssh root@host cat /dev/sda | gzip -c - > /path/to/dir_on_huge_partition/server.img.gzオンザフライgzipは、ファイルシステムの内容によって異なります...)
オリビエデュラック14

@OlivierDulacこの方法でgzipを使用すると、データがネットワーク上で非圧縮で送信され、受信側で圧縮されます。あなたが達成しようとした結果は、転送中にデータを圧縮することだったと思います。ローカルイメージは圧縮して保存することも保存しないこともできますが、後でそのイメージに適用するツールは圧縮バージョンでは機能しません。転送中にデータを圧縮するだけであれば、sshの圧縮機能を利用できます。-C設定でまだ有効になっていない場合は、有効にすることができます。
カスペルド14

2
ファイルのサイズを小さくしようとしていました。しかし、帯域幅を節約したい場合(良い考え):引用符を追加するだけです:ssh root@host "cat /dev/sda | gzip -c - " > /path/to/dir_on_huge_partition/server.img.gz(sshの-cオプションも通常は良いですが、sshはトンネルの入り口でのみ圧縮するため、最後に圧縮する必要がありますstdoutに送信する前に圧縮解除する)
オリビエデュラック14

2

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

私はこれからのrm人生で使うことを誓って、nixシステムでtrash-cliがデフォルトの削除コマンドではないのは狂気だと思うでしょう。

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

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

:( 実話


2
私の経験では、これらの種類のツールは実際の助けというよりも迷惑のようなものです。遅かれ早かれ、いくつかの宣誓の後にそれを削除します。ワークステーションでは大丈夫かもしれませんが、サーバーで管理作業をしているほとんどの場合ではないにしても、多くの場合、他の場所に移動するだけでなく、データを削除する必要があります代わりに)。また、データをゴミ箱フォルダに自動的に移動すると、それ自体で重大な問題が発生する可能性があります(たとえば、同じファイルシステムにないゴミ箱、セキュリティなど)。
-maetthu

@maetthuああ、特定の日数の間ゴミがゴミ箱に入れられた後はもちろん削除されます。Ubuntuデスクトップは、30日以上ゴミ箱にあるアイテムに対してこれを行います。サーバーでは、もっと短いものが必要な場合があります。trash-empty 5cronで。ポイントは、人間が間違いを犯すため、猶予期間を許可することです。
ジェリー

不可欠なシステムツールを禁止するのではなく、実用的な災害復旧計画を立てる方が良いと思いませんか?
-user292812

@ user292812 / bin / rmを禁止することは提案しませんでした。ほとんどの場合、これが最初のオプションではないというだけです(/ bin / rmエイリアスに注意してください)。また、あなたの質問は、災害復旧と人に優しい削除オプションとの間の誤った選択を示唆しています。両方が必要です。
ジェリー

1
2段階の削除プロセスにより、多くのトラブルを回避できます。このようなスクリプトのエイリアスを「rm」にすると、重要なものを何度も誤って削除することがなくなりました。
サムワトキンス

1

私はアンマウントされ、このような場合にはアドバイスや使用するdebugfsのを、との助けを借りてlsdelあなたが雑誌からクリーンアップされないすべての最近削除されたファイルを一覧表示して、できるダンプ必要なファイルを。同じものの高速検索リンク:http : //www.linuxvoodoo.com/resources/howtos/debugfs

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

そして、はい、提案の1つはスクリプトを作成することです。これは、ream rmreal.rmに、symlinc mvrmに移動しました ;)


-2

すべてのサーバープロセスとディスクI / Oを引き起こす可能性のあるすべてを停止してから、testdiskを実行します。これはソフトウェアスタックにあるはずです。物理的にアクセスできる場合は、testdiskでlivecdを使用してください。


1
まったく同じ提案を提供する3つの答えでは不十分だと思う理由がよくわかりません。
カスペルド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.