PR

AlmaLinux 9 をProxmox VE へP2V移行・最適化手順書

概要

本手順は、物理サーバーのAlmaLinux 9を、Proxmox VEの仮想環境(VM)へ移行する手順である。
移行先のディスク容量制限を考慮し、物理ディスクを丸ごと転送(dd)するのではなく、「最初から小さい容量のVMを作成し、ネットワーク経由でデータ実容量のみを直接同期(rsync)する」ことで、移行先ストレージの浪費を防ぎ、かつUEFIブートおよびスワップの最適化までを確実に行う手法である。


※本手順については、私の環境では上手くいきましたが、その他の環境でもうまくいくとは限りません。ですので、途中で詰まった時などの参考になれば幸いです。


【フェーズ1】移行先VMの作成(Proxmox側)

物理サーバーの実データ使用量に合わせた「最小限のディスク容量」で新規VMを作成する。

  1. 新規VM作成:
    • OS: 「Do not use any media」を選択
    • System: BIOSを OVMF (UEFI) に変更。EFI Storageを追加(Machineは q35 推奨)。
    • Disks: 必要な容量(実データ+余裕分)でハードディスク(SCSI)を作成。
  2. ISOのセット: CD/DVDドライブに「AlmaLinux 9 のインストールISO」をセットする。
  3. レスキュー起動: VMを起動し、メニューから 「Troubleshooting」 > 「Rescue an AlmaLinux system」 を選択してターミナル(シェル)に入る。

【フェーズ2】新VMのディスク初期化とマウント

メモリ上の仮環境(ラムディスク)への誤書き込み(No space left on device)を防ぐため、内蔵ハードディスクをフォーマットしてマウントする。

# 1. ディスク名(例: sda)を確認
lsblk

# 2. パーティション(sda1)の作成(GPT形式)
parted /dev/sda mklabel gpt
parted /dev/sda mkpart primary xfs 1MiB 100%

# 3. メインシステム用のXFSフォーマット
mkfs.xfs -f /dev/sda1

# 4. 正しいマウント先を作成してマウント
mkdir -p /mnt/sysimage
mount /dev/sda1 /mnt/sysimage

【フェーズ3】物理サーバーからのデータ直接同期(プル転送)

物理サーバーが稼働している状態(またはLive環境)で、新VMのレスキューモード画面から、ネットワーク経由で実データのみを吸い出す(プルする)。

# 新VM側(レスキュー)から、物理サーバーのIPを指定して実行(要rootパスワード入力)
rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} root@<物理サーバーのIP>:/ /mnt/sysimage/

※ この処理により、物理環境の空き容量(無駄なスペース)は転送されず、最小限の容量でProxmox内にデータがコピーされる。


【フェーズ4】UEFI起動パーティション(FAT32)の追加

UEFIマザーボードが直接読み込めるように、ディスクの末尾に起動専用のFAT32領域(ESP)を追加する。

  1. Proxmox側でのディスク拡張:
    Proxmox GUIの「Hardware」>対象ディスク>「Disk Action」>「Resize」から、ディスクを 1 GiB だけ拡張する。
  2. 新VM(レスキュー画面)でのパーティション追加
# カーネルに拡張を認識させた後、partedを起動(Fixの警告が出たら「Fix」を選択)
parted /dev/sda
(parted) mkpart primary fat32 -1GiB 100%
(parted) quit

# 作成された /dev/sda2 をFAT32で初期化(Warningは無視して進行してOK)
mkfs.vfat -F 32 /dev/sda2

# 起動フォルダーとしてマウント
mkdir -p /mnt/sysimage/boot/efi
mount /dev/sda2 /mnt/sysimage/boot/efi

【フェーズ5】システム環境の修復(chroot)

仮想マシンの構成に合わせて、ブートシステム、マウント設定、ネットワークを一新する。

1. 仮想ルート環境(chroot)への移行

mount --bind /dev /mnt/sysimage/dev
mount --bind /proc /mnt/sysimage/proc
mount --bind /sys /mnt/sysimage/sys
mount --bind /run /mnt/sysimage/run
chroot /mnt/sysimage

2. マウント設定(/etc/fstab)のクリーン化

vi /etc/fstab でファイルを開き、古い物理環境のUUID行(/boot や swap)をすべてコメントアウト、または削除し、今回作成したシンプルな構成を定義する。

/dev/sda1   /           xfs    defaults   1 1
/dev/sda2   /boot/efi   vfat   defaults   0 2

3. UEFI起動ファイルの配置(ISOメディアから抽出)

ネットワークがない環境のため、マウントされているAlmaLinux 9のインストールISOから本物のEFIファイルを直接コピーする。

# (一度 chroot を抜けてISOをマウント)
exit
mkdir -p /mnt/cdrom
mount -o ro /dev/sr0 /mnt/cdrom

# 各種自動起動パスへファイルを配置
mkdir -p /mnt/sysimage/boot/efi/EFI/almalinux
mkdir -p /mnt/sysimage/boot/efi/EFI/BOOT
cp /mnt/cdrom/EFI/BOOT/BOOTX64.EFI /mnt/sysimage/boot/efi/EFI/almalinux/shimx64.efi
cp /mnt/cdrom/EFI/BOOT/grubx64.efi /mnt/sysimage/boot/efi/EFI/almalinux/grubx64.efi
cp /mnt/cdrom/EFI/BOOT/BOOTX64.EFI /mnt/sysimage/boot/efi/EFI/BOOT/BOOTX64.EFI
cp /mnt/cdrom/EFI/BOOT/grubx64.efi /mnt/sysimage/boot/efi/EFI/BOOT/grubx64.efi

umount /mnt/cdrom
chroot /mnt/sysimage

4. ブートローダーの従来方式(BLS無効)固定とメニュー生成

AlmaLinux 9の新しいブート仕様(BLS)によるバグと、grub> コンソールへの逆戻りを防ぐため、確実な従来方式(BLSCFG=false)に固定する。

vi /etc/default/grub を開き、最下行に以下を追加。

GRUB_ENABLE_BLSCFG=false

設定ファイル(grub.cfg)のクリーン再生成。

# 古い残骸を一度全削除
rm -f /boot/efi/grub.cfg /boot/efi/EFI/BOOT/grub.cfg /boot/efi/EFI/BOOT/BOOTX64.cfg /boot/efi/EFI/almalinux/grub.cfg /boot/grub2/grub.cfg

# XFS側、およびGRUBが参照する可能性のある「すべてのEFI起動パス」へ上書き配置
grub2-mkconfig -o /boot/grub2/grub.cfg
mkdir -p /boot/efi/EFI/BOOT
cp /boot/grub2/grub.cfg /boot/efi/EFI/almalinux/grub.cfg
cp /boot/grub2/grub.cfg /boot/efi/EFI/BOOT/grub.cfg
cp /boot/grub2/grub.cfg /boot/efi/EFI/BOOT/BOOTX64.cfg
cp /boot/grub2/grub.cfg /boot/efi/grub.cfg

初期RAMディスク(仮想ドライバーの統合)の強制再構築。

dracut --force --regenerate-all

環境を抜けてシャットダウンし、ProxmoxのGUIからインストールISO(CDメディア)を取り外す(Do not use any media)。

exit
poweroff

【フェーズ6】起動後のネットワーク復旧(NIC最適化)

VMとして通常起動した後、変化した仮想NIC(例: ens18)をOSに認識させ、通信を復旧する。

  1. ip a コマンドで新しいネットワークインターフェース名(例:ens18)を確認。
  2. sudo nmtui を実行。
    • 物理環境時代の古い古い接続を「Delete(削除)」。
    • 「Add(追加)」>「Ethernet」を選択。
    • Device 欄に、新しいNIC名(例:ens18)を手動で正確に入力(これにより新しいMACアドレスと同期される)。
    • 必要に応じて固定IPまたはDHCPを設定し、保存。
  3. sudo systemctl restart NetworkManager で設定を反映させ、インターネットへの疎通(dnf の開通)を確認する。

【フェーズ7】スワップファイル(Swapfile)への移行と高速起動化

古い物理環境の「スワップパーティション(LVM)」が消えたことによる起動時のタイムアウト(90秒待ち)を解消し、扱いやすいファイル型スワップ(4GB)へ移行する。

    GRUB起動引数の修正:

    vi /etc/default/grub を開き、GRUB_CMDLINE_LINUX 内にある古いスワップの指定(resume=/dev/mapper/almalinux-swap 等)を削除し、grub2-mkconfig 等で反映する。

    スワップファイルの作成と有効化:

    # 4GBのファイルをゼロ埋めで作成
    sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile

    自動マウント設定:
    vi /etc/fstab の最下行に、次回起動時も自動有効化されるように追記する。

    /swapfile   none   swap   defaults   0 0

    これをもって、手動操作不要の自動高速ブート、ネットワーク疎通、容量最小化のすべてを兼ね備えたAlmaLinux 9仮想環境への完全移行が完了となる。

    今回はここまでです。最後までお読みいただきありがとうございました。