NIMを利用した代替ディスクへのAIX移行インストール

## はじめに
AIXの(移行)インストール方法が最近増えてきましたが、今回はnimadmコマンドを使って代替ディスクへのAIX移行インストールを試したので、その手順と注意点を記録します。

【参考】
[ネットワーク・インストール・マネージャー(NIM)](https://www.ibm.com/support/pages/node/1137322)
[nimadmコマンド](https://www.ibm.com/docs/ja/aix/7.2?topic=n-nimadm-command)

## 代替ディスクへの移行インストールとは何か
AIXをアップグレードする方法の一つで、新規ディスクにrootvgをコピーし、コピーと同時に新しいバージョンへアップグレード（移行インストール）してくれるというものです。
つまり、[alt_disk_copy](https://www.ibm.com/docs/ja/aix/7.2?topic=alt-disk-copy-command)と移行インストールを同時にしてくるようなイメージです。

### メリット
1. 現行システムを稼働したままアップグレードが可能になるので、ダウンタイムが"ほぼ"無くなる。(新規ディスクに切り替える時にはリブートが必要になるので、ほぼ。)
2. 現行システムは旧ディスクに残したままなので、何かあった際のロールバックが容易。

### デメリット
1. NIMサーバーが必要
2. 同サイズの新規ディスクが必要

## 環境
今回は、以下の環境で試しました。

NIMサーバー: AIX7.2 TL5 SP6
AIX区画（移行前）: AIX7.1 TL5 SP3
AIX区画（移行後）: AIX7.2 TL5 SP6



## 手順
### 前提
NIM環境（MasterとClient）とリソース（lpp_sourceとSPOT）は、以下の通り構築済みのものとします。
* NIMクライアント名： adachi-AIX7
* lpp_source名：lpp_source_AIX72TL5
* SPOT名：spot_AIX72TL5
* 代替ディスク番号： hdisk2


構築や構成方法に関しては以下を参考にしてください。
[NIM環境の構築](https://ibm.ent.box.com/s/llsotz4w9akcrssh9qlm76utz85zskgd)

1. **NIMサーバー上でnimadmコマンドを実行**
    ```
    # nimadm -c adachi-AIX7 -l lpp_source_AIX72TL5 -s spot_AIX72TL5 -d hdisk2 -Y
    ```
    出力結果はかなり長いので、phase6の部分は省略してます。
    <details><summary>出力結果</summary>

    ```
    # nimadm -c adachi-AIX7 -l lpp _source _AIX72TL5 -s spot _AIX72TL5 -d hdisk2 -Y
    Initializing the NIM master.
    Initializing NIM client adachi-AIX7.
    Verifying alt_disk_migration eligibility.
    Initializing log: /var/adm/ras/alt_mig/adachi-AIX7_alt_mig.log
    Starting Alternate Disk Migration.
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 1.
    +-----------------------------------------------------------------------------+
    Cloning altinst_rootvg on client, Phase 1.
    Client alt_disk_install command: alt_disk_copy -M 7.2 -P1 -d "hdisk2"
    Calling mkszfile to create new /image.data file.
    Checking disk sizes.
    LOGICAL_VOLUME= hd11admin
    FS_LV= /dev/hd11admin
    Creating cloned rootvg volume group and associated logical volumes.
    Creating logical volume alt_hd5.
    Creating logical volume alt_hd6.
    Creating logical volume alt_hd8.
    Creating logical volume alt_hd4.
    Creating logical volume alt_hd2.
    Creating logical volume alt_hd9var.
    Creating logical volume alt_hd3.
    Creating logical volume alt_hd1.
    Creating logical volume alt_hd10opt.
    Creating logical volume alt_hd11admin.
    Creating logical volume alt_lg_dumplv.
    Creating logical volume alt_livedump.
    Creating /alt_inst/ file system.
    Creating /alt_inst/admin file system.
    Creating /alt_inst/home file system.
    Creating /alt_inst/opt file system.
    Creating /alt_inst/tmp file system.
    Creating /alt_inst/usr file system.
    Creating /alt_inst/var file system.
    Creating /alt_inst/var/adm/ras/livedump file system.
    Generating a list of files
    for backup and restore into the alternate file system...
    Backing-up the rootvg files and restoring them to the alternate file system...
    Phase 1 complete.
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 2.
    +-----------------------------------------------------------------------------+
    Exporting alt_inst filesystems from client adachi-AIX7
    to NIM master adachi-nim:
    Exporting /alt_inst from client.
    Exporting /alt_inst/admin from client.
    Exporting /alt_inst/home from client.
    Exporting /alt_inst/opt from client.
    Exporting /alt_inst/tmp from client.
    Exporting /alt_inst/usr from client.
    Exporting /alt_inst/var from client.
    Exporting /alt_inst/var/adm/ras/livedump from client.
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 3.
    +-----------------------------------------------------------------------------+
    NFS mounting client's alt_inst filesystems on the NIM master:
    Mounting adachi-AIX7:/alt_inst.
    Mounting adachi-AIX7:/alt_inst/admin.
    Mounting adachi-AIX7:/alt_inst/home.
    Mounting adachi-AIX7:/alt_inst/opt.
    Mounting adachi-AIX7:/alt_inst/tmp.
    Mounting adachi-AIX7:/alt_inst/usr.
    Mounting adachi-AIX7:/alt_inst/var.
    Mounting adachi-AIX7:/alt_inst/var/adm/ras/livedump.
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 4.
    +-----------------------------------------------------------------------------+
    nimadm: There is no user customization script specified for this phase.
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 5.
    +-----------------------------------------------------------------------------+
    Saving system configuration files.
    0505-161 nimadm: WARNING, client nfs mounts may be out of sync.
    Checking for initial required migration space.
    Setting up for base operating system restore.
    /tmp
    Restoring base operating system.
    Merging system configuration files.
    Can not remove the glbd subsystem
    WARNING: rmitab failed! Unable to remove "mkatmpvc" entry from /etc/inittab.
    WARNING: rmitab failed! Unable to remove "atmsvcd" entry from /etc/inittab.
    No such file or directory
    /lpp/devices.common.IBM.atm/deinstl/devices.common.IBM.atm.rte.unconfig[76]: /etc/atm.defs: cannot open
    sum: Can't open /usr/lib/hal_hfi.o
    sum: Can't open /usr/hfi/hal/lib/hal_hfi.o
    sum: Can't open /usr/lib/hal_hfi64.o
    sum: Can't open /usr/hfi/hal/lib/hal_hfi64.o
    Running migration merge method: ODM_merge Config_Rules.
    Running migration merge method: ODM_merge SRCextmeth.
    Running migration merge method: ODM_merge SRCsubsys.
    Running migration merge method: ODM_merge SWservAt.
    Running migration merge method: ODM_merge pse.conf.
    Running migration merge method: privcmds_mig.
    Running migration merge method: privdevs_mig.
    Running migration merge method: ODM_merge vfs.
    Running migration merge method: ODM_merge xtiso.conf.
    Running migration merge method: ODM_merge PdAtXtd.
    Running migration merge method: ODM_merge PdDv.
    Running migration merge method: convert_errnotify.
    Running migration merge method: passwd_mig.
    Running migration merge method: login_mig.
    Running migration merge method: user_mrg.
    Running migration merge method: secur_mig.
    Running migration merge method: RoleMerge.
    Running migration merge method: methods_mig.
    Running migration merge method: mkusr_mig.
    Running migration merge method: methods_mig.
    Running migration merge method: mkusr_mig.
    Running migration merge method: group_mig.
    Running migration merge method: ldapcfg_mig.
    Running migration merge method: ldapmap_mig.
    Running migration merge method: secvarscfg_mig.
    Running migration merge method: convert_errlog.
    Running migration merge method: ODM_merge GAI.
    Running migration merge method: ODM_merge PdAt.
    Running migration merge method: merge_smit_db.
    Running migration merge method: ODM_merge fix.
    Running migration merge method: merge_swvpds.
    Running migration merge method: SysckMerge.
    Running migration merge method: nscontrol_mig.
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 6.
    +-----------------------------------------------------------------------------+
    Installing and migrating software.
    0505-161 nimadm: WARNING, client nfs mounts may be out of sync.
    Expanding /alt_inst/opt client filesystem.
    Filesystem size changed to 262144
    Checking space requirements for installp install.
    Expanding /alt_inst/usr client filesystem.
    Filesystem size changed to 6029312
    Expanding /alt_inst/var client filesystem.
    Filesystem size changed to 458752
    Installing software with the installp installer.
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 7.
    +-----------------------------------------------------------------------------+
    nimadm: There is no user customization script specified for this phase.
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 8.
    +-----------------------------------------------------------------------------+
    Creating client boot image.
    bosboot: Boot image is 61441 512 byte blocks.
    Writing boot image to client's alternate boot disk hdisk2.
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 9.
    +-----------------------------------------------------------------------------+
    Unmounting client mounts on the NIM master.
    forced unmount of /adachi-AIX7_alt/alt_inst/var/adm/ras/livedump
    forced unmount of /adachi-AIX7_alt/alt_inst/var
    forced unmount of /adachi-AIX7_alt/alt_inst/usr
    forced unmount of /adachi-AIX7_alt/alt_inst/tmp
    forced unmount of /adachi-AIX7_alt/alt_inst/opt
    forced unmount of /adachi-AIX7_alt/alt_inst/home
    forced unmount of /adachi-AIX7_alt/alt_inst/admin
    forced unmount of /adachi-AIX7_alt/alt_inst
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 10.
    +-----------------------------------------------------------------------------+
    Unexporting alt_inst filesystems on client adachi-AIX7:
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 11.
    +-----------------------------------------------------------------------------+
    Cloning altinst_rootvg on client, Phase 3.
    Client alt_disk_install command: alt_disk_copy -M 7.2 -P3 -d "hdisk2"
    ## Phase 3 ###################
    Verifying altinst_rootvg...
    Modifying ODM on cloned disk.
    forced unmount of /alt_inst/var/adm/ras/livedump
    forced unmount of /alt_inst/var/adm/ras/livedump
    forced unmount of /alt_inst/var
    forced unmount of /alt_inst/var
    forced unmount of /alt_inst/usr
    forced unmount of /alt_inst/usr
    forced unmount of /alt_inst/tmp
    forced unmount of /alt_inst/tmp
    forced unmount of /alt_inst/opt
    forced unmount of /alt_inst/opt
    forced unmount of /alt_inst/home
    forced unmount of /alt_inst/home
    forced unmount of /alt_inst/admin
    forced unmount of /alt_inst/admin
    forced unmount of /alt_inst
    forced unmount of /alt_inst
    Changing logical volume names in volume group descriptor area.
    Fixing LV control blocks...
    Fixing file system superblocks...
    Bootlist is set to the boot disk: hdisk2 blv=hd5
    
    +-----------------------------------------------------------------------------+
    Executing nimadm phase 12.
    +-----------------------------------------------------------------------------+
    Cleaning up alt_disk_migration on the NIM master.
    Cleaning up alt_disk_migration on client adachi-AIX7.

    ```
    </details>

    導入しているファイルセット数や容量によって変わってくると思いますが、今回は1時間程度で完了しました。<br><br>
    
2. **NIMクライアントの再起動**
    ```
    # shutdown -Fr
    ```
    bootlistは代替ディスクに変更されているので、再起動するだけで新しいバージョンのAIXが起動されます。
    
## トラブルシューティング
手順自体はこれだけなのですが、ここまでくるのに少しハマったので記録していきます。

### nimshの有効化
NIMマスターとNIMクライアント間の通信はnimshで行われます。ただ、nimshはデフォルトで起動されていないので、両方で起動しないとnimadmコマンドは失敗します。また、nimshはport3901と3902を使用するので、他のアプリ等で使われていないかも要確認です。

nimshを起動するには以下のコマンドを実行。
```
# startsrc -s nimsh
0513-059 The nimsh Subsystem has been started. Subsystem PID is 4718730.
```
nimshを有効化しても、うまく接続できない場合は、/var/adm/ras/nimsh.log内を確認するのがいいです。

<参考>[NIMSHの使用](https://www.ibm.com/docs/ja/aix/7.2?topic=communication-using-nimsh)


### bos.alt_disk_install.rteの導入
NIMマスターのbos.alt_disk_install.rteとSPOT内のbos.alt_disk_install.rteのバージョンが一致していないとnimadmコマンドは失敗します。
```
# nimadm -c adachi-AIX7 -l lpp_source_AIX72TL5 -s spot_AIX72TL5 -d hdisk2 -Y

Initializing the NIM master.
Initializing NIM client adachi-AIX7.
0042-001 nim: processing error encountered on "master":
   /usr/bin/lslpp: Fileset bos.alt_disk_install.rte not installed.

0505-204 nimadm: SPOT spot_AIX72TL5 does not have bos.alt_disk_install.rte installed.
0505-205 nimadm: The level of bos.alt_disk_install.rte installed in SPOT
spot_AIX72TL5 (0.0.0.0) does not match the NIM master's level (7.2.5.101).
Cleaning up alt_disk_migration on the NIM master.

```
今回、導入メディアから作成したSPOTにbos.alt_disk_install.rteが入ってなかったので、SPOTのカスタマイズをして導入しました。

### Unable to access a special device file
phase11のalt_disk_copyをしてる際に、以下のエラーで失敗しました。
```
0516-082 /usr/sbin/lchangelv: Unable to access a special device file
```
このエラーはODMや/devのファイル内に実際には存在しないゴーストデバイスが存在していたことが原因になります。
以下に似たような事象が報告されています。
[0516-082 /usr/sbin/lchangelv: Unable to access a special device file - viosupgrade](https://www.ibm.com/support/pages/0516-082-usrsbinlchangelv-unable-access-special-device-file-viosupgrade)

#### 回避策
これらゴーストデバイスの情報を削除する必要があるのですが、まずはゴーストデバイスのメジャー番号を特定します。
以下のコマンドを実行して、「ALT_MAJOR_NUM」の値を探します。この値が削除すべきデバイスのメジャー番号になります。

```
# alt_disk_copy -d hdisk# -DV
```
※hdisk#は新規ディスクの番号になります。

次に、lvlstmajorを実行して、使用可能なメジャー番号を出力させます。この時に、先ほどの値が出力されれば、削除する必要があると確定します。

```
# lvlstmajor
```
削除すべきメジャー番号を特定できたので、/dev内のファイルとODM情報を削除します。

**・/dev内のファイル削除**
以下の要領で、特定したメジャー番号のデバイスを削除していきます。
```
# cd /dev
# ls -al | grep <メジャー番号>,
# rm XXXX
# rm XXXX

```
**・ODMの削除**
以下の要領で、特定したメジャー番号のODM情報を削除し、削除されたことを確認します。
```
# odmget -q value1=<メジャー番号> CuDvDr
# odmdelete -q value1=<メジャー番号> -o CuDvDr
# odmget -q value1=<メジャー番号> CuDvDr
# savebase
```
:::note alert
注意点
ODMを直接修正する行為は非常に危険なので、実施する前にサポートに問い合わせたり、バックアップを取得するなどしてください。
:::

以上です。