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

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

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

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 つではない可能性があるため、SUSPENDED 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 中断不可能なプロセス」で検索したところ、部分的な結果が返されました。再起動が共通のテーマのようで、これは「頭を机にぶつける」解決策でもあるようです。

そうは言っても、私は次のことをしたいと思っています。
- 根本原因に関する私のロジックと推論を検証する
- プロセスが停止している場所/プロセスが実行しようとしているシステム コールを特定するより良い方法があるかどうかを確認する
- 可能であれば、再起動せずに I/O を解決し、その後、強制終了できないプロセスを解決する。
基本的には、根本原因の分析と、「今後はバックアップの実行中または 2 つの作業パスがない場合は、スイッチ作業を行わない」という軽減策です。

私が得た/考えていることは次のとおりです。1
) /proc/1950/ディレクトリに飛び込んでステータスを確認します。 . を使用しても、その出力を理解することはできませんstrings。ランダムな文字を吐き出します。注目すべきは、「cwd」が何もリンクしていないことを示し、それを解決しようとするとls -alL /proc/1950/cwdターミナルがハングし、ドラムロール別の中断できないプロセス。

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

bash-3.2#pstack 1950

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

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

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

5) pwdxcwd を印刷するために a を実行すると、次の結果が返されます:
bash-3.2#pwdx 1950

1950: /バケツ

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

ファイルシステムサイズ 使用済み 使用可能容量
バケットにマウント 1.9T 31K 1.9T 1% /バケット

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

bash-3.2#zpool list

名前 サイズ 割り当て 空き キャップ 正常性 ALTROOT
バケット 1.94T 308K 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

プール: バケット
状態: SUSPENDED
ステータス: IO 障害により 1 つ以上のデバイスに障害が発生しました。
アクション: 影響を受けるデバイスが接続されていることを確認してから、「zpool clear」を実行してください。
参照:http://www.sun.com/msg/ZFS-8000-HC
スキャン: 要求なし
構成:
NAME STATE READ WRITE CKSUM
バケット SUSPENDED 0 0 0 I/O 障害発生 c3t50060E80102B1F5Ad78 FAULTED 2 0 0 エラー多すぎます

それで、私たちは行き詰まっていると感じています。実際、その「スイッチ作業」が行われていたとき、SAN へのアクティブ/正常なパスが 2 つもなかったため、vdev の足元から敷物を引っこ抜くことになり、たまたまバックアップがそこで機能していたときにそれが停止しましたが、私の のようなプロセスはすべてls同じ動作をしていたはずです。

「この不明なコマンドを実行すると、再起動の手間が省けます」という最後の解決策を誰か考えていますか?

答え1

Jeff の提案どおり、パスが戻った場合は、zpool clear を実行すると問題が解決するはずです。戻らなかったようですので、サーバーは LUN を認識できない可能性があります。

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

スイッチ作業について言及されているので、どのような作業が行われたか、また変更の 1 つによってパスまたはいずれかのパスが削除されたかどうかを確認することをお勧めします。 `luxadm display /dev/rdsk/c<____>s2 の出力を確認しましたか? または、cfgadm を使用してパスを再設定してみましたか? または、パスに forcelip イベントを送信しましたか?

の完全な出力は、zpool status bucketプールのタイプ (ミラー、キャット、ストライプなど) を判断するのにも役立つ場合があります。問題に基づいて、ミラーではないと想定しています。

私自身は混乱に巻き込まれていないので、言うのは簡単だとは思いますが、それが問題ではないと仮定すると、データはすべてアレイ上にまだ存在しているはずなので、まだ慌てる必要はありません。ただし、一部のトランザクションをロールバックして再インポートしなければならない可能性があります。

幸運を祈ります!

答え2

SAN ステータス (FC SAN の場合) は次のように確認できます。

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

また、マニュアルページmpathadmmpathadm show lu LUNLUN のステータスを表示するために使用できます。

関連情報