Proxmox × iSCSI (+ LVM) で共有ストレージを作り、VMマイグレーションしてみた

## 背景

- **Proxmox** でクラスタを組むときは、よく **Ceph** を共有ストレージとして使う記事が多い。  
- ただ、一般的な **iSCSI** や **NFS** を利用した事例は少なめで、本当に動くのか気になった。  
- 調べてみると、iSCSI をクラスタで共有しようとした際にトラブル報告があるケースもあるらしい。  
- **iSCSI ターゲットとして TrueNAS を使えば簡単にできそう**
- Proxmox に iSCSI イニシエータ設定をしてから、そのブロックデバイスを **LVM** でまとめて管理してみた。  
  
結論から言うと、**LVM (通常の LVM) を iSCSI 上に作った場合、VM マイグレーションがちゃんと動く** し、時間もほとんどかからなくて快適でした。

(※ 後述しますが、同じことを **LVM-Thin** や **ZFS** でやったら色々トラブったので、今回は普通の LVM で成功した話に絞ります。)

---

## 環境イメージ

- TrueNAS（詳細設定は割愛）  
  - iSCSI ターゲットを用意して、Proxmox ノードからアクセス可能にしている
- Proxmox ノード (pve53, pve54, pve55) の合計3台  
  - すでにクラスタ化済み  
  - すべて iSCSI のイニシエータ設定を行い、TrueNAS 上の LUN に接続する

### iSCSI Target 側の設定

- TrueNAS で iSCSI ターゲットを作成 (Portal, Initiator Group, Target, Extent など)  
- このへんは TrueNAS の UI でやれば簡単ですので割愛。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/8bd54ac5-e059-4ad1-b253-a4e897f3e147.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/3bd799ec-1a3f-443d-9475-5e27b13a3218.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/c9ca4f6e-7a34-42c8-b15f-3b74a3c6d22b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/7de9103a-f6b3-4d54-ac3c-ba6140e24b34.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/ce2aa396-8ed4-4629-8104-ed7e239258db.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/9b803939-3980-466d-b771-6bafb0cff5a0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/ddaefcef-4c64-434a-a89d-437bd5934aba.png)

### Proxmox 側での iSCSI 接続設定

Proxmox の WebUI で “iSCSI” ストレージを追加します。

- Datacenter -> Storage -> “iSCSI” 追加  
- IP, Target 名、LUN の設定などをして、全ノードで利用できるようにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/a934ef63-d807-4ae6-adfb-483d103652cd.png)

これで各 Proxmox ノード上から、同じ `/dev/sdX` として iSCSI デバイスが見えるようになります。

```bash
root@pve53:~# ls -alF /dev/sda
brw-rw---- 1 root disk 8, 0 Feb 24 20:16 /dev/sda
root@pve54:~# ls -alF /dev/sda
brw-rw---- 1 root disk 8, 0 Feb 24 20:24 /dev/sda
root@pve55:~# ls -alF /dev/sda
brw-rw---- 1 root disk 8, 0 Feb 24 20:24 /dev/sda
```

---

## LVM で物理ボリューム & ボリュームグループを作成

今回は CLI を使ってサクッと作りました。

```bash
# まず iSCSI デバイスを確認
root@pve53:~# lsblk
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
...
sda                8:0    0  150G  0 disk   <-- iSCSI上のブロックデバイス
...

# PV 作成
root@pve53:~# pvcreate /dev/sda
  Physical volume "/dev/sda" successfully created.

# VG 作成
root@pve53:~# vgcreate testvg /dev/sda
  Volume group "testvg" successfully created

# LV 作成
LV Proxmox にて自動的に作成されるため、手動での作成は不要です。
```

もちろん、このとき **iSCSI のデバイスはノードごとに名前が違う場合もある** ので注意してください。  
`fdisk -l` や `lsblk` などで要確認です。

---

## Proxmox 上で LVM ストレージとして登録

続いて Proxmox の WebUI で “LVM” ストレージを追加します。

1. 「Datacenter -> Storage -> 追加(Add) -> LVM」を選択  
2. ID はわかりやすい名前 (例: `LVM`)  
3. Volume Group: さきほど作った `testvg`  
4. Contents: “Disk Image” にチェック  
5. **“Shared” にチェック** ← これ大事 (複数ノードで共有する)  
   - ここにチェックを入れない場合、マイグレーション時に**ローカルディスク間のデータ移動と同様、すべてのディスクデータをコピー**しようとしてしまうため、非常に時間がかかります。  
   - 共有ストレージとして認識させることでディスク移動不要になり、**高速なマイグレーション**が可能になります。  
6. 保存

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/819da06c-9b35-4be9-bb91-358e1e7b7793.png)

このストレージに VM ディスクを作れば、**クラスタ全ノードから同じ VG/LV が見える**状態になります。

---

## VM のマイグレーションを試す

新規 VM を作成するとき、ディスクの保存先に「LVM」を選べばOK。  
実際に適当な OS をインストールして起動してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/fbd0f401-86a1-401c-94cd-37c50dd84d2c.png)

### マイグレーションやってみた

- VM を右クリック -> `マイグレート` (あるいは CLI の `qm migrate <VMID> <宛先ノード>` )  
- すると、「ローカルストレージ→ローカルストレージ」のコピーではなく、**共有ストレージを参照しているだけなのでディスクを移動する必要がない** ため、非常に速いです。  
- ほぼメモリの同期だけで済むので、ネットワーク帯域も最小限。あっという間にマイグレーションが完了して感動。  

この手順を実践したところ、**普通にマイグレーションが成功** しました。  
マイグレーション後の VM の設定ファイルも、自動的に `/etc/pve/nodes/pve54/qemu-server/100.conf` のように移動されるので特にトラブルなし。  
移行先ホストでの ゲスト OS の動作にも問題ありません。
移行中のping落ちも発生しませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/9c22023f-2824-4b96-87cc-e21c49f4ce05.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/23717b45-7450-4429-a538-144dcb088f77.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/166570cc-ec60-4175-86cc-f5f347d0b63f.png)

### スナップショット出来なかった

残念ながら、LVMではスナップショットはサポートされていません。
Proxmox Backup Server で代用したり、ストレージ側で対処するなど必要となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/c056edba-c3ed-4348-bb5f-e62aa146a6a9.png)


---

## LVM-Thin や ZFS (iSCSI) でトラブった件

実は最初に「LVM-Thin iSCSI でやったら便利そう」と思って試したのですが、**Proxmox クラスタに非対応っぽく“メタデータ”がずれてしまい、別ノード上ではストレージが “?” になったり** しました。  
ZFS で iSCSI をやってみようとしたときも同様にいろいろ怪しい動作が出てしまい、断念…。

このあたりは、**別記事** でまとめようと思います。  
とりあえず、**素直に通常の LVM でやるのが無難でストレスなく動いた** というのが今回の結論です。

---

## 参考情報
[Fibre Channel Setup](https://forum.proxmox.com/threads/fiber-channel-setup.35225/)
[How To Set Up Shared FC-SAN With Proxmox: All Steps](https://josephmatino.com/how-to-set-up-shared-fc-san-with-proxmox/)

---

## まとめ

- **TrueNAS上のiSCSIターゲット** に **LVM (非Thin)** を作り、**Proxmox で “Shared” ストレージ** として設定すると、複数ノードで問題なく利用できた。  
- VMマイグレーションをしてもディスクのコピーが不要なので高速。  
  - “Shared” にチェックを入れないと、ローカル同士のコピーのように時間がかかる。  
- LVM-Thin や ZFS iSCSI はうまくいかなかった（別記事にまとめる予定）。 

`Proxmox` をクラスタ環境で利用する際には、Ceph を利用する構成がよく紹介されていますが、一般的な **iSCSI (+ LVM)** 構成でも十分実用的でした。  
もし同じように `クラスタ環境でのProxmoxの共有ストレージ` で悩んでいる方がいたら、まずは「iSCSI (+ LVM) で共有ストレージを組んでみる」のがおすすめです。  

以上、「iSCSI 上に LVM を作って複数ノードでマウントし、Proxmox のマイグレーションも OK だった！」という成功事例でした。