Ryzen R9 5900HX miniPC 系列 - 在 RAID0 上安裝 Ubuntu 22.04 Desktop Edition
精確地說,應是說,欲全新安裝 Ubuntu Live CD/Desktop Edition 於意圖規劃成 raid0 的磁碟陣列上,該怎麼成功完成?
因為 server 版的 installation CD,是有 support software RAID 的(mdadm),但 desktop 版的卻沒有。並且筆者幾經不斷地嘗試,不斷地爬文,最後才終於得解。所以是需要這篇文章來註記的。並且,說穿了,就是引用某篇文章才恰可成功,後面會提到。
使用 raid0,就是為了能讓存取效能最大化。筆者先期的測試,原本約 3400MB/s 的讀取,可提升至 6000 MB/s 以上。
不過 raid0 缺點是,一旦兩張磁碟中的某張若壞軌了或壞掉了,則資料將救不回來。
惡補一下:https://www.techbang.com/posts/104772-upgrade-ssd-shopping-recommendation-how-to-choose-sata-m2
緣起
- 在後期的主機板/BIOS,都是有 support RAID 的功能的。AMD 的稱為 RaidXpert2。
- 筆者只憑這樣的印象,便興沖沖地去買了 2 張 250G 三星的 970 EVO plus。當規劃成 raid 0,不僅容量加倍(廢話),宣稱讀取可達3500 MB/s(o),寫入號稱高達 2500MB/s(X叭X叭X叭X叭X叭X叭X叭X叭X叭X叭X叭X叭X叭X叭X叭X叭)的 performance,將不意外地倍數增長。
- 然而買回來,才是夢魘的開始。
AMD BIOS supports raid – RaidXpert2
- 在 windows 平台上,應是沒問題的。
- 但在 linux 平台上,amd 的 driver 版本更新太慢(years),並且一旦 linux kernel 更新,driver 很可能就無法適用了。並且它的版本控制得很嚴格,即,其他較新的 CPU 或 chipset 是絲亳找不到 driver 的。嘗試使用 fork 出去的第三方 driver 且以強制安裝也會問題一堆裝不成功。
- 今若 bios support raid 的功能,是嵌有 CPU 或 chipset 等方面所提供的加速或安全或容糾錯等的硬體支援,那得試成功才行,還好爬文得知,raid 在實現方面,分為 hardware raid,fake raid,software raid 等三種。RaidXpert2 實屬 fake raid。幸好及早放棄,不過也浪費了好些時間。請見下段落參考。
- RaidXpert2 用法簡單續述如下,
- 在 BIOS 內找一下,有一個 raid 啟用的選項,啟用後須作 reset。再次進入 bios 就會出現 RaidXpert2 的選項。
- 此機使用 AMI Aptio V BIOS,網上參考資料是零。真是挖苦了玩家了。
- 跳離 BIOS,某些快取資料都會一直保留著,除非作 reset。BIOS reset,有兩種,
- 在 BIOS 下直接按 4-second power-button shutdown,bios 就會 reset,即先前快取儲存的資料都會清除(非設定清除)。
- 在 BIOS 下某些設定變更後,最後一頁有一條儲存並重置的選項,通常用於變更與沖刷快取。或捨棄變更及重置,用於單純重置。
- 當使用 BIOS RaidXpert2 建立 raid 後,接著就該換成 driver 上場了。(即便 BIOS 設置完成,磁碟陣列之元素仍被 OS 可見,即仍不見於有單一的陣列出現/仍需 driver 上場後才會有)。
- 若此磁碟陣列是用作資料碟,則在 linux 系統上安裝 amd raid driver 便可。
- 但若是此 raid array 欲用作 system disk,那麼就相當麻煩了,使用者手冊有步驟請逕至參考。而這些步驟類似於本章要敍述的主題,software raid,the MDADM;換個方式講,BIOS 所提供的 raid 功能根本是多餘的。AMD fake raid = AMD BIOS raid + AMD software raid。
- 參考資料:
- RaidXpert2 manual
- 3P AMD RAIDXpert driver (rcraid)
Hardware raid/Fake raid/Software raid
- Explained
- Fake raid 的好處是能在 raid 上建立多重作業系統。即,多方有一致的軟體控管行為。雖使用純 software raid 仍可能實現前述,但萬一軟體改版或其他因素可能造成不同作業系統下有行為上的出入而損壞資料。
另一方面,磁碟的抽換添加更新或許就可單純由 BIOS 作復原。 - TBT raid。有使用者成功使用。
Ubuntu daily live build
- 當前版本 22.04 LTS
- beta version
- 輔助套件
Software Raid – MDADM 試前準備
- 本篇文章的目的如一開頭所述,是介紹使用 mdadm 來實現 installing ubuntu on raid0。
- 看了很多文章,是基於底下這篇文章才成功的。
- https://2formosa.blogspot.com/2020/05/ubuntu-20.04-boot-from-RAID-1.html
- 筆者是基於想安裝成有 GUI 界面的前題下;事實上,有以下幾種方法都可使用,成不成功就看 mdadm 能不能順利裝載與啟用 raid:
- 使用 Live CD(is desktop edition),間接(“try ubuntu”選項)直接 fdisk 規劃硬碟,之後使用 mdadm 成 raid0,再接著直接安裝 Ubuntu(“install ubuntu”),最後再真正裝載 mdadm(全程沒有 reboot)。
- 使用 ubuntu server installation cd,安裝過程中便輕易實現 os on raid0,之後再安裝 GUI。
- 使用 ubuntu server installation cd,安裝過程中便輕易實現 raid 分割區的規劃,但接著中途中斷安裝,之後再比照第一種方式安裝。此法跟第一種的差異就僅是不使用 fdisk 規劃分割區。此種方式就是筆者所採用的方式,屬於比較無腦的方式,但有點繞路。
- 需準備的東西如下:
- Ubuntu live cd,如前段落的連結。
- Ubuntu server cd。
- 準備兩支 usb flash disk,都 16G 以上。一支裝載 ubuntu server installation cd,另一支則是給裝 server 系統用的。
- 所以是需準備另一台 ubuntu 電腦的。
- 還要有網路。
- 當然少不了目的主機含至少兩顆硬碟來實現 raid0。
- 先說,之所以第二張隨身碟,就是為了裝上 server 系統後,可對此資料型 raid0 作讀寫速度測試。
- 讓我們開始吧!
製作 usb installation disk
- 我們之前使用 unetbootin 製作之,
- 現在有更簡便快速的方法。
- 先下載 server 版和 desktop 版 iso。
- 在 Ubuntu 下開啟 disks app。(預設既存,若沒有,apt install gnome-disk-utility)
- 如圖操作,便可建立 usb installation cd(disk)。我們這一步是建立 server installation cd,記得後面所省略的步驟是再次建立 live cd 以真正在主機上安裝桌面版。
規劃主機硬碟及安裝 Ubuntu Server 到隨身碟上
- 目的有兩點,規劃好分割區,及測試 SSD 的讀寫速度。
- 如果讀者沒想要作測,則在安裝 server 版的過程當分割區都規劃好並寫入之後(於指定 user name 時),便可中斷安裝毌需花費多餘安裝等待時間;則下一步便是使用 ubuntu live cd 桌面版。
- 安裝前,請拔除網路線及不啟用無線網路。(alt. 當然不拔或使用網路亦無不可)
- 一開始,將兩支 usb 隨身碟都插入目的主機,其中一支是 server cd,用以啟動安裝;另一支是空白的,用以規劃成 root(/),所安裝的所有檔案都裝在此碟上。
- 安裝好 server 版後,rebooting up,系統將會無限期地等待有線網路連通,所以此時必須將網路線插回,才進得了 tty console。除非系統先前沒抓到網路卡(才會跳過進到 tty)則當若沒有無線網路只能使用有線網路時必須手動加裝 nic driver,才有網路可用;亦或使用無線網路(tty 下如何啟用請自行谷歌)。在 tty 下我們是需要用到網路的。(alt. 若一開始有使用網路則後續 tty 下毌需煩惱網路的問題)
- 在 tty 下安裝 ubuntu-desktop;sudo apt install ubuntu-desktop;則 GUI 便安裝上了並且自動啟用。Reboot。
- 如圖一。
- 對象有三個,兩張 nvme ssd,及一張 SD_MMC(usb flash disk),
- 全程使用 GPT partitions.
- 首先對 ssd 782R,建立掛載 /boot 分割區,512MB,format 成 ext4。建立之後,系統會自動在此碟上建立 primary ESP,是 /boot/efi,自動使用了 512MB,並且自動指定成 partition 1;/boot 則被自動指定成 partition 2。有此一說 /boot 應當成 partition 1,不過系統都自動指定了 partition 2 應就無疑慮。因此遺留了 partition 3 unused,將被使用成 raid 0 member。
- ssd 797P,筆者自己保留了 10GB,partition 1,format 成 ext4,unmounted。遺留了 partition 2 unused 將被使用成 raid 0 member。
- 事實上這台主機還可再掛上一張 SATA ssd,的話也可加入 raid member,所以擴充性可說相當滿意。(raid 0+1,SATA 用於映象備份,相當理想)
- SD_MMC 還未規劃。合邏輯是 raid array 建立後,即出現了單一 raid 碟,我們再來指定 root。
- 如圖二。
- 選擇 Create software Rait (md)。
- Name: md0。(筆者註,md0 如同 /dev/sda,我們使用的會是分割區 md0p1,如同 /dev/sda1,這是命名上該注意的地方)
- (筆者註,nvme 磁碟是如 nvme0n1,nvme1n1,nvme2n1,…;nvme0n1 分割區是 nvme0n1p1,nvme0n1p2,nvme0n1p3,…以此類推)
- 此時 raid array 就建立了;單一碟。
- 如圖三。
- 建立 raid array 上的分割區,我們只建立一個分割區使用全部空間。使用 GPT 分割表。
- format 成 ext4,unmounted,因為我們目前要將它當成資料碟,以可操作讀寫測速。
- 最後,建立 root 於空的 usb flash disk 上,便完成整個磁碟規劃,如圖四。
Samsung 970 EVO Plus Raid 0 read/write speed test
- 當 server 版整個安裝完成後,僅拔除 server installation cd,便可重開進系統了。
- 測試結果不用多費口舌直接看圖。
安裝 Ubuntu desktop edition 到目的主機上的 raid 0 array
- 在上個步驟完成後關機。拔除系統隨身碟。插入 live cd 碟開機安裝。
- 首先選擇試用 Ubuntu。
- 接著便會返回 Ubuntu 桌面,我們必須做啟用 raid array 的動作。
- 安裝 mdadm,
- sudo apt install mdadm
- 將 raid member partitions 在此系統下建立可被識別與使用的 raid0 array。partitions 分別是 nvme0n1p3,nvme1n1p2
- sudo mdadm –create –verbose /dev/md0 –level=0 –raid-devices=2 /dev/nvme0n1p3 /dev/nvme1n1p2(請注意 dash 符號全部都是 - -)
- 如圖六所示。
- 成功啟用如圖六。3
- 接下來,我們要真正進入安裝 ubuntu 系統的階段,點取執行桌面的安裝 Ubuntu 22.04 LTS,開始安裝步驟。
- 當進入到磁碟分割的步驟,我們選擇自訂。
- 全部分割區都必須重新規劃與指定,但不改設定值,因為分割規劃我們已在裝 server 那一階段就做好了。而 raid disk,將以單一分割區呈現。本例是 EFI 系統分割區,/boot,保留的 10GB,及 raid disk 指定規劃成 root(/)。如圖七所示。
- 接續所有安裝步驟。在最後安裝完成後,如圖八,不要重啟。我們必須點選繼續試用,退回 live cd 桌面。
- 因為所新安裝入的系統,並不曉得我們在 raid array 上裝此系統。故我們必須在此新系統上加裝能夠識別與啟用 raid array 的東西,當然,還是 mdadm。
# chroot 到新系統,使得再一次安裝 mdadm 到新系統上
sudo -i
mount /dev/md0p1 /mnt
mount /dev/nvme0n1p2 /mnt/boot
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
mount --bind /run /mnt/run
chroot /mnt
apt install mdadm
# 請記得所使用的 raid, /boot 分割區改成自己的分割區名稱
- 請注意 install mdadm 我們至此做了兩次:
- 第一次,因為 live cd 系統下並沒有單一顆 raid array 的資訊,此時 /etc/mdadm/mdadm.conf 內是空的。所以我們必須做一次 create array 的動作。做完後,raid array 的 UUID 資訊會被列舉在 /etc/mdadm/mdadm.conf 內。
- 然而第二次時是 chroot 切換到新系統下做的,已既存單一顆 raid array,所以安裝 mdadm 的同時會識別出此 raid,並自動列舉 UUID 到此新系統下的 mdadm.conf。而照理說,此時應不用再多做什麼了便可收工,不過實際狀況是我們必須額外下達指令如圖九。2,以新製 UUID 並且列舉到新系統的 mdadm.conf,使得此新系統下的其他相關設定完善。這帶出了一個問題,新系統下 mdadm.conf 將有兩行不同數值的 UUID 列舉。
- 我們將舊的 UUID 那行註解掉。
- (筆者補註,mdadm 在 v4.2-rc2 版後,UUID 便前後一致了)
- 另一個出入的地方,是 /etc/fstab 使用的是舊的 UUID。但我們不去更動 /etc/fstab,新系統便可順利開機載入成功。
- 以上出入,若讀者知其邏輯敬請指教。
- (筆者再補註,關於 fstab uuid 的出入,其實只是,raid members 個別有一共同的代表的 uuid,即其被筆者認定唯一用以代表的;不過,所有 members 組合成的單一分割區,其 uuid 是另一不同的且用在真正識別分割區或即是 fstab 所用的 uuid。)
- 圖九。2,裝完 mdadm,隨即掃取 raid array 到 mdadm.conf
- mdadm –detail –scan >> /etc/mdadm/mdadm.conf(注意 – -d 和 – -s)
- 接著編輯 mdadm.conf,將舊的 UUID 註解掉。
- vi /etc/mdadm/mdadm.conf
- 接著下達 update-initramfs -u 更新 init ram disk。
- 如圖九。3 所示。
- 最後下達 update-grub
- 如圖九。4 所示。
- 至此所有設置全部完成。
- 接下來,如圖九。5 所示,
- 退出 chroot /mnt;exit
- 此時在 sudo -i 底下,我們查看歴史看先前 mount 了哪些,我們需要 umount。反序 umount。
- 全部完成。直接關機,並拔除 live cd disk。
- 開機跑在 raid0 上的新系統。
補充
- 還記得前面筆者提到的建立 raid 0+1?
- 製作的階段,也是在前面製作 server raid0 的階段一併完成 raid 0+1,因為 raid01 也是須讓系統視為單一邏輯碟。
- 自己的考量下,
- 鏡像的磁碟其目的是作為備份之用,可允許速度較慢(成本考量),但也不能太慢,因為會佔用 CPU 資源及至瓜分 mdadm 行程的資源除非它具有多執行緒能力個別處理上一層邏輯碟才能緩解。
- 不過,何妨反其道而行?再試想,
- 如果我們可以建立 ram disk,恰恰巧,BIOS 竟然提供 ram disk 的功能,筆者也嘗試過建立之但未果因 ami aptio bios 沒有相關文件;此點又是另一篇文章了但只怕不會有。(開機 post 階段 bios 就會備妥 ramdisk 的內容克隆)
- 《這點試出來了一些,補充一下,
- bios ram disk 可由檔案載入,type 選 reserved,它只識得 fat32 分割區內的檔案。那麼例如我們將某 cd.iso 置於某 fat32 檔案系統內,於 bios 下載入,啟用,回上一層再次進入該設定再次啟用,接著直接按 F4 儲存離開。便可在該次開機下建立一顆 ramdisk,由 linux 以 /dev/pmem0 列舉出來。不幸的是一旦關機或重啟或 bios reset,此 bios 設定就會清空無法常駐。另一方面,ramdisk 的測速約 11GBs。比想象中的低。。。再論,一進 bios 就要單單去啟用它並離開,才有效。另外,選另一個 type,可能是適用於可開機的映像檔但前提是不抵觸 bios 開機順序才用得上它。》
- 這是筆者不會的進階系統管理的技法:此 miniPC 已裝載 64G RAM,而我們的系統或說整台 server 的已儲存空間,以乎不會太大頂多二十幾 GB。在 initrd 的階段,將 ssd/raid0(假設 32G)rsync 到 ramdisk,以使得回復 raid 0+1 的狀態。因此整台 server 都是自動以 raid 0+1 的狀態運行。ramdisk 是主硬碟,ssd 轉變成備用映像碟,那將是快樂得不得了了。
- 筆者相信這必定是可實現的但慚愧現無此能力。
- (以下,更新補充續述)
- 筆者隨即掛上了第三顆硬碟,重新跑安裝 server,於規劃分割區階段保留了 md0/raid0,並且新增了 md1/raid1,其是由 md0 和第三顆 1TB 的機械硬碟所組成的(r/w=100MBs/100MBs),新生成的 md1 容量比照最小的一顆 raid0。測試的結果如圖十。簡單講,mdadm 存取 raid 1 的所有成員是 realtime 的,因此存取速度將會約是所有硬碟的存取速度的中和值。也因系統是跑在 raid 1 下,所以個別硬碟的存取速度是會比原始的速度還要低一些。有趣的是,後續筆者拔除機械硬碟,系統當然仍以 raid1 順利運作,不過存取速度還是略降,是 mdadm 本身的效能檢測參考如圖十。4(但復測效能又回復該有值)。
- 當然,不需走重新跑安裝 server 這一步,可在系統運作下將 raid0 和增加的硬碟線上規劃成 raid 0+1,請自行研究。
參考資料
- https://man7.org/linux/man-pages/man8/mdadm.8.html
- https://documentation.suse.com/zh-tw/sles/12-SP5/html/SLES-all/cha-raid.html
- https://itw01.com/235VVEA.html
- https://ubuntuqa.com/zh-tw/article/11146.html
- https://iter01.com/602458.html
- https://serverfault.com/questions/216508/how-to-interrupt-software-raid-resync
- https://wiki.ubuntu.com/CustomizeLiveInitrd
- https://www.kernel.org/doc/html/latest/admin-guide/initrd.html
20230123 補充
現在已經很少在買電腦 3C 産品了。適值過年,買一下奢侈品。一個 NVME 的外接硬碟盒,及一張 1T 的 NVME SSD。
當然,補充的目的是追加測試數據如下圖。
SSD 規格是 R 3500 W 2500。1990 元。
外接盒是 1290 元。
所以從數據來看(第二張圖對比了已內接的 ssd 的速度),NVME 外接是浪費了 ssd 的能力了。
頻寬理論值 10/8 = 1.25,即最高可跑 1250MB/s,而實測讀寫各為 970 & 870。算中等了。也看到了廠商聰明地將寫入降速,以讓讀取可更高些/應當相等才對或是寫入真有比讀取還多的 cycles 要跑。
這二商品,都有共同的缺點就是,大陸連很多三流的廠家都在響應無紙化了,但眼下這兩家,仍慷慨地印了厚厚的沒有用的說明書。