web-dev-qa-db-ja.com

Solarisでの無停電バックアッププロセス

===========システムの詳細===========

OS:Solaris 10、アップデート11
CPU_Arch:SPARC(sparcv9)
HW:Sun Fire V490(Yeahhhh baby old school)
KERNEL_REV:150400-40
プログラム:bpbkar32(SymantecのNetbackup)
TL; DR:2つの適切なパスがない可能性があるため、中断されたzpoolが原因で、kill -9を使用してもプロセスを強制終了できません。

問題:

システムには、殺せないプロセスがたくさんあります(16)。バックアップチームから、NBマスターサーバーからこれらのジョブを強制終了できず、新しいバックアップを生成できない」と通知されたため、ホップして./bp.kill_allを試行しました。

bash-3.2#./bp.kill_all

終了する必要のあるNetBackupプロセスを探しています。
bpbkarプロセスの強制終了...

次のプロセスはまだアクティブです
root 20346 1 0 02:02:33? 0:00 bpbkar32 -r 2678400 -ru root -dt 1047868 -to 0 -bpstart_time 1481767648 -clnt n
root 18689 1 0 Dec 09? 0:00 bpbkar32 -r 8035200 -ru root -dt 0 -to 0 -bpstart_time 1481325879 -clnt nerp323
root 12618 1 0 Dec 07? 0:00 bpbkar32 -r 2678400 -ru root -dt 357484 -to 0 -bpstart_time 1481077264 -clnt ne
root 29693 1 0 Dec 09? 0:00 bpbkar32 -r 2678400 -ru root -dt 529430 -to 0 -bpstart_time 1481249210 -clnt ne
root 10168 1 0 Dec 09? 0:00 bpbkar32 -r 2678400 -ru root -dt 530349 -to 0 -bpstart_time 1481250129 -clnt ne
root 1950 1 0 Dec 14? 0:00 bpbkar32 -r 2678400 -ru root -dt 962300 -to 0 -bpstart_time 1481682080 -clnt ne
このスクリプトでそれらを殺そうとしますか? [y、n](y)y
残りのプロセスを強制終了します。
プロセスが終了するのを待っています...
プロセスが終了するのを待っています...
プロセスが終了するのを待っています...
プロセスが終了するのを待っています...
プロセスが終了するのを待っています...
まだ実行中のプロセスがあります。

...読みやすさのために出力を切り捨てました。

その後、kill -9を介して、極端な偏見を持ってこれらのプロセスを強制終了しようと試みますが、これも役に立ちません。 強制終了できない(中断できない?) および 「kill-9」が機能しない場合はどうなりますか? を確認し、「」で検索しました。 Solarisの無停電プロセス」と部分的な結果。再起動は一般的なテーマのようであり、「ここでのデスクに対する強打」ソリューションでもあるように見えます。

そうは言っても、私は次のことをしたいと思います。
-根本原因が何であるかについての私の論理と推論を検証します
-プロセスが停止している場所/実行しようとしているsys呼び出しを判別するためのより良い方法があるかどうかを確認します
-可能な限り再起動せずにI/Oを解決し、その後、強制終了できないプロセスを解決します。
ほとんどの場合、根本原因の分析と、「将来、バックアップの実行中、または2つの作業パスがない場合は、切り替え作業を行わないでください」という緩和策があります。

これが私が得たもの/私が考えているものです:
1)/ proc/1950 /ディレクトリにポップして、ステータスを確認します。 stringsを使用しても、その出力を理解しているサイコロはありません。ランダムな文字を吐き出します。 'cwd'は何にもリンクを表示せず、ls -alL /proc/1950/cwdを介して解決しようとすると、ターミナルがハングし、drumrollが作成されることに注意してください。 )別の中断できないプロセス。

2)pstack 1950を実行すると、いくつかの有用な情報が生成されますが、ps -eafからは見えない、または理解できるものは何もありません。ただし、動作中のpidの場合のようにアドレスやシステムコールが表示されないため、すべてゼロのように見えます。

bash-3.2#pstack 1950

1950:bpbkar32 -r 2678400 -ru root -dt 962300 -to 0 -bpstart_time 1481682080 0000000000000000 ???????? (0、0、0、0、0、0)

3)trussを実行すると、実行中のプロセスでハングします。pfilesと同じように、「pfiles:プロセス1950を制御できません」というエラーが生成されます。興味深いですが、期待されています。

4)straceを実行すると、「トレーサーはすでに存在します」と表示されます。

5)pwdxを実行してcwdを出力すると、次のようになります。
bash-3.2#pwdx 1950

1950:/バケット

私たちのdfにはそれが含まれているので、これは興味深いです...
df -h /bucket

使用されたファイルシステムのサイズアベイルズ容量マウントされた
バケット1.9T31K 1.9T 1%/バケット

...しかし、/ bucketにcdしてlsを実行しようとすると、同じハング効果が発生します。

bash-3.2#zpool list

名前サイズALLOC無料キャップ健康ALTROOT
バケット1.94T308K 1.94T 0%一時停止-
rpool 136G 58.0G 78.0G 42%オンライン-

bash-3.2#umount /bucket

「バケット」を開くことができません:プールI/Oは現在中断されています

bash-3.2#zpool export bucket

「/ bucket」をアンマウントできません:デバイスがビジーです

bash-3.2#zpool status -x

プール:バケット
状態:一時停止
ステータス:IO障害に応答して、1つ以上のデバイスに障害が発生しました。
アクション:影響を受けるデバイスが接続されていることを確認してから、「zpoolclear」を実行します。
参照: http://www.Sun.com/msg/ZFS-8000-HC
スキャン:要求なし
config:
NAME STATE READ WRITE CKSUM
bucket SUSPENDED 0 00でI/Oエラーが発生しましたc3t50060E80102B1F5Ad78FAULTED 2 00エラーが多すぎます

すっごく...私たちは水中で死んでいると感じています、そして実際にその「切り替え作業」が起こっていたとき、SANへの2つのアクティブ/健康的なパスがなかったので、私たちは下から敷物を引っ張ることになりましたvdevとそれが死んだときにバックアップがそこで機能していたのはたまたま起こったのですが、私のlsのようなどのプロセスも同じ振る舞いをしていました。

誰もが「再起動を節約するこの未知のコマンドを実行する」という最後の節約の考えを持っていますか?

3
Sending_Grounds

ジェフが提案したように、パスが戻った場合、zpoolclearは問題の解決に役立つはずです。見えなかったように聞こえるので、サーバーはおそらくLUNを認識できません。

zpool clear -F -n bucketは、最後のトランザクションセットを破棄することでプールをインポートできるかどうかも示します(-Fオプション)。`

切り替え作業について言及したので、どの作業が行われたか、および変更の1つがまたはパスのいずれかを削除したかどうかを確認することをお勧めします。 `luxadm display/dev/rdsk/c <____> s2の出力を見ましたか?または、cfgadmを使用してパスを再構成してみましたか?または、フォースリップイベントをパスに送信しますか?

zpool status bucketの完全な出力は、プールのタイプ(ミラー、猫、ストライプなど)を判別するのにも役立つ場合があります。私はこの問題に基づいて鏡ではないと思います。

私はミックスに参加していないので簡単に言うことができますが、問題ではないと仮定すると、データはすべてアレイに存在するはずなので、まだ慌てる必要はありません。ただし、一部のトランザクションがロールバックされた状態で再インポートしなければならない場合があります。

頑張ってください!

4
sleepyweasel

次のように、SANステータス(FC SANを想定)を確認できます。

for port in `fcinfo hba-port | grep Port | awk '{ print $4 }'`; do
> fcinfo remote-port -ls -p $port
> done

また、 mpathadmのmanページ もお読みください。 mpathadm show lu LUNを使用して、LUNのステータスを表示できます。

3
Andrew Henle