IBM CloudでOS ReloadによるVSIをRHEL 7からRHEL ８へアップグレードする

# 背景

RHEL 7のライフサイクルについては、Maintenance Support 2は2024年6月30日に終了となり、Extended Lifecycle Supportは2028年6月30日になります。

ただし、IBM CloudはRHEL 7のExtended Lifecycle Supportを提供していないため、RHEL 7.xのお使いのお客様は来年の６月末までにRHEL 8にアップグレードする必要があります。

RedHat自身はIn-place upgrade方法を提供していますが、IBM Cloud上のRHEL 7のin-place upgradeはサポートされていません。（今後のRHEL 8についてはin-place upgradeをサポートするか、まだ分からないんです。）OS Reloadというやり方はIBM Cloudに推薦されたUpgrade方法になります。

本記事では、先ずはOS ReloadでRHEL 7をUpgradeすることについて具体的な手順を示しました。次は、OS ReloadでUpgradeすると、システムへの影響及び注意点、そして、よくある質問についてまとめました。最後に、他の道があるかについては検討しました。

# OS ReloadでVSIをRHEL 7からRHEL ８へUpgradeする
 
まずは、全体の流れについては次の通りです：
１．既存のVSI（RHEL 7）をBackupする
２．比較のため、Reloadする前にVSIの状況を確認する
３．Diskを保持してOS Reloadする
４．ReloadしたVSI（RHEL 8）でDataを復旧する

次は、詳細のステップについて説明します。


## 1. 既存のVSI（RHEL 7）をBackupする

OS Reloadの際には、Disk preservationという選択肢があり、原則的にそのDiskを使用してVSIを復旧することができます。ただし、万が一Diskを保存する時にエラーが発生する恐れを考慮して、最初に普段のBackup方法よりシステムをBackupすることがお勧めです。具体的なBackup方法はそれぞれありますので、この記事でBackupの部分を割愛します。

## 2. 比較のため、Reloadする前にVSIの状況を確認する

私の検証環境にClassic InfrastructureでRHEL 7.xのVSIを作成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/8782e6a1-16f1-55ce-ea06-a534e3e3e4d6.png)

VSIの名前をクリックして、**Storage** Tabで**Block storage details**を確認すると：
‐　**Portable Storage**がないです。
‐　**System storage details**の一覧に、25GBのSystem Diskが一つのみ、あります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/e1ec0853-ff10-6da2-2cfd-f3855308cdab.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/c373d9be-4dec-e653-cbed-29ed3d0610e1.png)


VSIをSSH Loginして、現在のOS Release情報を確認します。CMDの出力により、現在は**Red Hat Enterprise Linux Server 7.9**を利用しています。


```ctr:SSH Terminal
[root@virtualserver01-helen ~]# cat /etc/os-release
NAME="Red Hat Enterprise Linux Server"
VERSION="7.9 (Maipo)"
ID="rhel"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.9"
PRETTY_NAME="Red Hat Enterprise Linux Server 7.9 (Maipo)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:7.9:GA:server"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
REDHAT_BUGZILLA_PRODUCT_VERSION=7.9
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="7.9"
[root@virtualserver01-helen ~]#
```

データを保持できるかどうかを確認するため、**SampleFileBeforeUpgrade.txt**を準備します。


```ctr:SSH Terminal
[root@virtualserver01-helen ~]# echo "This is made before the RHEL 7 upgrade" > SampleFileBeforeUpgrade.txt
[root@virtualserver01-helen ~]# ls
redhat_subscription.log  SampleFileBeforeUpgrade.txt
[root@virtualserver01-helen ~]# cat /root/SampleFileBeforeUpgrade.txt
This is made before the RHEL 7 upgrade
[root@virtualserver01-helen ~]#
```

## 3. Diskを保持してOS Reloadする

VSIの詳細画面で、右上にある**Actions** ボタンを押して、**OS reload**をクリックして、OS Reloadの設定画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/32b9da18-3523-06e4-363e-5d3de9ef613d.png)

OS Reloadの設定画面では、
‐　**Operating System**の行で右側の三点メニューをクリックして、**Edit**を選択して、New Selectionを**Red Hat Enterprise Linux 8.x - Minimal Install (64 bit) (1-4 Core)**に設定します。
-　（**重要**）画面の下方に、必ず**OS Reload with Disk Preservation**を有効にしてください。そうすると、OS Reloadは新規DiskでRHEL 8を実行して、現在のSystem Diskを変更せずに丸ごとにPortable Diskとして保持しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/4d9d11ce-68ff-ca21-9f13-fa8dc61255c1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/30e661ae-afa7-8e91-567f-9a77f4ab4294.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/c19e1dbc-274d-d42c-3e88-d782a76be680.png)

設定が終わったら、右側の確認項目をチックして、**Reload**ボタンをクリックして、PopupしたWarning Windowsで**Confirm OS Reload**をクリックしてReloadを始めます。Reloadは数分で完了するはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/df3f80b6-5c8d-4ef8-665f-9020d42291f5.png)

## 4. ReloadしたVSI（RHEL 8）でDataを復旧する

Reloadが完了したら、VSIの情報を確認しましょう。
まずは、VSIの詳細画面で、現在のOS ImageとOSがRHEL 8になったことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/463c73b0-2f07-5a9f-7711-0fee083fb699.png)

次は、**Storage** tabで、Portable StorageとSystem Diskの状況を確認します。
- **Portable Storage**には、**DriveRetention-xxx**の名前で25 GBのDiskが見えます。これは保持したRHEL 7のSystem Diskです。
- **System storage details**には、二つの25GB Diskが見えており、新規のRHEL 8 System Diskと保持したRHEL 7 System Diskであります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/dfe3ae0f-94d2-f562-780f-f295f82c58fd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2075462/75683a12-a492-af11-15fa-9d94dfa29d4b.png)

VSIをSSH Loginして、CMDでOSとDiskの状況をチェックします。
CMD **cat /etc/os-release**の出力により、現在のOSは**Red Hat Enterprise Linux 8.7**に変更しました。

```ctr:SSH Terminal
[root@virtualserver01-helen ~]# cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.7 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.7"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.7 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8::baseos"
HOME_URL="https://www.redhat.com/"
DOCUMENTATION_URL="https://access.redhat.com/documentation/red_hat_enterprise_linux/8/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.7
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.7"
[root@virtualserver01-helen ~]#
```

OS Reload前に準備した**SampleFileBeforeUpgrade.txt**は、もちろん現在の **/root**　folderに見えなくなりました。
```ctr:SSH Terminal
[root@virtualserver01-helen ~]# ll
total 4
-rw-r--r--. 1 root root 665 Jul 13 05:59 redhat_subscription.log
```
**Fdisk**で現在のDisk情報を確認して、**xvda**と**xvdc**の25GB Diskがあることが分かりました。
**注**：出力が長すぎて、一部の行が削除されました。


```ctr:SSH Terminal
[root@virtualserver01-helen ~]# fdisk -l
Disk /dev/xvda: 25 GiB, 26843701248 bytes, 52429104 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xb55622f5

Device     Boot   Start      End  Sectors Size Id Type
/dev/xvda1 *       2048  2099199  2097152   1G 83 Linux
/dev/xvda2      2099200 52428799 50329600  24G 83 Linux
......
Disk /dev/xvdc: 25 GiB, 26843701248 bytes, 52429104 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x97bf69a8

Device     Boot   Start      End  Sectors Size Id Type
/dev/xvdc1 *       2048  2099199  2097152   1G 83 Linux
/dev/xvdc2      2099200 52428799 50329600  24G 83 Linux
```

File Systemを確認してみますと，**xvda**はMountされております。**xvdc**はMountされてない、アクセスできない状態です。

```ctr:SSH Terminal
[root@virtualserver01-helen ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        928M     0  928M   0% /dev
tmpfs           978M     0  978M   0% /dev/shm
tmpfs           978M   17M  962M   2% /run
tmpfs           978M     0  978M   0% /sys/fs/cgroup
/dev/xvda2       24G  1.7G   21G   8% /
/dev/xvda1      974M  215M  692M  24% /boot
tmpfs           196M     0  196M   0% /run/user/0
```

つまり、RHEL 7のSystem Diskは保持されましたが、OS Reloadしてからは直接アクセスできません。以前のDataを復旧するため、そのDiskをMountする操作が必要です。手順は次の通りです。

```ctr:SSH Terminal
[root@virtualserver01-helen ~]# mkdir /mnt/rhel7_data
[root@virtualserver01-helen ~]# mount /dev/xvdc2 /mnt/rhel7_data
[root@virtualserver01-helen ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        928M     0  928M   0% /dev
tmpfs           978M     0  978M   0% /dev/shm
tmpfs           978M   17M  962M   2% /run
tmpfs           978M     0  978M   0% /sys/fs/cgroup
/dev/xvda2       24G  1.7G   21G   8% /
/dev/xvda1      974M  215M  692M  24% /boot
tmpfs           196M     0  196M   0% /run/user/0
/dev/xvdc2       24G  1.2G   22G   6% /mnt/rhel7_data
[root@virtualserver01-helen ~]# ll /mnt/rhel7_data/root/
total 8
-rw-r--r--. 1 root root 665 Jul 13 04:04 redhat_subscription.log
-rw-r--r--. 1 root root  39 Jul 13 03:35 SampleFileBeforeUpgrade.txt
```

以上は、OS ReloadしてClassic VSIをRHEL 7からRHEL 8へUpgradeする手順、及び、Reloadした前のDataをアクセスする手順については、紹介しました。

# システムへの影響及び注意点、そして、よくある質問

既に気づいたと思いますが、OS ReloadよりVSI RHELをUploadする方法は、実は新しいOSを構築するという方法です。
‐ **OS Reload with Disk Preservation**しないと、同じDiskでRHEL 8を実行して、前のRHEL 7に導入されたMiddleware、Application及びDataは、すべて上書きされてなくなりました。
‐ **OS Reload with Disk Preservation**を有効にしたら、新規DiskでRHEL 8を実行して、以前の環境はPortable Diskとして保持されています。

従って、いずれにしても、新規のRHEL 8のVSI環境には、お客様ご自身でMiddleware、ApplicationおよびDataを復旧する必要があります。Dataの復旧はPortable Diskから移行できますので、わりと簡単かなと思いますが、Softwareの復旧はシステムの構成により様々な状況があります。

ですので、RHEL Upgradeを検討する際に、必ず事前のシステムバックアップ、そして、後の復旧作業を含めて検討していただければと思います。もし、システムやApplicationの構築には、Ansibleなどの自動化ツールを利用している場合、復旧作業が大幅に低減でき、楽になれると思います。

また、以下についてはよく聞かれますので、お伝えします：
1. OS Reloadしても、VSIのIP Addressが変更しません。
2. OS Reloadする際、必ずVSI Downtimeがあります。実際のDowntime時間はOSのバージョンとDisk Sizeに依存してますが、大体数分ぐらになります。
3. **OS Reload with Disk Preservation**を有効にしたら, そのPortable DiskはBlock Storageとして料金が発生します。

# 他の道があるかとうか

IBM CloudはOS Reloadのやり方を推薦していますが、 システム全体を考えてDowntimeを避けたい場合、現行環境を保持してまま、新規環境でRHEL 8の上にシステムを構築するという方法も可能です。平行期間にはCloud料金が倍になるとのデメリットがありますが、Downtimeを避けてしっかり検証できるとのメリットもあります。


# 最後に

以上は私の理解で書いた内容です。間違い点が出ましたら、ごコメントいただければ幸いです。