[失敗談] Proxmox × iSCSI (+ Thin-LVM) をクラスタで試したらトラブった話

これは、私が Thin-LVM を Proxmox×TrueNAS(iSCSI) 環境で試した際の記録です。
結論から言うと、クラスタ環境では Thin-LVM のメタデータまわりで問題が起きてしまい、思うように使えなかった という話になります。
同様の構成を考えている方の参考になれば幸いです。

## 背景

- **Proxmox** クラスタで共有ストレージを使う際、記事としては **Ceph** を導入する例が多い。  
- 一般的な **iSCSI** や **NFS** を使った事例は少なく、気になって調べてみた。  
- 別記事で紹介した「iSCSI + **通常のLVM**」の組み合わせでは問題なくマイグレーションができたが、**同じ iSCSI 上に “Thin-LVM” を作ったらどうなるのか？** 試してみた。  
- 結果として、**他ノードで “?” 表示になったり** してしまい、運用が出来ないことが分かった。

---

## 環境イメージ

- TrueNAS（詳細設定は割愛）  
  - iSCSI ターゲットを用意して、Proxmox ノード (pve53, pve54, pve55) からアクセス  
- Proxmox 3ノードでクラスタを構成  
- **iSCSI イニシエータ** 設定済み -> 全ノードで同じ LUN を参照できる状態

### iSCSI Target 側の設定
- TrueNAS で Portal, Initiator Group, Target, Extent などを適宜作成  
- Proxmox 側から `/dev/sda` などとして同じブロックデバイスが見えるようにしている  

### Proxmox 側での iSCSI 接続設定
- Datacenter -> Storage -> “iSCSI” 追加  
- Portal, ターゲットの設定などをして、全ノードで利用できるようにする  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/97de4356-6c67-4fc0-aebd-735f4453eebd.png)

```bash
root@pve53:~# lsblk | grep sdb
sdb                         8:16   0   100G  0 disk
root@pve54:~# lsblk | grep sdb
sdb                         8:16   0   100G  0 disk
root@pve55:~# lsblk | grep sdb
sdb                         8:16   0   100G  0 disk
```

---

## Thin-LVM プールを作成してみる

普通の LVM と違い、**Thin-LVM** はメタデータ用の LV とデータ用の LV を作る必要があります。  
私は次のようにやってみました。

```bash
# iSCSI デバイスを確認
lsblk
# 例: sdb  100G

# PV として作成
pvcreate /dev/sdb
# VG 作成
vgcreate testvg2 /dev/sdb

```bash
root@pve55:~# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
root@pve55:~# vgcreate testvg2 /dev/sdb
  Volume group "testvg2" successfully created
```

# LVM Thinプール作成
# 例: testvg2 内に thinpool という名前で 80G のプールを作成
lvcreate -L 80G -n thinpool --type thin-pool testvg2

```bash
root@pve55:~# lvcreate -L 80G -n thinpool --type thin-pool testvg2
  Thin pool volume with chunk size 64.00 KiB can address at most <15.88 TiB of data.
  Logical volume "thinpool" created.
```

ここで、`lvscan` などをすると、`testvg2/thinpool` が認識されます。

```bash
root@pve55:~# lvscan | grep thinpool
  ACTIVE            '/dev/testvg2/thinpool' [80.00 GiB] inherit
```

---

## Proxmox に “LVM-Thin” ストレージとして登録

Proxmox の WebUI でストレージ追加を行います。

1. Datacenter -> Storage -> `Add -> LVM-Thin`  
2. ID: `ThinLVM`
3. ボリュームグループ: `testvg2`  
4. Thin Pool: `thinpool`  
5. 内容: “ディスクイメージ, コンテナ”  
6. 保存

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/7bc3bc5f-cb20-48cb-bc8d-8628446c6a83.png)

これで、“ThinLVM” というストレージができ、VM ディスクを置けるようになります。ただし、3つのノードに表示されるThinLVMが、追加作業を行ったノード以外では、“?” 表示になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/70ccda68-3fe9-4492-9197-ccb5a61d9aac.png)

---

## いざ使おうとしたら…… 他ノードで “?” 表示に

- LVM-Thinを作成したノード (例: pve55) のWebUIストレージ欄のサマリとVMディスクを見ると、正しく容量が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/b8e9ba63-0074-4be3-99fc-7a0eae9677d9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/b4b96165-d83c-4c8b-b7b3-f7356f4e89f4.png)

- しかしながら、他のノード (例: pve54) のWebUIのストレージ欄のサマリとVMディスクを見ると、サマリの容量が表示されず、VMディスクでもエラー **no such logical volume testvg2/thinpool (500)** が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/523e301f-02ed-4360-a339-dc4cdf90d472.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/49ffd0b2-a113-4a93-be07-d853b82dbfaa.png)

- 念のため、各ノードでlvscanを実行するも、正しく認識できているように見えます。

```bash
root@pve53:~# lvscan | grep thinpool
  inactive          '/dev/testvg2/thinpool' [80.00 GiB] inherit
root@pve54:~# lvscan | grep thinpool
  ACTIVE            '/dev/testvg2/thinpool' [80.00 GiB] inherit
root@pve55:~# lvscan | grep thinpool
  ACTIVE            '/dev/testvg2/thinpool' [80.00 GiB] inherit
```

### ThinLVMを作成したノードで VM ディスクを Thin-LVM に作成

新規 VM 作成画面で、ディスクの保存先を “ThinLVM” にしてインストール開始。  
問題なく OS がインストールでき、VM も普通に起動しますが、上のエラーは解消されませんでした。

### ThinLVMを作成したノード以外 VM ディスクを Thin-LVM に作成

新規 VM 作成画面で、ディスクの保存先を “ThinLVM” にしようとするも、残容量が**0 B**となっていました。選択して強行するも、**TASK ERROR: unable to create VM 102 - no such logical volume testvg2/thinpool** とエラーが出て失敗しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/8e5c47b9-1332-4157-ba8b-3ff3834b8322.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789581/71068d30-33b0-461e-9c4a-67a26c22cae6.png)

---

調べてみると、どうも **LVM-Thin はクラスタ運用には対応していない** という情報がありました。  
通常の LVM なら `clvm`(clustered LVM) と組み合わせる方法もあるようですが、Proxmox の標準機能では対応していないようで、**Thin-LVM メタデータの同期が期待どおり動作しない** らしいです。

---

## 結論: クラスタ環境なら素直に “通常の LVM” または “他の共有ストレージ” が無難

- Proxmox×TrueNAS(iSCSI) で **Thin-LVM** を試すと、クラスタ運用では **メタデータの整合性** が取れず、**ノードによって “?” 表示や認識不可**、といったトラブルに遭遇した。  
- クラスタ環境でスナップショットや Thin Provisioning が必要なら、**Ceph, NFS(qcow2) など** 別の選択肢を検討した方が良さそう。  
- **普通の LVM** なら問題なくクラスタ共有ができてマイグレーションも高速なので、まずはそちらを使うのがおすすめ。

---

今回は以上です。もし「Thin-LVM で共有してもうまくいってるよ！」という事例をご存知の方がいたら、ぜひ教えてください。