メモ: ESXiからProxmoxへ移行する作業際に詰まったところ

# 概要

とある事情で自宅のメインサーバーをProxmoxへ移行することにしました。
その移行作業中で、微妙に詰まりやすいような細かいところをメモとして残します。
※リソースプールとかデータストアといった、そもそもの機能面の違いは含まないです

## 本記事の対象
- ESXiを触ったことがある方
- Proxmoxに触れてみようと思っている方

## 項目
項目としては以下をそれぞれ書いていきます
1. 仮想マシン移行機能でのスナップショットの扱い
1. 仮想NICの割り当てスロットの違い
1. Windows OS に必要なドライバ
1. Proxmox内のviの設定

# 仮想マシン移行機能でのスナップショットの扱い

まずProxmoxではESXiから仮想マシンを簡単に移行できるようなGUIのツールがあります。
実際にはストレージとしてESXiを選択して追加することができ、その後クリックするだけで簡単に移行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/56cd7654-eef3-49da-a599-aee628139df4.png)

基本的にはデータストア上の仮想マシン等であれば、そのまま移行できます。
※詳細な条件等は以下ドキュメントを参考

https://pve.proxmox.com/wiki/Migrate_to_Proxmox_VE#Automatic_Import_of_Full_VM

ただし、私の環境ではいくつかの仮想マシンにおいて、移行時にエラーが確認されました。
原因を探ったところ、スナップショットがある仮想マシンではこちらのエラーが出てしまうようでした。。
一応メーカードキュメント上はスナップショットあると、遅延があるかもしれないまでだったため、いける想定でしたが、私の環境都合かいけない形でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/1b3f16ec-91f9-4e9a-9084-d54a9dc9b625.png)

そのため、スナップショットがある場合はこちらの機能では移行できない可能性もあるかもしれないです。

# 仮想NICの割り当てスロットの違い
仮想マシンではNICを最低1つは割り当てて利用すると思います。
例えば、以下はESXiで作成しているUbuntuの仮想マシンですが、`ens33`というNICがついていることが確認できます。
```bash
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:af:64:4e brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.0.113/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:feaf:644e/64 scope link 
       valid_lft forever preferred_lft forever
```

ではこの仮想マシンをProxmoxへ純粋に移行してみます。
すると以下のようになり、NICの名前が変わりIPアドレスが振られていないことが確認できます。
```bash
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:50:56:af:64:4e brd ff:ff:ff:ff:ff:ff
    altname enp0s18
```

これが何が起きているかというと大きく以下2つがポイントになっています。
1. NICのスロットが異なる
1. UbuntuのnetplanでIPを割り当てている

まず1ですが、このNICに割り当てられている名称の後ろの数字が実はNICが接続されているPCIスロットの番号となっています。
例えば、以下のような名称の割り当てになる感じです。
```
en (ethernet) + s33 (スロット33) → ens33
```
この割り当てられる1つ目のNICのデフォルト値が、`ESXi: 33`、`Proxmox: 18`となっているのです。
それによって、NICの名前が変わってしまった形です。

そして2ですが、Ubuntuでは純粋にインストールをした場合、ネットワークの設定周りは`Netplan`で管理されていると思います。
その設定内容は、以下のような形でIPアドレスやデフォルトゲートウェイ等を指定しています。
その割り当ての設定としてNIC名称を指定しているため、起動時に`ens33`に対してネットワークの設定をしようとしたところできなかった結果、IPアドレスが振られていなかった感じです。
```/etc/netplan/XXX.yaml
network:
    ethernets:
        ens33:
            addresses:
            - 192.168.0.113/24
            nameservers:
                addresses:
                - 192.168.0.111
                search: []
            routes:
            -   to: default
                via: 192.168.0.254
    version: 2
```

対処方法はシンプルで、netplaの設定ファイルの指定しているNICの名称を、実際のNICの名称に変えて再起動するだけです!!

## 参考: 他のアプリケーションでの影響
このNICの名称ですが、上記のようなOS側の設定だけでなく、アプリケーションの設定にて指定が必要な場合もあるため、その点は移行時に注意が必要です。

例えば私の環境では`Wireguard`を使っているのですが、その設定ファイルでもNICの名称の指定がありました
```ini:Wireguardの設定ファイル
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE
```

# Windows OS に必要なドライバ
これは結構いろんな人が上げている内容となりますが、ProxmoxではWindows OSを仮想マシンとして利用する場合`VirtIO`というドライバを入れることが必要となります。

https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers

実際に割り当てる手順は簡単で作成時にOSの指定の所で、ドライバのISOをドライブとして追加してあげます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/0021da64-9570-4d3e-9d08-cd30c943581f.png)

その後はインストールプロセスの中でドライバを指定してあげる形です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/02d7a769-7e8f-4fd8-987f-eed213ad4b65.png)


※ちなみに調べていた限りでは、基本上記だけだと思っていたら、
私の環境ではネットワークのドライバだけ何故か入らず、、起動後にマウントされているドライバから直接インストールしています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/a3462d42-6bd9-4dd8-a568-33a5dc225561.png)


# Proxmox内のviの設定
少しProxmoxの設定ファイルをCLIから編集しようとした際に気づいたのですが、`vi`での操作が思うように動きませんでした。。
どうやら、viの互換モードが有効だったり、BackSpaceが無効だったりしているようでした。
参考: https://paradigmshift.x0.to/2021/05/23/661/

上記の記事を参考にさせていただき、以下を追記したところ無事いつも使っているような`vi`操作になりました!!
```bash:~/.vimrc
set nocompatible
set backspace=indent,eol,start
```

# まとめ
今回はProxmoxへ移行した際に微妙に躓いたところをまとめました。
もちろんESXiとProxmoxとでストレージの考え方やリソースプールの考え方など機能として違ってくるところは多々あると思います。
その中、機能差分というよりはちょっと細かいところの違いもあったりするものとして参考にいただけたらと思います。

## 参考にした記事

https://paradigmshift.x0.to/2021/05/23/661/

https://qiita.com/Bacalhau/items/e74af3bd39b51516e151

https://qiita.com/flathill/items/8afdba650c80e37bf7fe