こんにちは、cloudpack津村@明日は給料日です。

「明日は給料日」というと、どうしても『あずまんが大王』を思い出す自分がいます。はい。
誰か癒やしをください。(猫とかうさぎとか…)

運悪くBACKUP IMAGEで起動してしまったJUNOS BOXを直す方法。

スイッチにCLIでログインした際、運が悪いと以下の表示がなされる場合があります。
運悪くBACKUP IMAGEで起動してしまったJUNOS BOXを直す: 画面

WARNING: THIS DEVICE HAS BOOTED FROM THE BACKUP JUNOS IMAGE
It is possible that the primary copy of JUNOS failed to boot up properly, and so this device has booted from the backup copy.
Please re-install JUNOS to recover the primary copy in case it has been corrupted.

これは、Junos(という名の名状しがたきFreeBSD)プライマリパーティーションが壊れてしまい、バックアップ(alternate)パーティーションより起動した際に表示されます。

一般的にネットワーク機器のOSは組み込みOSの一種に近く、シャットダウン処理をしなくてもいきなり電源を切る事ができますが、JUNOSはFreeBSDがベースのOSであり、通常のPCやLinuxマシンと同じく、シャットダウン処理が必要です。
まぁ、あれです。きちんとしたOSが入ったネットワークアプライアンスだと思ってください。(そう言うとIOSとか組み込みLinuxとかどうよ、という話もありますが、それはそれで。)

ここでは、EX2200-48T-4Gで上記の症状が出た場合を想定します。

作業は2段階に別れ、
バックアップパーティーションをプライマリパーティーションに描き戻す作業、
次に、プライマリパーティーションのjunosをアップデートする作業です。
よって、リブートは2回発生します。

1. junosをプライマリパーティーションに書き戻す

1.1. パーティーションの復元

現在起動しているバックアップパーティーションを、プライマリパーティーションにコピーします。『request system snapshot media internal slice alternate』コマンドを実行します。

root@:RE:0% cli
root> request system snapshot media internal slice alternate
Formatting alternate root (/dev/da0s1a)...
Copying '/dev/da0s2a' to '/dev/da0s1a' .. (this may take a few minutes)
The following filesystems were archived: /

1.2. パーティーションの確認

show system storage partitions』にて、パーティーションの状態を確認します。

root> show system storage partitions
Boot Media: internal (da0) ←SRX/EX内部のUSBマスストレージ
Active Partition: da0s1a ←プライマリのパーティーション
Backup Partition: da0s2a ←バックアップ(alternate)のパーティーション
Currently booted from: backup (da0s2a)
(中略)
root>

1.3. プライマリパーティーションからのリブート

最後に、JUNOSをリブートします。
明示的にプライマリパーティーションから起動するよう、オプションを付与します。
request system reboot slice alternate media internal

root> request system reboot slice alternate media internal
Reboot the system ? [yes,no] (no) yes
(中略)
*** FINAL System shutdown message from root@ ***

System going down IMMEDIATELY

2. JUNOSをバージョンアップする。

再起動後、現在のJUNOSバージョンを確認します。
バックアップパーティーションのJUNOSがバージョンが古い為、任意のバージョンにバージョンアップする必要があります。

root> show version
Model: ex2200-48t-4g
JUNOS Base OS boot [11.4R7.5]
JUNOS Base OS Software Suite [11.4R7.5]
JUNOS Kernel Software Suite [11.4R7.5]
JUNOS Crypto Software Suite [11.4R7.5]
JUNOS Online Documentation [11.4R7.5]
JUNOS Enterprise Software Suite [11.4R7.5]
JUNOS Packet Forwarding Engine Enterprise Software Suite [11.4R7.5]
JUNOS Routing Software Suite [11.4R7.5]
JUNOS Web Management [11.4R7.5]
JUNOS FIPS mode utilities [11.4R7.5]

2.1. USBメモリをマウントする。

JUNOSをバージョンアップする手段はいくつかありますが、今回はUSBメモリ上のJUNOSイメージを使用します。事前にFATでフォーマットされたUSBメモリに、英字のみでイメージを配置します。今回は、/JUNOS/EX2200以下にJUNOSイメージを配置しました。

root@:LC:0% mount_msdosfs /dev/da1s1 /mnt
root@:LC:0% ls /mnt/JUNOS/EX2200/
jinstall-ex-2200-12.3R6.6-domestic-signed.tgz
jinstall-ex-2200-12.3R7.7-domestic-signed.tgz

2.2. USBメモリからJUNOSイメージを展開する。

CLIモードに移行し、JUNOSイメージを展開します。
request system software add no-copy no-validate』コマンドの後に、JUNOSイメージのフルパスを記述します。

2.3. リブート

最後に、再度リブートします。

以上で新しいJUNOSとなったスイッチへ蘇生しました。

(サトウ)多謝。

このエントリを書くにあたり、以下のドキュメントを参照しました。

元記事はこちらです。
運悪くBACKUP IMAGEで起動してしまったJUNOS BOXを直す方法。