RHEL – Ubuntu マルチブート環境の構築

既にRHELが稼働している検証機に、故あってUbuntuを追加しマルチブート環境を構築する必要に迫られました。パーティション操作やGRUBの再設定が必要でやや手間取りましたので、備忘を兼ねて書き残すことにします。

1. 初期状態の確認と方針の策定

検証用RHEL 8.7 環境を確認すると、パーティションとLVMは次のような構造になっていました。

lsblk
  NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
  sda             8:0    0 465.8G  0 disk
  ├ sda1          8:1    0     1G  0 part /boot
  └ sda2          8:2    0 464.8G  0 part
    ├ rhel-root 253:0    0    70G  0 lvm  /
    ├ rhel-swap 253:1    0   7.8G  0 lvm  [SWAP]
    └ rhel-home 253:2    0   387G  0 lvm  /home

/home は387GBもいらないので、ここを縮小してUbuntu関係のインストール領域に変えることとします。
とはいえ既存のPVにインストールはできないので、/homeの縮小に合わせて大本の物理ディスクパーティションも縮小しましょう。

2. 空き領域の確保

ファイルシステム縮小 → LVM LV縮小 → LVM PV縮小 → パーティション縮小 の順で実施し、空き領域を確保します。
RHELのファイルシステムはXFSですが、ext4と違って単純な縮小に対応しておらず、バックアップ – リストア による手順を採る必要があります。

xfsdump -l 0 - /dev/mapper/rhel-home > /hoge/back.dump #バックアップ取得
umount -l /home                                        #縮小のためアンマウント
lvreduce -L 100G /dev/rhel/home                        #LV縮小
mkfs.xfs -f /dev/mapper/rhel-home                      #縮小後LVに、新規でファイルシステム構築
mount /dev/rhel/home /home                             #リストアのためマウント
xfsrestore -f /hoge/back.dump /home                    #リストア

これで領域が空いたのでpvreduceを、と思いましたが、cannot resizeと怒られました。よく調べてみると、どうやら真ん中の領域が減っただけのようです。

pvdisplay -v -m
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               rhel
  PV Size               464.76 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              118978
  Free PE               73455
  Allocated PE          45523

  --- Physical Segments ---
  Physical extent 0 to 2002:
    Logical volume      /dev/rhel/swap
    Logical extents     0 to 2002
  Physical extent 2003 to 27602:
    Logical volume      /dev/rhel/home
    Logical extents     0 to 25599
  Physical extent 27603 to 101057:
    FREE
  Physical extent 101058 to 118977:
    Logical volume      /dev/rhel/root
    Logical extents     0 to 17919

それでもLVMであれば pvmove コマンドで Physical extentを移動できるようなので、移動して進めます。pvmoveは時間がかかるので気長に待ちましょう。

pvmove --alloc anywhere /dev/sda2:101058-118977 /dev/sda2:27603-45522  #Physical extent移動
pvresize --setphysicalvolumesize 182096M /dev/sda2                     #PV縮小 (サイズは-tで何度か試行し、ぴったりに合わせる)
pvdisplay --units b                                                    #パーティション分割用に情報取得
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               rhel
  PV Size               190940446720 B  / not usable 3145728 B           #必要セクタ数:190940446720 / 512 = 372930560
  Allocatable           yes (but full)
  PE Size               4194304 B
  Total PE              45523
  Free PE               0
  Allocated PE          45523
parted /dev/sda
(parted) unit s
(parted) print
ディスク /dev/sda: 976773168s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始      終了        サイズ      タイプ   ファイルシステム  フラグ
 1    2048s     2099199s    2097152s    primary  xfs               boot
 2    2099200s  976773119s  974673920s  primary                    lvm  #ここを、終了:(2099200 + 372930560 - 1) =  375029759 へ変更

(parted) resizepart 2 375029759
警告: パーティションを縮小するとデータを失うかもしれませんが、それでも実行しますか?
はい(Y)/Yes/いいえ(N)/No? Y
(parted) quit

3. Ubuntuのインストール

通常通りインストール用USBからブートし、基本はデフォルト設定で進めていきます。
ただし落とし穴が一つ、なぜかRHELインストール時にMBRディスクとなっていたようで、GPTと思い込みUEFI の表示がある起動デバイスを選択してはboot diskが選択できず小一時間足踏みをしてしまいました。
GPT : UEFI表記有りのインストールメディアからブート
MBR : UEFI表記なしのインストールメディアからブート
するようにしましょう。

あとはCustom storage layout から、2で作った空き領域を/に割り当て、boot diskも選択して待つだけです。
最後のReboot Now で再起動すると、無事Ubuntuが立ち上がりました。

4. RHELブート失敗のリカバリ

Ubuntuインストール後にRHELを起動したところ、以下のような表示が出てブートシーケンスが止まり、レスキューモードに入ってしまいました。

[FAILED] Failed to start Switch Root.
See 'systemctl status initrd-switch-root.service' for details.

Generating "/run/initramfs/rdsosreport.txt"

Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after mounting them and attach it to a bug report.

:/#

色々と確認したところ、/sysroot を / にスイッチしようとして失敗したようです。
現状の/sysroot を ls すると、本来あるべき / ではなく /home の内容が表示されました。
LVMを弄ったせいで、/sysroot にマウントされるLVが変わってしまったと推察されます。
まずは起動させないと何もできないので、/sysroot に正しいLVをマウントしてブートシーケンスを続行させます。

:/# umount /sysout
:/# mount /dev/rhel/root /sysroot
:/# exit

無事に起動することが確認できました。
あとは根本的な解決法の模索です。GRUB画面でeを押下し編集画面を確認したところ、ルートデバイスの指定が /dev/dm-* 形式になっていました。Ubuntuインストールによりdm番号がずれ、本来の root ではなく home のLVをルートデバイス扱いにしてしまっているようです。
GRUBの再設定を行います。
(注:バックアップは取りましょう。また、以下の手順はBIOSベースの場合です。UEFIベースの場合は別手順となりますので、参考文献「GRUB2の再インストール」を参照してください)

rm /etc/grub.d/*
rm /etc/sysconfig/grub                    #現状のGRUB設定削除
yum reinstall grub2-tools                 #GRUB再設定
grub2-mkconfig -o /boot/grub2/grub.cfg    #grub.cfg ファイルの再構築

これで、RHEL側のルートデバイスも /dev/mapper/ 形式の指定に更新されました。
Ubuntu, RHELともに正常起動を確認し、作業完了です。


参考文献
rootのXFSファイルシステムを縮小する方法
LinuxのLVMパーティションを縮小してWindowsをインストールした
GRUB 2 の再インストール

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です