Closed7
物理サーバのUbuntu ServerをProxmox VEのVMに移行する
移行元の環境
物理マシンで稼働しているUbuntu Server 22.04
移行先
Proxmox VE 8.3のゲストVM
ProxmoxのストレージはLVM+ext4
先に書いておきますが、ブート領域をダンプしなかったため一度Ubuntu Serverをクリーンインストールする手間が増えています。ディスクイメージをホストのProxmox上でマウントしてブートパーティションを戻したあと btrfs receive
すればよかったかもしれません。
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
Proxmox VE 8.3をUbuntuが入っていたSSDに入れる。
Ubuntuをインストールする。
物理マシンはEFIで動いていたため、SeaBIOSではなくOVMF(UEFI)にする。
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
これでゲスト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
起動したものの 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にクローズされました