上個月初搬回台灣定居,回家中的各種好處之中,其中一項就是比較不用擔心平常實驗用的 server 斷線了,也比較有時間回家做一些小升級。兩個禮拜前在回家前就找了預計升級的 CPU ,準備回去也把現有的 CPU 連著以前堆積的一些零件順便拼成一台完整的電腦。也順便看了 Proxmox VE 的升級流程,覺得如果是 6.x 升級到 8.1 最新版的話,似乎走備份後重灌的流程比較容易。所以就準備好了安裝碟想說一次升級。

硬體準備

從新北到高雄來回一趟的成本說低不低,所以希望一次完成越多事情越好。規劃帶過去和回家路上買的東西有這些:

要帶回來新北的東西有這些:

VM 、 containers 備份

我的機器是純粹給自己用的可以容許有 downtime 。所以就很乾脆的把所有 VM 和 container 關起來,接上外接硬碟後按照官方文件備份:

# 備份所有 VM 和 containers
vzdump --mode [stop|suspend|snapshot] --all --dump-dir /mnt/path-to-mounted-disk

設定檔備份

官方的說明沒有直接提到,但社群的慣例是會把 /etc 複製一份。沒有提的原因可能是升級系統版本本來就有可能改到這裡面的檔案,還是複製一份的原因是時間久了會有些連自己都忘記有的 config 寫法或 cronjob 類型的自動化流程,大小不大但要用的時候可以省很多重寫的時間。

安裝前檢查、休息、和動腦!!

因為完整的重灌完成後會很難回頭,所以這一步想得越慢越好,順便讓備份確實的慢慢跑完,這裡沒有做完最多就是下次再升級而已不會掉資料,所以千萬不要急。從剛開始到這一步我實際上作死的步驟有這些:

以上這些就都剛剛好是在我按下 PVE 的確認安裝去吃飯的路上想到的,所以後面的東西就幾乎都在冒冷汗中完成......

儲存空間注意事項

除了 VM, containers 都要完整備份之外,真的要挑 image 的時候一定要注意自己存 VM 的裝置是不是完全獨立的。像以下的配置就不是:

這樣配置的話,系統碟在重裝被洗掉的時候後面的 cache 也很有可能被洗掉。這時候在 cache 裡的資料究竟有沒有被寫回 RAID 陣列裡就沒有人能保證了。而 PVE 剛裝好的時候沒有 mdadm 也沒有 bcache-tools ,所以也會呈現什麼 RAID 陣列都讀不到只剩四顆乾淨硬碟的恐怖景象。

裝回來又經過一兩次重開機後就發現我的 RAID 陣列和原本建立的 LVM 突然讀得出來了,把他們補進 storage.cfg 之後就回復原本操作 PVE storage 的方式。

更簡單的解決方式或許是再買一顆獨立的系統碟就可以和 cache 分開了。

網路設定注意事項

為了讓 server 裡的 VM 能夠連接到不同的內網網段和對小烏龜做 PPPoE 的連線,也為了善用珍貴的網路孔,我在一個 port 上設定了 VLAN 的 trunk port ,主要的連外網路也是在這個 trunk port 上的其中一個 VLAN 。 PVE 在安裝的時候只有 DHCP 和 static IP 兩種選項,所以裝完維持原本接線的話網路自然是不會通的。架構畫圖很麻煩而且我現在也很疑惑為什麼我要自己搞那麼複雜,就把比較關鍵的 interfaces config 放上來比較不怕忘記。

# /etc/network/interfaces
auto lo
iface lo inet loopback

iface enp36s0f0 inet manual

# put vlan tag on physical NIC
iface enp36s0f0.4 inet manual
iface enp36s0f0.2 inet manual
iface enp36s0f0.3 inet manual

# put separate virtual bridge device on each VLAN interface
auto vmbr0
auto vmbr1
auto vmbr2
iface vmbr0 inet manual
        address 10.1.1.3/24
        bridge-ports enp36s0f0.2
        bridge-stp off
        bridge-fd 0

iface vmbr1 inet manual
        address 192.168.1.103/24
        bridge-ports enp36s0f0.4
        bridge-stp off
        bridge-fd 0

iface vmbr2 inet manual
        address 10.1.2.3/24
        gateway 10.1.2.253
        bridge-ports enp36s0f0.3
        bridge-stp off
        bridge-fd 0

主要是理論上會覺得寫 vmbr0.xxx 各自放 IP 設定應該會和在 vmbr0, 1, 2 上面分別寫 enp0s1.xxx 的效果一樣加上 VLAN tag ,但現實就是打臉,只有後者會起作用。過程也要記得善用 ifreload -a ifup ifdown重開機治百病,有些像是網卡驅動直接找不到網卡的問題也是莫名其妙就慢慢解掉了。

還原 VM, containers

這裡就按照官方文件還原外接硬碟裡的備份檔

# 還原 VM
qmrestore /mnt/path-to-mounted-disk/101-backup.vma 100 --storage cached-vol0

# 還原 containers
pct restore 104 /mnt/path-to-mounted-disk/104-2023_11_18-16_52_09.tar --storage cached-pool0

References

pct(1)

qmrestore(1)

Upgrade from 6.x to 7.0