Closed7

物理サーバのUbuntu ServerをProxmox VEのVMに移行する

itochanitochan

移行元の環境
物理マシンで稼働しているUbuntu Server 22.04

移行先
Proxmox VE 8.3のゲストVM
ProxmoxのストレージはLVM+ext4

先に書いておきますが、ブート領域をダンプしなかったため一度Ubuntu Serverをクリーンインストールする手間が増えています。ディスクイメージをホストのProxmox上でマウントしてブートパーティションを戻したあと btrfs receive すればよかったかもしれません。

itochanitochan

NVMe SSD 1TBからVMに割り当てるディスクは少なくなるため、ddをするのではなくパーティション単位でダンプする。
BtrfsだったのでBtrfsのスナップショットを作り btrfs sendでファイルに書き込む
ちなみに /pool はBtrfsフォーマットされた外部ディスク

sudo mkdir /@snapshots
sudo btrfs subvolume snapshot -r / /@snapshots/dump
sudo btrfs send -v /@snapshots/dump -f /pool/dump
itochanitochan

Proxmox VE 8.3をUbuntuが入っていたSSDに入れる。

itochanitochan

Ubuntuをインストールする。
物理マシンはEFIで動いていたため、SeaBIOSではなくOVMF(UEFI)にする。

itochanitochan

Proxmox VEのシェルでBtrfsスナップショットを復元する。
ProxmoxのゲストVMを見せるため kpartx でマッピングを行う。
ZFSだともっと簡単そうだけど物理マシンがN100ミニPCなのでZFSではなくLVM+ext4。

% apt install kpartx
# VMIDが101の場合
% kpartx -av /dev/mapper/pve-vm--101--disk--0

% mkdir /mnt/server
# せっかくUbuntuをインストールしたけど一度全部消してしまう
% mkfs.btrfs -f /dev/mapper/pve-vm--101--disk--0p2
% mount /dev/mapper/pve-vm--101--disk--0p2 /mnt/server

# 外部ストレージをマウントする
% mkdir /pool
% mount /dev/sda /pool
% btrfs receive -f /pool/dump /mnt/server

# /mnt/server/dump にスナップショットが復元されているため、ルートに復元する
# --reflink=always でCoWを利用する
% cp -a --reflink=always /mnt/server/dump/* /mnt/server
itochanitochan

これでゲストVMをブートしてみたが、ブート領域のパーティションに書かれているパーティションがフォーマットし直しているので存在しないためGRUBシェルが立ち上がる。

set prefix=(hd0,gpt2)/boot/grub
set root=(hd0,gpt2)
insmod normal
normal

insmod linux
linux /vmlinuz-6.8.0-49-generic root=/dev/sda2
initrd /initrd.img-6.8.0-49-generic
boot

https://unix.stackexchange.com/questions/418401/grub-error-you-need-to-load-kernel-first

itochanitochan

起動したものの rescue modeになる

# /dev/sda1 へのUUIDを確認しておく
% ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 10 Dec  3 22:50 2AB4-013C -> ../../sda1
% vi /etc/fstab

/boot/efi の箇所を変更しておく

/dev/disk/by-uuid/2AB4-013C /boot/efi vfat defaults 0 1
% mount /dev/sda1 /boot/efi
% grub-mkconfig -o /boot/grub/grub.cfg
% grub-install --efi-directory=/boot/efi
% reboot
このスクラップは2024/12/03にクローズされました