背景
これまで TrueNAS Core をホストに色々なサービスを運用していたのですが、メンテナンスをサボりすぎたせいか、Jail内でパッケージのインストールや更新ができなくなってしまったりして、色々めんどうくさくなったのでいっそのこと完全にリプレースしようかと踏み切った次第です
参考までに、これまで運用していた構成を図にするとざっくり以下のような感じです。

VPNとSMBはTrueNASに組み込まれている機能があったのでそれを使っていました。
Jailの良い所はメモリをホストと共有している関係で基本的にコンテナのメモリの上限を設定しなくても良いので、一時的に使いすぎるケースがあっても存分に使いつつもフレキシブルに対応できる感じが好みだったのが当時のTrueNAS Coreの選定理由でした。
が、しばらく使ってみて思ったのが、やはりRHEL系を慣れ親しんだ身としてはFreeBSDはなんというか性に合わない感じだったんですよね。
以前のサーバー構築当時はTrueNAS ScaleのUIでのdockerが良く分からなかったのでCoreにしたわけですが、やはりScaleで組みなおすべきかとか、NextCloudど連携して写真管理サーバー立てたいとか、既存サーバーの色々整理して立て直したいなぁとか考えてるうちにproxmoxというものを知り、年末年始の長期休暇を機に行動に移した次第です。
(結局構築作業が落ち着くまで1か月半程かかりましたが・・・)
構築前に予定していた段取り
趣味の運用ということもあって、構築にまとまった時間がとれないのですが、とは言え構築している間は運用中のサーバーを止めるわけにもいきません。
別件でIntel n100のミニPC(以後n100pcと呼称)が必要になったのでサーバー構築の間、前準備用として使うことにしました。
proxmoxはマイグレーションが簡単にできるとのことで、準備用PCであらかじめコンテナや仮想マシンを構築しておき、本番サーバーでサクッと立ち上げようという魂胆です。
ざっくり作業の流れとしては、
- n100pcにproxmoxをインストール
- 各種サービスを構築
- 本番ハード(運用中のサーバー)からデータ移行
- 外からの接続を本番ハードからn100pcに切り替え
- 本番ハードにproxmoxをインストール
- n100pcから本番ハードに各種サービスをマイグレーション
- やったね
とは簡単にはいかなかったので遭遇したトラブルや対処について情報を残したいと思います。
これから作る新しい構成
最終的な構成を図にすると以下のような感じになります

ハードウェアは以前と同じで 12T のデータストレージはTrueNASで作った時のまま中身を壊さずそのまま使います。
460G の高速アクセス用データストレージは壊れても良い準備はしましたが、結果的に壊さずにそのまま使っています。
OS用の64G SSDはproxmoxを新たに入れますので全消去です。バイバイTrueNAS…
詳細は後述の各種サービス構築のページに記載します。
proxmoxのインストール
これはもはや何番煎じか分かりませんレベルなので省略します。
今回インストールしたのは proxmox VE 8.3
私はこの辺りか、

この辺とか、

この辺を参考にさせていただきました。

各種サービスの構築
長くなるので別ページに分けました。
メディア管理(immich)(準備中)
HomeBridge (準備中)
minecraft (準備中)
proxmoxのファイアウォール設定(準備中)
クラスタリング (結局できずに断念)
移行する準備ができてきたところで、proxmoxを本番ハードにインストールします。
インストール後、クラスタリングの手順を行ったところ、pve-ssl.pem のエラーが出ましたが、これに関してはここに助けられました。
が、何度やっても同じように失敗してなかなかすっきりクラスタリングできません。。。
n100pc側でごちゃごちゃし過ぎたのかもしれませんが、もうTrueNASに戻せないし、各種サービスはn100pcで動いているのでproxmoxを再インストールするわけにもいかず…ということで、
コンテナのバックアップを直接本番ハードに移すという手動マイグレーションという手を取りました、
proxmoxバックアップを別PCに移す方法
やり方は色々あると思います、USBメモリで、NFSで、外部のSMBでなどなど、、、
そのような環境または、サクっとNFS立ててマウントして、というのが出来るならそれも良いとは思いますが、proxmox本体にはなるべく手を入れたくないという思いがあったので、どうするのが自分的に楽なのかを考えていたのですが、proxmoxにはデフォルトでSSHでコンソールに繋げれるということに気づきました。
じゃぁできるじゃないですか、SSH SCP (Secure Copy Protocol) で。
ということでその手順です。
proxmox自体にSSHで接続でき、ターミナルソフトはTeraTermを使っているものとします。
バックアップファイルは、LXC・VM共に、/var/lib/vz/dump に格納されています。
引き上げるバックアップ (*.tar.zst や *vma.zst など) のパスを覚えておきます。
*.notes は注釈のテキストが入っていますが、これも一応引き上げます。
*.log は引き上げなくても大丈夫です。
TeraTermの File メニューから SSH SCP… を選択します

選択したら以下のようなダイアログが出てきます

上側が、手元のクライアント側PCから、サーバーへファイルを送る機能
下側が、サーバーから、手元のクライアント側PCげファイルを受け取る機能となっています。
まずはサーバーからバックアップファイルを受け取るので、下側2つのテキストボックスに
From: に先程メモしたバックアップファイルの絶対パス /var/lib/vz/dump/***.tar.zst など
To: に C:\Downloads など
を設定して「Receive」ボタンを押すと転送が始まります。
転送が終わったら転送先のサーバーにSSHで接続して今度は上側2つのテキストボックスに
From: 先程受け取ったファイル
To: 転送するファイルを置くパス /var/lib/vz/dump/
を設定して「Send」ボタンを押すと転送が始まります。
以上をファイル数分繰り返せばOKです。
ファイル数が多い場合はあらかじめアーカイブしておくと良いかもしれません。(ストレージに余裕があればですが)
リストアは、保存先(ローカル)の「バックアップ」のメニューから、対象を選択してリストアボタンを押します

リストアダイアログでは、展開先ストレージとIDを指定できます。

因みに私のIDの振り方は、割り振りIPにちなんだ数字にしています。どのIPを使っているか空いてるかが一目でわかるので。
(192.168.1.5 → 1005)
消えたZFS
最初はproxmoxのディスクメニューの ZFS の所で TrueNASの時に使っていた pool が見えていたのですが、トラブル対応関連で、proxmoxを再インストールした後は見えなくなってしまっていました。
インポートしようとすると
root@mcs2:~# zpool import raid-pool
cannot import 'raid-pool': pool was previously in use from another system.
Last accessed by mcs2 (hostid=83a89ae0) at Thu Jan 23 20:25:29 2025
The pool can be imported, use 'zpool import -f' to import the pool.
のようにエラーが出てインポートできませんでした。
ちゃんとエクスポートで切り離ししないといけないってことですね。
proxmoxインストール時(か起動時?)に繋がっていないZFSを認識すると勝手にインポートしてくれるみたいです。
TrueNASでエクスポートの手続きをとっていなかったら同じように最初から見えなかったかもしれません。
エラーが出ていた状態でしたが、他のシステムで使用中でなく、データの整合性に問題がないと確信できているので指示通り -f オプションで強制インポートします
root@mcs2:~# zpool import -f raid-pool
無事GUIから見える様になりました

ZFSにコンテナやVMを置くことが出来るようにする
root@mcs2:~# pvesm add zfspool lxcvol -pool raid-pool
raid-poolに「lxcvol」という名前のデータセットを作成します。
これで、VMやコンテナ作成時などで、ZFSのストレージを選択することができるようになります。

proxmox側のディレクトリをコンテナ側にマウントする
コンテナの構成ファイルを編集します。
下記例ではコンテナID=100 を例にしています。
root@mcs2:~# nano /etc/pve/lxc/100.conf
mp0: /raid-pool/test,mp=/mnt/raid
上記 mpX の部分を追記します(どこに書いても勝手に整理されます)
mp0: に続いて、左側にホスト側のディレクトリ、右側にコンテナ側のマウントポイントを指定します。
その後、コンテナを再起動します。
コンテナを作成したら最初にやることメモ
dnf upgrade -y
dnf install -y net-tools
dnf install -y vim
timedatectl set-timezone Asia/Tokyo
adduser lscyane
passwd lscyane
仮想マシンを作成したら最初にやることメモ
固定 IPv4 アドレス設定
nmcli connection modify ens18 ipv4.addresses 192.168.1.9/24
ゲートウェイ設定
nmcli connection modify ens18 ipv4.gateway 192.168.1.1
DNS設定
nmcli connection modify ens18 ipv4.dns 192.168.1.3
IP アドレス固定割り当てに設定 (DHCP は [auto])
nmcli connection modify ens18 ipv4.method manual
インターフェースを再起動して設定を反映
nmcli connection down ens18; nmcli connection up ens18
その他細かいトラブルなど
スナップショットができないコンテナがある
上記「proxmox側のディレクトリをコンテナ側にマウントする」をするとスナップショットが出来なくなるようです。
スナップショットが使いたい場合は、ホストディレクトリのマウントは出来ないので、構成時は注意してください。
途中のスナップショットにロールバックできない
ZFSの上に作っているコンテナは最新のスナップショットにしかロールバックできないそうです。
dnf や yum コマンドを実行すると途中で Killed と表示され中断される
システムのリソース不足のようです。
LXCのメモリサイズを256MBとかにしてると発生するようになりました。
512MBなら大丈夫そうです。1GBでも足りないなら他にリソースが食われているか別の要因かもしれません。