フェールオーバー時にLinuxサーバーを起動できない
Symptoms
「emcpbfs_linux config」スクリプトを実行して、R1スクリプトから起動するようにPowerPathを構成し、作成した新しいgrubエントリーから起動しようとすると、正常に起動しました。ただし、フェールオーバーすると機能しません。サイトR2で実行中にPowerPathがデバイスを検出しないため、emcpowerデバイスのみを受け入れるように設定されたRAMディスク イメージのLVMフィルターはPVを検出せず、サーバーを起動できません
20秒間のスリープ状態でスクリプトを実行すると、サーバーはフェールオーバーされたときに(および同じ擬似デバイス名で)問題なく実際に起動しました
スリープを使用せずにスクリプトを実行すると、ボリューム グループを検索しようとしてループするという同じ症状が発生し、サーバーが起動しませんでした。
Cause
スクリプトがスリープなしで実行された場合:初回の場合、FCリンクはまだ稼働しておらず、ネイティブSCSIデバイスはまだホストで構成されていません
ただし、この時点ですでに構成されている内蔵ディスク(/dev/sda)が1つあります。そのため、スクリプトはネイティブ起動デバイスがすでに構成されていることを前提とし、emcpowerデバイスの作成を試行し続けます。ただし、R2デバイスがまだ起動していないため、これは失敗します
基本的にスクリプトから、起動デバイスが存在しない場合でもsdfoundが1に設定されているため、以下のif条件は成功します。
if [ ${count1} -eq ${count2} ] &&; [ "${sdfound}" -eq 1 ];そうしたら /etc/opt/emcpower/emcpmgr map -p
スリープなしのログの<切り取り>
COUNT:getsddevsは1
COUNT1を返します:getsddevsは1
COUNTを返します:getsddevsは1
COUNT2を返します:getsddevsは1
/dev/sda
/dev/emcpower
<snipを返します>
sleep>
COUNTによるログの<切り取り: getsddevsは25
COUNT1を返します。 getsddevsは25
COUNTを返します:getsddevsは25
COUNT2を返します:getsddevsは25
/dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt /dev/sdu /dev/sdv /dev/sdw /dev/sdx /dev/sdy
sdc: 不明なパーティション テーブル
SDE:不明なパーティション テーブル
SDF:不明なパーティション テーブル
SDG:不明なパーティション テーブル
SDO:不明なパーティション テーブル
SDQ:不明なパーティション テーブル
SDR:不明なパーティション テーブル
emcpowera:
emcpowera1 emcpowera2
/dev/emcpower
/dev/emcpowera
/dev/emcpowera1
/dev/emcpowera2
<snip>
Resolution
回避策:
起動中にこの内蔵ディスクをBIOSから無効にし、フェールオーバーを試行します(スリープなし)。
これでも、スクリプトにはemcpowerデバイスの作成時にカウントが0より大きいことを確認するチェックがあるため、起動は問題なく成功するはずです
恒久的な修正:
内蔵ディスクを使用したR1/R2起動は推奨されるセットアップではないため、恒久的な修正はありません。複雑なのは、スクリプトが起動ディスクがすでに構成されているかどうかを識別できないためです。このスクリプトは、R1/R2起動シナリオに固有のものではありません。SANセットアップからの通常の起動でも同じスクリプトが機能する必要があります。必要のないときにスリープを追加するのはあまり良い考えではありません。
エンジニアリング チームは、この構成がPowerPathのインストールおよび管理ガイドでサポートされていないことを文書化します。