zaki work log

作業ログやら生活ログやらなんやら

Proxmox VEを使った仮想環境をMINISFORUM NAB6に構築しESXiからVMを移行

2023-08-11: RHELVMの起動エラーの対応について追記

新しく購入したMINISFORUM NAB6に自宅検証マシンとして仮想化プラットフォームのProxmox VEをセットアップしたのでその記録。

上に乗せてるのはサイズ比較用キーボードのキートップストラップ

🤡

先日ふと見つけた小型PCが良さそうと思ったら、意外と周りでみんな購入してたみたいなので便乗して購入。
バイスそのものはレビュー記事があるのでそちら参照。

pc.watch.impress.co.jp

今回購入したのは以下。
NAB6本体(ベアボーン)は「ご注文頂いた商品は5~7営業日以内に出荷致します」とのことだったが、注文が5/11の朝で届いたのは5/13の夕方だった。ちなみに発送通知は5/15(笑)

機材 価格
Minisforum NAB6 55,580
メモリ 32GBx2 17,001
M.2 SSD 2TB 12,741
SSD用ヒートシンク 980

本体はベアボーンキットだとヒートシンクがついてない(実際はフィンなしの板1枚はついてたが…)ため、ちょっと心許ないので別途購入。
ちなみにベアボーンじゃないやつだとファン付きのヒートシンクっぽいので似たのを探したけどサイズが合わず…さらに高さ10mmなら行けそうなサイズ感だったので10mmのヒートシンクを買うと、実際は11mmでサーマルパッドも付着すると12mmになったりと一番苦労したかも(笑)

あと内蔵のSATA SSD(1TB)は以前買って使ってなかったのがあったのでそれを流用。
※ OSインストール時は未接続で、あとから追加。

NUCのときと違って電源ケーブルはすべて付属品に含まれてる。

ちなみにNUCに入れてるESXiで構築した現検証環境をこのProxmoxへ移行して、現在メインのWindowsマシンがハード的に11にアップグレードできないのでNUCに移行しようかなと思ってるところ。(いつになることやら)

Proxmox Virtual Environment

www.proxmox.com

DebianベースのOSS仮想化プラットフォームで紹介記事は以下で以前見つけて、今はESXiを使ってたけど今度はこれを使ってみようと思ってた。

internet.watch.impress.co.jp

インストール

メディアは以下から入手。

www.proxmox.com

ここでproxmox-ve_7.4-1.isoをダウンロード。(2023-05-14時点)
約1GBあるので、USBメモリでブートメディアを作成。

zaki-hmkc.hatenablog.com

セットアップは作成したUSBからブートして進める…と思いきやSecure Bootのエラーが発生。

結局原因はわからなかったけど、BIOSでSecure Bootの設定をdisableにして回避。
ちなみにセットアップがすべて完了して再度Secure Bootを有効にしても問題なかったので、本体側でなくUSBブートメディアの方に問題があったのかもしれない。

あとはインストールするストレージやファイルシステム(デフォルトのext4を選択)、タイムゾーンやrootパスワード、ネットワーク設定等を入力すればOK
NICは2つついてるので、どちらのポートを使うかは写真を撮るとかしてメモしておくと万全 (訳:一度ばらした後にわからなくなった笑)

セットアップが終了するとGUIの画面からターミナルに切り替わるので、表示の通りexitCtrl-dでリブートする。

リブートしたらCLIのログイン画面が表示される。
あとは表示されているURLにブラウザでwebアクセスするかSSHアクセス(SSHは標準の22/TCP)でOKなので、キーボード類やモニターは外してもヨシ。

ログイン

webブラウザでアクセスするとログイン画面になるので、インストール時に入力したパスワードを入力(ユーザー名は初期値root)。
言語は日本語も選択可能(ログイン後でも変更可能)。

ログイン時に有償のサブスクリプションを使用していないと下記警告が表示されるが、無償で使用する上では仕方ないので気にしない。

SSHアクセスの場合は普通にsshコマンドなり使用してrootユーザーでログインする。

root@pve:~# uname -a
Linux pve 5.15.102-1-pve #1 SMP PVE 5.15.102-1 (2023-03-14T13:48Z) x86_64 GNU/Linux
root@pve:~# python3 --version
Python 3.9.2

SSH接続できてPythonもあるのでAnsibleで直接いじれそう。

CPUやメモリはこんな感じ。

root@pve:~# grep cpu.cores /proc/cpuinfo | uniq
cpu cores       : 10
root@pve:~# grep processor /proc/cpuinfo | wc -l
16
root@pve:~# free -h
               total        used        free      shared  buff/cache   available
Mem:            62Gi       3.3Gi        45Gi        61Mi        13Gi        58Gi
Swap:          8.0Gi          0B       8.0Gi

webの画面で見れるサマリーだとこんな感じ(各種設定変更済みでVMもいくつか作ったあと)。

apt設定

セットアップ直後の状態では商用リポジトリが有効になっているため、サブスクリプションが無いと以下のようにエラーとなる。

root@pve:~# apt-get update
Get:1 http://security.debian.org bullseye-security InRelease [48.4 kB]
Hit:2 http://ftp.jp.debian.org/debian bullseye InRelease
Get:3 http://security.debian.org bullseye-security/main amd64 Packages [242 kB]
Get:4 http://ftp.jp.debian.org/debian bullseye-updates InRelease [44.1 kB]
Get:5 http://security.debian.org bullseye-security/main Translation-en [158 kB]
Err:6 https://enterprise.proxmox.com/debian/pve bullseye InRelease
  401  Unauthorized [IP: 51.91.38.34 443]
Reading package lists... Done
E: Failed to fetch https://enterprise.proxmox.com/debian/pve/dists/bullseye/InRelease
401  Unauthorized [IP: 51.91.38.34 443]
E: The repository 'https://enterprise.proxmox.com/debian/pve bullseye InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
root@pve:~#

今回は無償版で利用のため、既存のエンタープライズ向けリポジトリの設定を無効化

mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.disabled

無償版のリポジトリ設定を追加

cat <<__EOL__ > /etc/apt/sources.list.d/pve-no-subscription.list

# PVE pve-no-subscription repository provided by proxmox.com,
# NOT recommended for production use
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription
__EOL__

これでaptが使えるようになる。

root@pve:~# apt-get update 
Hit:1 http://security.debian.org bullseye-security InRelease
Hit:2 http://ftp.jp.debian.org/debian bullseye InRelease
Hit:3 http://ftp.jp.debian.org/debian bullseye-updates InRelease
Get:4 http://download.proxmox.com/debian/pve bullseye InRelease [2,661 B]
Get:5 http://download.proxmox.com/debian/pve bullseye/pve-no-subscription amd64 Packages [411 kB]
Fetched 414 kB in 7s (58.1 kB/s)
Reading package lists... Done
root@pve:~# apt-get upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  pve-kernel-5.15
The following packages will be upgraded:
  base-files debian-archive-keyring grep isc-dhcp-client isc-dhcp-common
  libavahi-client3 libavahi-common-data libavahi-common3 libc-bin libc-l10n
  libc6 libncurses6 libncursesw6 libnss-systemd libnvpair3linux libpam-systemd
  libpve-access-control libpve-common-perl libpve-http-server-perl
  libpve-rs-perl libsystemd0 libtinfo6 libudev1 libunbound8 libuutil3linux
  libxml2 libzfs4linux libzpool5linux locales ncurses-base ncurses-bin
  ncurses-term postfix proxmox-backup-client proxmox-backup-file-restore
  proxmox-widget-toolkit pve-edk2-firmware pve-firewall pve-firmware
  pve-ha-manager pve-i18n qemu-server spl systemd systemd-sysv traceroute
  tzdata udev zfs-initramfs zfs-zed zfsutils-linux
51 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 133 MB of archives.
After this operation, 1,786 kB of additional disk space will be used.
Do you want to continue? [Y/n]

pve.proxmox.com

NAS設定(NFS)

ディストリビューションインストール用のISOファイルを置いているファイルサーバー(NFS)をストレージに追加する。
このファイルサーバーはQNAPで静的なファイルを置いてるだけなのでread onlyで運用中のもの。

追加は「データセンター」->「ストレージ」->「追加」で、「NFS」を選択。

IDは表示名になるのでサーバー名などを入力、内容はデフォルトで「ディスクイメージ」になってるが、これはVMのストレージ領域として使うための選択肢なので、ISO置き場としては「ISOイメージ」を指定する。

ただしファイルのパスは自由に使えるわけでなくISOイメージ置き場の場合はtemplate/iso/*.isoというパスにファイルを配置しておく必要がある。ディレクトリが無い場合は、NAS設定の作成時に自動的に作成されるため、NFSサーバー自体をread onlyにしてある場合は下記エラーになるので注意。

create storage failed: mkdir /mnt/pve/pecorino/template/iso: Read-only file system at /usr/share/perl5/PVE/Storage/Plugin.pm line 1374. (500)

回避するには事前にtemplate/iso/というパスを作成しておけばOK
すでにISOファイルがある場合はそのパスにイメージファイルを置いておくか、別のパスにある場合はsymlinkを作っておいても動作はする。ただしサブディレクトリまでは見ないっぽいので注意。

[zaki@Pecorino template]$ ln -s ../archive/iso/ .
[zaki@Pecorino template]$ ls
iso@

これでVM作成時にNFSサーバー上のISOファイルを参照できるようになる。

といってもread onlyだとVMのストレージ領域にできないのでwrite権限つけてもよいかな。。
というかQNAP買ってセットアップしたときの作業ログはブログ書くの忘れてたなぁ

内蔵ストレージ追加

追加のSATA SSDをストレージとして作成する。今回はProxmox本体と同様に「LVM Thinpool」でストレージを作成してみた。
メニューは「ノード」以下の「ディスク」->「LVM-Thin」の「作成: Thinpool」ボタンから。
名前には分かりやすい名称を付与する。(以下はディスク名)

これでVMのディスク領域として使用できる状態になる。

VM作成おためし (RHEL9)

ざっくり準備できたので(ストレージ追加はなくてもいいんだけど)、VM作成を試してみる。
といっても基本的にはウィザードに沿って入力していけばOK

以下はLinuxの場合

  • 全般
    • ノード: どのProxmoxノードに作成するか。1台しかなければそのまま
    • VM ID: 100から連番ふられるが任意の値を指定できる。ツリーの表示はID順になるっぽいので用途ごとに上位桁を分けると良いかも
    • 名前: リストに表示されるVM
  • OS
    • CD/DVD イメージファイル(iso)を使用する (の場合)
      • ストレージ: ISOイメージを置いているストレージ名(前述NFSサーバーを指定)
      • ISOイメージ: ISOイメージファイル名
    • ゲストOS
      • 種別: Linux
      • バージョン: 6.x (入れるOSに合わせる)
  • システム
    • 全てデフォルトのままにした
    • win11の場合は「TPM追加」が必要かも
  • ディスク
    • ストレージ: デフォルトだとlocal-lvmだが追加ストレージにする場合は変更
    • ディスクサイズ: VMのディスクサイズ
  • CPU
  • メモリ
    • 自由に
  • ネットワーク
    • デフォルト(ブリッジ:vmbr0)で

以上でだいたいOK。
ただしRHEL9やRHELクローンのver9系(Rocky Linux 9 / AlmaLinux 9など)の場合はCPU種別がデフォルトだと起動できないため調整が必要。

ESXiからVMをインポート

CLIの操作でESXiのovfファイルをProxmoxにインポートできる。

pve.proxmox.com

ESXiからエクスポートするにはメニューの通り。
nvramはチェック無しでOK

エクスポートしたVMデータ(ovf, mf, vmdk)を同一パスに配置し、以下のコマンドを実行。
NFSとしてストレージ追加している場合は、シェル上からは/mnt/pve(Proxmoxホスト名?)/(NFSストレージ名)/として見れるので、そこへアップしておけばProxmox本体へコピーしなくてよいので楽。

実行するコマンドは以下の通り。

qm importovf <VM ID> <OVFファイルのパス> <VM用ストレージ名>

実行例は以下

root@pve:~# qm importovf 201 /mnt/pve/pecorino/archive/export/fedora-node/fedora-node.ovf wdblue1000gb
  Logical volume "vm-201-disk-0" created.
transferred 0.0 B of 20.0 GiB (0.00%)
transferred 204.8 MiB of 20.0 GiB (1.00%)
transferred 409.6 MiB of 20.0 GiB (2.00%)
:
:
transferred 20.0 GiB of 20.0 GiB (100.00%)
root@pve:~# 

インポートが正常終了するとwebの画面でも確認できる。

ただし、このままだと起動に失敗してしまう。
メッセージを見る感じではストレージが見えてない系ぽい?

Warning: /dev/fedora_fedora-node/root does not exist
Warning: /dev/mapper/fedora_fedora--node-root does not exist

[...]

[ 273.929841] dracut-initqueue[320]: Warning: Not all disks have been found.
[ 273.930089] dracut-initqueue[320]: Warning: You might want to regenerate your initramfs.

これは試した限りでは、SCSIコントローラをデフォルトの「既定 (LSI 53C895A)」から、VMware系っぽい「VMware PVSCSI」に変更すれば起動するようになる。(手動でVM作成する際に選択される「VirtIO SCSI single」はNG)

それ以外は特にいじってないけど今のところ(そこまで使い込んでないけど)不都合はなさそう。
スナップショットの作成とロールバックも問題無し。

また、見た感じNICの情報は維持されないので、メニューから「追加」->「ネットデバイス」で追加しておく。

ただNICを追加してもOSから認識しないというか、ESXiのときはens192として認識してたNICがProxmoxだとens18と認識されるため、インポートしたOSの設定のままだと各インタフェースの設定は保持されないので、ここは仕方なく手動で設定。
(なんかいい方法あるかもしれないけど)

NetworkManager (Fedora)

こんな感じでens192ens224が無効になって、有線接続 1有線接続 2が新たに生えている。
コンソールだと日本語入らないけど幸い新しいNICDHCP認識してるのでSSHで作業した。

[zaki@fedora-node ~]$ nmcli c s
NAME             UUID                                  TYPE      DEVICE
有線接続 1       e8d83bb5-ce0a-3fe8-911e-8bc57153091c  ethernet  ens18
br-9b1bfc32fea5  f808aa0b-3ee5-4ab3-9af9-6aef3215fc99  bridge    br-9b1bfc32fea5
br-24c821ab22f0  3625a49a-099a-4560-bc1b-3f64f2c1d2d8  bridge    br-24c821ab22f0
br-65ba7d0c1caa  d93864cf-8346-4b60-9caa-4139237f7731  bridge    br-65ba7d0c1caa
br-763770ba04fc  b84c90a4-b650-4fab-aebb-6b464ee6a301  bridge    br-763770ba04fc
br-d33238542cd6  84ece348-7c80-4fdc-9478-94c0d796a56c  bridge    br-d33238542cd6
docker0          121f5c05-2622-4c7e-bc08-84a6b07c40d3  bridge    docker0
ens192           ec32aa1a-e977-3099-8c96-811df833013b  ethernet  --
ens224           ec71b82c-3884-31da-bfa7-4b221a0dad31  ethernet  --
有線接続 2       43a4c329-f0de-3b8d-a812-25262e7d5954  ethernet  --
[zaki@fedora-node ~]$ ls -l /etc/NetworkManager/system-connections/
合計 8
-rw-------. 1 root root 365  5月  1  2021 ens192.nmconnection
-rw-------. 1 root root 367  8月 21  2021 ens224.nmconnection

まずは既存設定のサルベージと内容の調整
(ens192となってる箇所をens18にし、uuidの値を現在のens18の値に書き換え)

sudo mv /etc/NetworkManager/system-connections/ens192.nmconnection /etc/NetworkManager/system-connections/ens18.nmconnection
sudo vi /etc/NetworkManager/system-connections/ens18.nmconnection

インタフェース削除(この実行でSSHが切断される)

sudo nmcli c delete "有線接続 1"

NetworkManager再起動

sudo systemctl restart NetworkManager

これで前のネットワーク設定をens18として使用できる。
(もうちょっと要領良くできそうな気はするけどとりあえず)

interfaces (Debian)

Fedora(NetworkManager)と違ってDHCPで別のインタフェースが作成されたりしないのでコンソールで作業。
といっても/etc/network/interfacesファイルに既存定義があるので、ファイル内のens192ens18に変更し、以下コマンドを実行でOK

if up ens18

netplan (Ubuntu)

Debianの場合と同じくDHCPが動いたりはしないので直接設定ファイルを更新する。
ファイルは/etc/netplan/00-installer-config.yamlにある。(もしかすると環境によってファイル名が違うかも。。パスは同じ)

ファイルを開いてens192になっている箇所をens18に変更し、以下コマンドを実行すればOK

netplan apply

ドキュメント

pve.proxmox.com

サイズ感(おまけ)