-9を殺したり、電源を切ったりすると、*正確に*ねじ込まれますか?


13

セットアップ

私はかなり長い間プログラマーでしたが、深い内部的なものについてはまだ少し曖昧です。

今。次のいずれかを行うことはお勧めできません。

  1. kill -9プロセス(悪い)
  2. 実行中のコンピューターまたはサーバーの電源プラグを自発的に引きます(さらに悪い)

ただし、必要な場合もあります。プロセスが何をしても反応しない場合もあれば、コンピューターが何をしても反応しない場合もあります。

mod_wsgiを介してApache 2、MySQL 5、PHP 5、およびPython 2.6.5を実行しているシステムを想定します。

注:ここではMac OS Xに最も興味がありますが、UNIXシステムに関係する答えがあれば役立ちます。

私の懸念

これらのいずれか、特に2番目のいずれかを行う必要があるたびに、何かが壊れていることをしばらく心配しています。どこかのファイルが破損している可能性があります。誰がどのファイルを知っているのでしょうか?コンピューターには1,000,000以上のファイルがあります。

OS Xを頻繁に使用しているため、ディスクユーティリティを使用して「ディスクの検証」操作を実行します。問題は報告されませんが、私はまだこれについて心配しています。

構成ファイルがどこかでめちゃくちゃになった場合はどうでしょう。さらに悪いことに、どこかのバイナリファイルが破損している場合はどうでしょう。または、スクリプトファイルがどこかに破損しています。一部のハードウェアが破損した場合はどうなりますか?

破損または損傷が大惨事を引き起こす重大なシナリオで、来月までそれを見つけられない場合はどうなりますか?

または、貴重なデータがすでに失われている場合はどうなりますか?

私の希望

私の希望は、これらの懸念と心配に根拠がないことです。結局、これを何度も繰り返した後、本当に悪いことは何も起きていません。最悪の場合、いくつかのMySQLテーブルを修復する必要がありますが、データを失っていないようです。

しかし、私の心配が根拠がなく、実際の損害が状況1または2のいずれかで発生する可能性がある場合、それを検出してそれを防ぐ方法があることを望みます。

私の質問

これは、最新のオペレーティングシステムがこれらのシナリオで何も失われないように設計されているためでしょうか?これは、最新のソフトウェアが何も失われないように設計されているためでしょうか?最新のハードウェア設計はどうですか?電源プラグを抜くとき、どのような対策がとられていますか?

私の質問は、これらのシナリオの両方のために、何をされて正確に間違って行くことができ、そしてどのような手順は、それを修正するために取られるべきですか?

私が間違っている可能性があるのは、いくつかのプログラムがデータをディスクにフラッシュしていない可能性があるため、ディスクに書き込まれるはずの非常に最近のデータ(たとえば、電源を切る数秒前) )失われる可能性があります。しかし、それ以上はどうですか?そして、5秒のデータ損失というまさにこの問題がシステムを台無しにしてしまうのでしょうか?

ハードドライブ上の巨大なファイルフォレストのどこかに隠れているランダムファイルの破損はどうですか?

ハードウェアの損傷はどうですか?

私に最も役立つもの

  1. プロセスを強制終了するか、システム全体の電源を入れると、内部で何が起こるかについての詳細な説明。(インスタントのようですが、誰かがそれを遅くすることはできますか?)

  2. これらのシナリオでうまくいかない可能性のあるすべての説明と、(もちろん)確率(つまり、これは非常にまれですが、これはそうです)

  3. これらのシナリオが発生した場合の損傷または破損を防ぐための、最新のハードウェア、オペレーティングシステム、およびソフトウェアで実施されている対策の説明。(私を慰めるために)

  4. 「ディスクの検証」を超えて、キル-9または電源を切った後、ドライブのどこかに何も破損または損傷がないことを本当に確認するための手順。

  5. コンピューターのセットアップを強化して、何かを殺したり、電源を抜かなければならない場合に発生する可能性のある損害を軽減するために講じることができる対策。

  6. バイナリファイルに関する情報-apacheバイナリファイルまたはライブラリの途中でランダムなバイトまたはランダムなバイトが破損している可能性がありますが、それは後になって問題を引き起こすことはありませんか?これがパワープルまたはキルの結果として発生したのではないことをどのように確認できますか?

本当にありがとう!


kill -9を送信しているプロセスは何ですか?「Apache 2、MySQL 5、PHP 5、およびPython 2.6.5〜mod_wsgi」に言及します。これらのいくつかを殺していますか。あなたが何を殺しているのかを知ることは、そうすることの意味についてより直接的な反応を可能にします。また、プロセスを強制終了するために実際に発生していること。これを知っていれば、それを修正するための総当たり法の意味を単に理解するのではなく、問題の根本原因を特定できるかもしれません。ところで、MacOS Xの最近のマシンでは、電源を入れるだけでなく、電源ボタンを10秒間押し続けたほうが残酷ではありません。
グラハムダンプルトン

kill -9については知りませんが、何らかのバックアップ電源がない限り、電源プラグを抜くとすべてが殺されると言っても大丈夫だと思います。
ジョンガーデニアーズ

回答:


9

電源を引くと、飛行中にすべてが警告なしで停止します。kill -9は単一のプロセスに対して同じ効果があり、SIGKILLで強制的に終了します。

プロセスがカーネルまたは停電によって強制終了された場合、クリーンアップは行われません。つまり、ファイルが半分しか書き込まれていない、状態が一貫していない、またはキャッシュが失われている可能性があります。通常、ジャーナリング、終了ステータス、バッテリーバックアップのため、これらのことを心配する必要はありません。

/ tmpの一時ファイルは、tmpfsにある場合は自動的に削除されますが、Firefoxのロックや.parentlockなど、削除するアプリケーション固有のロックファイルが残っている場合があります。

ほとんどのソフトウェアは、成功した終了ステータスを記録しない場合、トランザクションを再試行するのに十分スマートです。これの良い例は、典型的なメールシステムです。メッセージが配信されているが、途中で切断された場合、送信者は成功するまで後で再試行します。

ファイルシステムはおそらくジャーナリングされています。ファイルを移動または書き込み中にストリームが停止した場合、ジャーナリングされたファイルシステムは元のファイルシステムを引き続き参照します。ジャーナリングされたファイルシステムは非破壊的に変更を加え、古いコピーを残し、ディスク上の古いコピーのスペースを回収する前に、最後のステップとして新しいコピーのみを参照します。

RAIDアレイを使用している場合は、パフォーマンスを向上させ、停電時に信頼性を提供するためのあらゆる種類のメモリバッファがあります。ほとんどの場合、ファイルシステムはデバイスのキャッシュとその状態を認識していないため、変更がディスクにコミットされたと考えますが、それはまだどこかのRAIDキャッシュにあります。それでは、電源が切れるとどうなりますか?RAIDエンクロージャに機能するバッテリーがあり、それを監視することを願っています。それ以外の場合は、fsckに対して破損したファイルシステムがあります。

はい、バイナリでは数ビットが破損する可能性がありますが、最新のハードウェアではそれほど心配しません。本当に妄想している場合は、適切なツールを使用してディスクとRAIDの状態を監視できますが、とにかくそれを行う必要があります。定期的なバックアップを行い、無停電電源装置を入手してください。


5

予期しないシャットダウンでは、破損する必要があるファイルは、書き込み用に開いているファイルのみです。ほとんどのシステムでは、特定の時点で、おそらくファイルへの書き込みを行っていません。多分。

1キル-9

POSIX SIGKILLであり、実装に依存します。このシグナルを受信するプロセスには、それを処理する機会が与えられません。

1電源オフ

ハードウェアに依存します。ヘッドはドライブの勢いの下で自動停止し、書き込みキャッシュ内のすべてがDRAMリフレッシュを失い、数秒以内に回復不能な破損に減衰します。システムメモリ、CPUキャッシュ、レジスタなどにも同じことが起こります。

wdc.comから(google:site:wdc.com保護ヘッド駐車場)

電源が失われました:ハードドライブがリセットされました。頭はスピンドルエネルギーを使用して着陸ゾーンに駐車されます。スピンドルモーターが停止しました。

2-何がうまくいかないか

開いたままのファイルは不完全に書き出されます。ファイルを書き込み用に開くと、データが破損します。最新のハードウェアでのファイル書き込みは高速であり、最新のPCは通常IOでストレスを受けません。静かな田舎道を目隠しして歩くようなものです。ほとんどの場合、大丈夫です。

3-対策

ディスクの機能については上記を参照してください。

ジャーナルされたファイルシステムを検索します。現在は正常です:http : //en.wikipedia.org/wiki/Journaling_file_system

MS Wordやviなどのソフトウェアは、オリジナルではなく一時ファイルに書き込みます。目的は、ディスク上に一貫したコピーがない状態にシステムを決して放置しないことです。

Windowsはレジストリのコピーを保持します(あまりにも重要です)ウィキペディア:「Windows 2000はレジストリハイブ(.ALT)の代替コピーを保持し、破損が検出されたときにそれを切り替えようとします」(私はWin2k、だから私はMSの新しいメカニズムが何であるかわからない)

4-何をすべきか

難易度の高い順(やさしい)

  • バックアップを保持する
  • 最後に作業していたことを確認する
  • 別のディスクから起動し、最後に変更された日付/時刻を探して、クラッシュ時にシステムが何をしていたかを把握します
  • 別のディスクから起動し、すべてのファイルのmd5sumsをオフラインコピーと比較します。

バックアップを保持することが最も適切な答えです。適切なバックアップを行うと、以前に変更したバージョンに戻ることができます。

5

冗長電源?エンドユーザー教育?電源ボタンの上にテープと厚紙を置きますか?

6

ハードウェアの誤動作、破損したディスクドライバー、破損したOSカーネル、アップグレード中のチェックサムまたはクラッシュの欠如、バイナリおよびライブラリーが読み取り/書き込みで開かれないため、破損しません。それは起こりますが、まれです。


ポイント#6の+1
Bigbio2002

4

kill -9の場合、これはプロセスにシグナルを送信し、その場で「死ぬ」ようにします。プロセスは停止します(中断できないスリープ状態になっていない限り、その場合はゾンビになります)。ファイルは閉じられず、データは書き出されず、プログラムはこのシグナルをキャッチして他のことを行うことはできません。クリーンアップもなしもなし:ただ死にます。

今日のファイルシステムは非常に堅牢です。XFS、JFS、ext3、ext4のようなものにはすべて、ファイルシステムのメタデータをそのまま保持するためのジャーナルやその他のものがあります。

Apache自体などのバイナリは、メモリ内にあるか読み取られているため、突然の停電やシステムの終了によって破損する可能性はありません。それらが読み込まれている場合(たとえば、Apache HTTPが起動している場合)、電力サージによってバイナリが破損する可能性がありますが、可能性は低いようです。

私はMac Miniを使っている人たちは(何度言われても....)

ほとんどの場合、キル-9や定期的な電源オフに依存しない限り、あまり心配する必要はありません。過去には事態はさらに悪化していました。Solaris 10(など)よりも(たとえば)Solaris 2.6のほうが心配です。



3

「kill -9」は、保留中のIO操作を同期しません。多くの場合、これは問題ではありませんが、システムのIO負荷が高い場合、データが失われる可能性があります。

RAIDコントローラー(バッテリーバックアップキャッシュなし)が書き込みをキャッシュし、データを失う可能性のあるサーバーでの問題です。

編集:もう1つ...ネットワークマウントされたドライブに依存していて、ファイルハンドルを開いている場合、ファイルが不整合または破損したままになる可能性が非常に高くなります。Windowsの場合、これが表示される典型的な例は、ユーザーがOutlook PSTファイルを共有にマウントし、電源またはネットワーク接続を失ったときです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.