Linux, 工作, 生活, 家人

ARM, Gentoo

[Gentoo] Upgrade From x64 to ARM64

時隔多年,終於又迎來一次大升級,之前寫過幾篇升級的文章,像是
電腦升級 i7 5775c + ASUS Z97-A/USB3.1 : 後來 Desktop 還升級了二次,一次是換 i5-9600K,中間還買了 2080 ,最近一次是換 AMD 7900,又買了一張 3090 (當然是買前生產力買後遊戲機),不過因為懶得寫就沒記錄了
[Gentoo] 電腦升級案 32bit -> 64bit Linux : 十年前的升級紀錄,和本篇要寫的文章很像,不過這次就是升級到不同平台架構的機器上了
山寨更新記錄 : 早年 BBS 的更新紀錄,現在的話就不會用這種 Raid 盒,都是改用 Software Raid ,便宜!

這次升級要從 x64 平台升級到 ARM64 平台,雖然目前 Linux 下 ARM64 支援度還是不錯,但是兩個平台能用的東西還是有差異,主要是紀錄一下升級過程中有什麼需要注意的事情

ARM64 Hardware Prepareation

CPU Board: Ampere Altra CPU + AsRock ALTRAD8U : 這個組合現在已經能在 newegg 上買到了,也是目前最強大的 ARM64 平台,當 homelab 平台非常適合

DRAM: 買這種主機板用的都是 RDIMM ,有可能便宜有可能貴,可以查 Gigabyte 的 QVL List[Ref] 內的 DRAM list 購買,有朋友就是在日本買到DDR4 2933 32GB RDIMM 一隻5000羊的DDR,目前匯率 NT$1,100.- 非常便宜

Network: AsRock ALTRAD8U 有 1*Intel i210 Ethernet 和 2*10G Intel x550 Ethernet ,這部份到不是問題,我另外拿了舊的 Intel x540 4 Port ethernet 當小 switch 用

SATA: 這種板子預設都沒有 SATA interface 了,所以要買 SATA 卡,有 PCIe 轉 SATA ,這個要注意 PCIe bandwidth 和 SATA 數量,一分錢一份貨。
如果要追求速度,淘寶上也可以買到便宜 SAS 外接 SATA ,淘寶的 LSI SAS 8port internal 卡大部份 NT$2500 到 NT$6000 都有,記得買轉接線要看好規格,SAS 接頭的規格很多,一不小心就會弄錯

SSD: 板子上介面有 2* M.2 2280,如果覺得不夠,可以買 OCU 轉 U.2 轉接線,或是還有 PCIe slot ,可以買 PCIe 轉 M.2 都可以。但是 U.2 的硬碟不一定好買,而且常常價位偏高,但是相對上是比較便宜的選擇

Software Move To ARM64 Platform

QEMU/Libvirt

這部份應該是最難的部份,不過理論上也不是不可以,我原來是 VirtualBox ,但是 ARM64 沒有 VirtualBox ,只有 Proxmox 有,剛看了一下,還支援 riscv64,loongarch64 [ref],不過我個人不太想再學一套,所以還是用 virt-manager/libvirtd 這套,一般用途 virt-manager 和 libvirtd 應該也很夠用了。

目前用到現在都可以用,Ubuntu 22.04,Windows 10 for x86,Windows 11 for ARM,安裝沒什麼問題。只有 Windows 10 for x86 非常慢,慢到我不想再開了,不知道為什麼。

Qemu bridge devices: 這個應該是問題,如果是以前用 VirtualBox ,可以直接選 NIC card interface ,但是 virt-manager 似乎沒這個選項,所以要直接設定到 bridge device,不過影響不是很大,就只是設定一個 bridge device,然後將 host internet ethernet port device 綁上去就好了

其他可能是如果 Libvirt 要用 graphic 輸出,不能用 qxl ,只能用 VGA or ramfb ,尤其是 windows 只能用 ramfb,如果 Guest 是 Linux 可以用 VGA ,顯示比較正常,如果連 GUI 都沒有,就直接看 console 輸出吧,問題更少

Qemu file sharing

QEMU 支援 virtiofs ,不過這個功能在 gentoo 內 ARM64 是不能用的,因為不能用,所以我也不知道 x64 那邊會有什麼限制
另外一個是 virtio-9p ,這個缺點是分享進 VM 之後,沒辦法使用 user 權限存取,用 root 身份限制也很多,像是存取 non-root user 檔案會有問題[ref]

有其他需求的人可以考慮改用 samba or nfs ,但是效能就會大大下降了,這點可能是有效能需求的人要考量的

Firewall

原來的 Firewall script 似乎沒辦法和 Libvirt 一起工作,我又不想修改,最後比較簡單的作法就是在我的 script 執行完之後,再重啟 libvirtd ,這樣就正常了。
正常後別忘了執行 /etc/init.d/iptables save 儲存,這樣重開機之後才會正常執行 firewall rule.

Docker

試了一下似乎沒什麼問題,但是目前沒什麼要跑的 APP ,所以應該測不出什麼
不過之前 arm64 k8s docker [ref]都跑過了,應該踩雷的機會低很多

Other Software

在 Linux 下轉移到 ARM64 平台問題不大,大部份的 software 都是安裝之後 copy 過去
就算是在系統上有資料的 mysql 和 apache 都是這樣

這次我用了一個方式轉移 configuration files
1. 將要轉移的程式設定檔 commit 到 git server
2. 從新機器將 git server 拉回來 configuration files
3. diff 之後將新的設定套上去

因為我是 gentoo 玩家,gentoo 升級 packages 常常需 merge configuration files 了,所以這個轉移的過程不難,只是很耗費時間而已。不過因此絕大部份的設定檔都沒有問題,反而是少數系統本身自帶的設定檔反而怪怪的

KDE

之前我都遠端跑 vnc + kde ,不過 Gentoo 有個 BUG 就是 plasmashell 的 CPU usage 會很高
這次換 virt-manager 之後可以用 ssh remote control VM,發現這個方式還不錯,反正我也只有用到這個功能,KDE 等有需求的時候再開 vnc 就好了,平時是不需要開的

搬移步驟

1. 備份系統碟,以備不時之需
2. 重新規劃電腦的網路卡,如果只有一張就直接設成 bridge interface
3. software raid 的部份可以參考自己之前的文章 Linux Software Raid 系統轉移
4. UEFI 的部份可以參考自己之前的文章 Gentoo ARM64 UEFI Install Guide
5. 搬移 APPs
5.1 重要的 APP 才要搬資料,ex: Web, mysql
5.2 不重要的 APP 只要搬設定檔,ex: apt-cache-ng, squid 等等
5.3 如果是切換平台,要確定 VM 沒問題才能切

Known Issues

IPv6 Default Router

不知道為什麼,在 wan 的 bridge interface 會增加一個 default route fe80::1 ,這個設定會讓 IPv6 失效,後來解決方式是在 LAN 端加上一個 IP address fe80::1 才解決

efi boot

因為我系統碟是做 software raid ,每次編完 kernel 再 update grub 時,記得 efi boot 時有時會 fail ,試著將兩顆 nvme 都 mount 上來加上再安裝一次 efi partition 似乎才會正常,找了一下沒找到原因,不管了,反正能動就好

grub-mkconfig -o /boot/grub/grub.cfg
umount /boot/efi
mount /dev/nvme0n1p1 /boot/efi
grub-install --target=arm64-efi --efi-directory=/boot/efi --bootloader-id=Gentoo
umount /boot/efi
mount /dev/nvme1n1p1 /boot/efi
grub-install --target=arm64-efi --efi-directory=/boot/efi --bootloader-id=Gentoo
umount /boot/efi

ref.
None

發佈留言