VMID 與 IP 配置
本頁說明安裝時未指定 id 的情況下,go-pve-qemu 如何挑出一個可用的 VMID,並以它決定 VM 的 IP。
VMID 與 IP 的對應
GATEWAY = 192.168.0.1
VMID = 120
IP = 192.168.0.120/24 (GATEWAY 前三段 + VMID)
因為 IP 末段就是 VMID,VMID 只能落在 100–254:低於 100 是 Proxmox 保留範圍,高於 254 不是合法的主機位址。
探測區間
| 變數 | 預設 | 修正規則 |
|---|---|---|
ASSIGN_IP_START |
100 |
0 或 < 100 → 100 |
ASSIGN_IP_END |
254 |
0 或 > 254 → 254 |
起訖顛倒時自動交換。
雙端並行探測
每一輪同時為 start 與 end 各開一個 goroutine,接著 start++、end--,直到兩端相遇。同時執行的探測以容量 10 的信號量(semaphore)限制。
每個候選 VMID 依序檢查,任一項命中即放棄:
| 順序 | 檢查 | 命中代表 |
|---|---|---|
| 1 | /etc/pve/nodes/*/qemu-server/<vmid>.conf 存在 |
任一節點已有此 VMID |
| 2 | qm config <vmid> 成功 |
Proxmox 認得此 VMID |
| 3 | 192.168.0.<vmid>:22 在 2 秒內可連線 |
該 IP 已有主機在用 |
第一個通過三項檢查的 VMID 會送進結果 channel,同時取消其他尚未完成的探測。
結果與限制
| 情況 | 結果 |
|---|---|
| 找到可用 VMID | 回傳並作為 VMID 與 IP 末段 |
| 全部被占用 | cannot find available IP |
| 10 秒內沒有結果 | timeout: no available IP found |
- 因為兩端同時探測,結果不保證是區間內最小的可用編號
- 第 3 項檢查的 IP 前綴在目前程式碼中固定為
192.168.0.,不跟隨GATEWAY;網段不同時,此項會探測到錯誤主機 - 請求指定
id時完全不經過這些檢查