仮想化プラットフォームProxmox VEをラズパイに移植した「Pimox」を試す

仮想化プラットフォームProxmox VEをラズパイに移植した「Pimox」を試す
Page content

省電力な仮想化基盤を

x86_64マシンで構築した自宅内のProxmox VE (Proxmox Virtual Environment) はサーバ実験などで重宝している (参考: Proxmox VEで仮想化プラットフォームを簡単構築 [2022-04-09])。そのProxmox VEをRaspberry Pi 4でも動かせると知ったので試してみよう。ラズパイ4なら、搭載メモリ量やマシンパワーは抑えられてしまうけれども、x86_64マシンよりも省電力な仮想化プラットフォームになりうる。

用意したもの

項目内容備考
ラズパイRaspberry Pi 4 Model B (4GB)余り物
SATA SSDSamsung SSD 850 EVO 500GB余り物
2.5インチHDDケースUSB 3.0接続のもの余り物
【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品【RS・OKdo版】

【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品【RS・OKdo版】

Raspberry Pi RS・OKdo

Samsung 870 EVO 500GB SATA 2.5インチ 内蔵 SSD MZ-77E500B/EC 国内正規保証品

Samsung 870 EVO 500GB SATA 2.5インチ 内蔵 SSD MZ-77E500B/EC 国内正規保証品

日本サムスン

手順1) USB-SSDで起動するRaspberry Pi 4を用意する

今回の試みのひと工夫として、最初に、Raspberry Pi 4をmicroSDカードではなく外付けのUSB-SSDから起動するようにしておく。

bootloaderを最新版に

ラズパイ4本体のbootloaderを最新にしておくために、ラズパイ4をUSB接続のSSDから起動する方法(USBブート) | ラズパイダ を参考に次の作業を進める。

  1. 「Raspberry Pi OS (64-bit) Lite」をmicroSDカードに焼いて、ラズパイ4を起動する
  2. bootloaderを最新版に更新する: sudo raspi-config > 6 Advanced Options > A7 Boot ROM Version > E1 Latest: Use the latest version boot ROM software を選択 (再起動する)
  3. boot順を変更する: sudo raspi-config > 6 Advanced Options > A6 Boot Order > B2 USB Boot: Boot from USB if available, otherwise boot from SD Card を選択

当環境の場合、bootloaderのバージョンは次のように変化した。

## bootloader更新前
$ vcgencmd bootloader_version
Apr 29 2021 17:11:25
version c2f8c388c4ee37ad709ace403467d163e8dd91ce (release)
timestamp 1619712685
update-time 1643339737
capabilities 0x0000001f
## bootloader更新後
$ vcgencmd bootloader_version 
2022/10/18 11:57:44
version 23aa699d0e70ed543c1ddcd17bed6446bfb6866e (release)
timestamp 1666090664
update-time 1667475307
capabilities 0x0000007f

$ sudo rpi-eeprom-update
BOOTLOADER: up to date
   CURRENT: Tue 18 Oct 10:57:44 UTC 2022 (1666090664)
    LATEST: Tue 18 Oct 10:57:44 UTC 2022 (1666090664)
   RELEASE: stable (/lib/firmware/raspberrypi/bootloader/stable)
            Use raspi-config to change the release.

  VL805_FW: Dedicated VL805 EEPROM
     VL805: up to date
   CURRENT: 000138a1
    LATEST: 000138a1

USB-SSDを起動デバイスにする

上記で用意したmicroSDカードの内容をまるごとUSB-SSDへ複製する。(※今回はUSB-SSDで起動するOSとしてmicroSDカードと同じ「Raspberry Pi OS (64-bit) Lite」を想定しているため、この複製の手順を実施しています)

  1. 作業用パソコンにmicroSDカードとUSB-SSDを接続し、それぞれのデバイス名を確認する。当環境ではコピー元 (microSDカード) = /dev/sda、コピー先 (USB-SSD) = /dev/sdb とわかる
## 作業用パソコンにて
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
〜(snip)〜
sda           8:0    1  14.9G  0 disk 
├─sda1        8:1    1   256M  0 part /media/USER/boot
└─sda2        8:2    1  14.6G  0 part /media/USER/rootfs
sdb           8:16   0 465.8G  0 disk 
〜(snip)〜
  1. ddコマンドを使って、microSDカードの内容をUSB-SSDへコピーする (bsの値は適当)
## 作業用パソコンにて
sudo dd if=/dev/sda of=/dev/sdb bs=256M
  1. USB-SSDをラズパイ4に接続して電源をONすると、ラズパイ4がUSB-SSDから起動してくる
  2. ラズパイ4起動後、ファイルシステムがUSB-SSDの全容量を使うように設定する: sudo raspi-config > 6 Advanced Options > A1 Expand Filesystem: Ensures that all of the SD card is available を選択 (再起動も選択する)
  3. ラズパイ4再起動後にUSB-SSDの領域を確認すると次の通りで、sda2パーティションが拡張されてSSDの全容量を使用できている
$ sudo fdisk -l /dev/sda
Disk /dev/sda: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: SSD 850 EVO 500G
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0523bb15

Device     Boot  Start       End   Sectors   Size Id Type
/dev/sda1         8192    532479    524288   256M  c W95 FAT32 (LBA)
/dev/sda2       532480 976773167 976240688 465.5G 83 Linux

メモ: USB起動対応済みのラズパイ4へのOS再導入

上記の設定を行って起動デバイスとしてUSB-SSDが利用できるようにしたラズパイ4で、OSの再インストールを行う時には、自分に染み付いているこれまでのラズパイの常識を忘れる必要がある。なぜなら、ラズパイ4をUSB-SSDから起動できるのだからmicroSDカードへのイメージ焼きはもう不要で、Raspberry Pi Imagerで任意のOSイメージを「USB-SSD」へ焼いてそのUSB-SSDからラズパイ4を起動すればよいので。

手順2) Pimoxをインストールする

Raspberry Piに移植されたProxmox VE (OSS仮想化プラットフォーム) の「Pimox」を、手順1で用意したラズパイ4にインストールする。

  1. pimox/pimox7: Proxmox V7 for Raspberry Pi にてハードウェア要件などを確認
  2. ラズパイ4へSSHログインした画面もしくは直接の端末画面で Install from “scratch”, RPiOS64bit Interactive Automatic Installer を実施し、途中で次の問い合わせに答える
    • hostname (当環境では「pimox-1」にした)
    • static IP address and NETMASK
    • gateway
    • root’s password
  3. インストールが進行して15分ほどで、ラズパイ4の再起動がかかる段階まで達する
  4. 再起動完了後、Pimoxの管理画面 https://[PimoxのIPアドレス]:8006/ を開く
  5. 遅くてもとにかく動き続けることを重視して、swap領域を100MBから1GBへ増やしておく
## CONF_SWAPSIZE=100 の100を1024へ変更し、swapのサービスを再起動
sudo vim /etc/dphys-swapfile
sudo service dphys-swapfile restart

Pimox管理画面を見る限り、本家Proxmox VEとの機能的な違いは見つけられない。妙な感覚なのだがついつい、小さい筐体の割に頼もしいなと思ってしまった。

手順3) 仮想マシンを作成する (Ubuntu Server 22.04)

Pimoxの上に仮想マシン (VM; Virtual Machine) を作ってみる。仮想マシンのOSとして、ここではUbuntu Server 22.04 LTS (ARMv8/AArch64) を選択した。

  1. Pimox管理画面の左メニューを Datacenter > pimox-1 > local (pimox-1) と開き、右側の [ISO images] を選択する
  2. [Upload] または [Download from URL] のボタンを使って、Ubuntu 22.04.1 LTS (Jammy Jellyfish) にある64-bit ARM用の ubuntu-22.04.1-live-server-arm64.iso をPimoxのストレージに保存する
  3. 次のドキュメントに沿って、上記ISOイメージで起動する仮想マシンを作成する
  4. 作成した仮想マシンにはQEMUゲストエージェントを導入しておく (Ubuntuならsudo apt install qemu-guest-agent)

さらに、仮想のUbuntu ServerへRDP接続 (リモートデスクトップ接続) を行いたいならば、次のコマンドを実施すればよい (参考: Oracle Cloud InfrastructureのArmインスタンスでリモートデスクトップしたいのでxrdpを使う: Ubuntu編 [2021-06-14])。

sudo apt install xrdp
sudo apt install xfce4
sudo sed -i.original -e 's/allowed_users=console/allowed_users=anybody/g' /etc/X11/Xwrapper.config # ←「allowed_users」の行を置換
echo "xfce4-session" > ~/.xsession

手順4) Containerを作成する (Rocky Linux 9)

Pimox (Proxmox VE) には仮想マシン用のそれと同様にコンテナ用の管理機能も備わっているので、Pimoxの上にコンテナ (LXC Container) も作ってみる。コンテナのOS環境として、ここではRocky Linux 9 (arm64) を選択した。

  1. 次のドキュメントに沿って、コンテナを作成していく
  2. Rocky Linuxの場合、執筆時点の最新のrootfs.tar.xzは、https://uk.lxd.images.canonical.com/images/ から探っていくと次のURLだとわかる
  3. そこでPimoxにSSHログインして下記のCLI操作を行うと、コンテナのテンプレートとしてrockylinux-9.tar.xzが使用できるようになるので、コンテナを作成する
$ sudo wget -O /var/lib/vz/template/cache/rockylinux-9.tar.xz https://uk.lxd.images.canonical.com/images/rockylinux/9/arm64/default/20221104_02:06/rootfs.tar.xz
$ ls -l /var/lib/vz/template/cache/
total 97308
-rw-r--r-- 1 root root 99642792 Nov  4 12:10 rockylinux-9.tar.xz
  1. コンテナのConsole画面でRocky Linuxにログインし、uname -acat /etc/os-releaseを実行したところ、Pimox環境のカーネルの上にRocky Linux 9環境が乗っていることが確認できる

感想

実はProxmox VE上にコンテナを作ったのは今回が初めて。コンテナをGUIで簡単に扱えそうだ。特にラズパイ4はRAMが4GBもしくは8GBと少なめであるし、隔離環境を作る類の実験がもしコンテナで済むなら、私としては新技術習得の意味も含めて、仮想マシンよりも軽量なコンテナに慣れていくほうが良さそうである。

また、冒頭に掲げた「省電力な仮想化プラットフォーム」の実現度合いについてはどうであるか。今回のシステム全体の消費電力をワットモニターで実測してみたところ、ラズパイ4に外付けSSDをUSB接続し、Pimox (Proxmox VE) で仮想マシン1個とコンテナ1個を稼働させて特に負荷はかけていない状態で、消費電力は「5W前後」であった。他との比較をしていないが、期待を裏切らない数値ではあると思う。

エルパ (ELPA) エコキーパー 100V 大型LCD表示 電力計 チェッカー 使用時間、電気料金、電力量、CO2排出量 EC-05EB

エルパ (ELPA) エコキーパー 100V 大型LCD表示 電力計 チェッカー 使用時間、電気料金、電力量、CO2排出量 EC-05EB

エルパ(ELPA)

参考リンク