雖然試了很多次,不過目前只能以 Workstation(工作站)版,將整個 Fedora 21 系統安裝在 RocketRAID 硬碟加速卡所管轄的硬碟組中。Server(伺服器)版只能將「RAID 硬碟組」當做資料碟使用(註:目前的嘗試的做法,尚未能在系統安裝前就載入 RokcetRAID 驅動程式)。
以下就是這幾台電腦的安裝紀錄,這次的升級例子是使用 RocketRAID 1740,詳細步驟如下:
一、編譯驅動程式的核心模組
記得一定要從 HighPoint 官網下載 Linux 的「開放原始碼驅動程式」,才不容易有『後遺症』。不過,這次不用像以前一樣,一列一列去找要修改的地方,在 ubuntu 的一份文件中,有提供一份「修補檔 (patch)」的壓縮檔,『rocketraid-linux-3.11-patch-r2.tar.bz2』,裏面有有許多適用 HighPoint RocketRAID RAID 不同型號硬碟加速卡的「修補檔」。解開壓縮找出適用該型號的「修補檔」。接下來的操作例子,是假設將「開放原始碼驅動程式」與「修補檔」都存在使用者的家目錄下的 Temp 目錄中,切換工作目錄到 Temp,接著下這些命令,
tar -xzf rr174x-linux-src-v2.4-091009-1434.tar.gz上例中各列命令的用途說明如下:
tar -tf rocketraid-linux-3.11-patch-r2.tar.bz2
tar -xjf rocketraid-linux-3.11-patch-r2.tar.bz2 rr174x-linux-src-v2.4-kernel-3.11v2.patch
patch -p1 -d rr174x-linux-src-v2.4 < rr174x-linux-src-v2.4-kernel-3.11v2.patch
- 『tar -xzf rr174x ...』:將從 HighPoint 官網下載的「開放原始碼驅動程式」解壓縮。
- 『tar -tf rocketr ...』:列出來自 ubuntu 壓縮檔中所有「修補檔」的檔名,方便下個命令選擇使用。
- 『tar -xjf rocket ...』:從「修補檔」壓縮合輯中,只將 RocketRAID 1740 的「修補檔」取出。要簡單的話,就將其全部解壓縮,再挑出需要的「修補檔」。
- 『patch -p1 -d rr ...』:執行對「開放原始碼驅動程式」的修補工作。
. . . . .將 ~/Temp/rr174x-linux-src-v2.4/product/rr1740pm/linux/config.c 中,有一列
~/Temp/rr174x-linux-src-v2.4/product/rr1740pm/linux/.build/config.c:26:30: 錯誤:macro "__DATE__" might prevent reproducible builds [-Werror=date-time]
char driver_ver[] = "v2.4 (" __DATE__ " " __TIME__ ")";
. . . . .
char driver_ver[] = "v2.4 (" __DATE__ " " __TIME__ ")";改為
char driver_ver[] = "v2.4 (\" __DATE__ \" \" __TIME__ \")";再編譯就不會出錯,編譯的命令為,
cd ~/Temp/rr174x-linux-src-v2.4/product/rr1740pm/linux就可以得到 rr174x.ko 這個驅動程式核心模組,將它存到隨身碟備用。
make KERNELDIR=/lib/modules/3.17.4-301.fc21.x86_64/build/ KERNEL_VER=3.17
二、安裝 Fedora 21 Workstation
依前文〝適用 Fedora 21 的「可選版本 USB 安裝隨身碟」〞製作安裝用的 USB 隨身碟,調整 BIOS 的設定,使電腦由 USB 隨身碟開機。- 當出現安裝選項時,選擇『Fedora 21 Workstation LiveCD』,按【e】鍵修改開機參數。
- 在 linux 為首命令末端,加上 modprobe.blacklist=sata_mv 這個參數,同時按【Ctrl】+【x】鍵繼續。
- 當出現《Fedora Live》安裝選項時,選擇《Start Fedora Live》,按【Tab】鍵修改開機參數。
- 在 vmlinuz0 為首的命令末端,加上 modprobe.blacklist=sata_mv 這個參數後,按【Enter】鍵繼續。
- 當桌面跳出一個《Welcome to Fedora》視窗時,點選左邊的《Try Fedora》,再按【Close】鈕繼續,就會進入與一般使用的「GNOME 桌面」相似的 Live 執行環境。
- 同時按【ALT】+【Ctrl】+【F2】三鍵,切換到另一個「虛擬控制台」,以 root 身份登入,應該是不用密碼就可以進到「虛擬控制台」。
- 查詢、記錄目前已使用的硬碟編號,
ls /dev/sd?
會列出目前已使用的硬碟編號。 - 強制載入剛才在『步驟一』編譯好的驅動程式,
insmod /run/initramfs/live/rr174x.ko
- 再查詢一次目前已使用的硬碟編號,
ls /dev/sd?
如果 RocketRAID 正確被驅動,會看到一個新增的硬碟編號,記下來待會要用。 - 再同時按【ALT】+【Ctrl】+【F1】切回原來「GNOME 桌面」的畫面。
- 由左上角《Activities》按《Install to Hard Drive》開始安裝,過程依照一般安裝說明,在此就略過不再說明。
三、將驅動程式核心模組加裝入 Linux 的核心
前一個步驟完成後,只是將 Fedora 21 安裝至 RocketRAID 驅動的 RAID 硬碟組,而目前 Linux 核心中並無 RocketRAID 的驅動模組,直接重開機就無法使用 RAID 硬碟組;因此,還有兩個步驟要進行才可。先來說明將「驅動程式核心模組」加入 Linux 系統核心的操作過程,同時按【ALT】+【Ctrl】+【F2】三個鍵,切換到另一個「虛擬控制台」,以 root 身份登入。接著再輸入以下的命令,
cp /run/initramfs/live/rr174x.ko /mnt/sysimage/lib/modules/3.17.4-301.fc21.x86.64/kernel/drivers/scsi上例中各列命令的用途說明如下:
chroot /mnt/sysimage
mv /boot/initramfs-3.17.4-301.fc21.x86.64.img /boot/initramfs-3.17.4-301.fc21.x86.64.img.save
depmod -a 3.17.4-301.fc21.x86.64
dracut --add-drivers rr174x.ko --omit-drivers sata_mv /boot/initramfs-3.17.4-301.fc21.x86.64.img 3.17.4-301.fc21.x86.64
exit
- 『cp /run/initram ...』:將在步驟一編譯好且存放在 USB 隨身碟的「驅動程式核心模組」複製到『新安裝』Linux 核心的驅動程式目錄。
- 『chroot /mnt/sys ...』:暫時將 Linux 系統的根目錄切換到新安裝的系統,以利處理新系統的核心。
- 『mv /boot/initra ...』:修改新系統的 Linux 核心的名稱,留作備份之用。
- 『depmod -a 3.17. ...』:記錄目錄使用中的核心模組,為修改 Linux 核心之用。
- 『dracut --add-dr ...』:重製一份新的 Linux 載入核心,加上 RAID 硬碟組的驅動程式,去除不用的 sata_mv 模組。
- 『exit』:將 Linux 系統的根目錄切換為原來 Live CD。
三、修改開機時載入 Linux 核心的描述檔
之前有篇發文提及升級後的新系統不能正常啟動(參考:解決「安裝在 DMRAID 硬碟的 Fedora,升級後不能正確掛載目錄」的問題),這步驟要做的事和它類似。在步驟二安裝前才手動載入 RocketRAID 硬碟組的驅動模組,也就是從這時開始它才被 Linux 辨認到並加以編號(步驟二.7),而 USB 隨身碟早已經被辨認並編號了,所以 Linux 核心載入描述檔中的 RocketRAID 硬碟組編號不正確,要先加以修正才行。
- 同時按【ALT】+【Ctrl】+【F1】切回原來「GNOME 桌面」的畫面。
- 由《Activities》→《Show Applications》點選 gedit 開啟「文字編輯器」。
- 由《Open》→《Other Documents》→《Computer》→《mnt》→《sysimage》→《boot》→《grub2》的 grub.cfg 這個 Linux 核心載入描述檔。
- 尋找這段文字,其中紅色標示的文字,就是要修改的地方,假設 RocketRAID 硬碟組的編號原為『/dev/sdb』而 USB 隨身碟的編號為『/dev/sda』,所以未修改時的硬碟編號,在拔除 USB 隨身碟並重開機時,RocketRAID 硬碟組的編號會變為『/dev/sda』。這將導致 Linux 的核心不能正確載入而錯誤。
. . . . .
上面的例子看起來有些複雜,簡單的說就是這三個替換工作,
menuentry 'Fedora, with Linux 3.17.4-301.fc21.x86_64' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.17.4-301.fc21.x86_64-advanced-23f990f7-dfef-4f0e-9b81-16f7cc2be6d5' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 7fdc2ba9-4ccb-430a-b0eb-d32e31acacb1
else
search --no-floppy --fs-uuid --set=root 7fdc2ba9-4ccb-430a-b0eb-d32e31acacb1
fi
linux16 /vmlinuz-3.17.4-301.fc21.x86_64 root=/dev/sda2 ro rhgb quiet LANG=zh_TW.UTF-8
initrd16 /initramfs-3.17.4-301.fc21.x86_64.img
}
. . . . . - 將 hd1 換成 hd0
- 將 ahci1 換成 ahci0
- 將 sdb2 換成 sda2
- 修改好後存回就完成了。
四、Linux 核心升級時,驅動程式模組的編譯、安裝
Linux 系統如有核心更新,則驅動程式核心模組就要重新編譯一次,同時也要再加入 Linux 核心,操作的過程很制式。假設更新後的 Linux 核心版本為 3.19.3-200.fc21.x86_64,則過程將如下所列,cd ~/Temp/rr174x-linux-src-v2.4/product/rr1740pm/linux/上例中各列命令的用途說明如下:
make clean
make KERNELDIR=/lib/modules/3.19.3-200.fc21.x86_64/build/ KERNEL_VER=3.19
su
cp rr174x.ko /lib/modules/3.19.3-200.fc21.x86_64/kernel/drivers/scsi/
depmod -a 3.19.3-200.fc21.x86_64
mv /boot/initramfs-3.19.3-200.fc21.x86_64.img /boot/initramfs-3.19.3-200.fc21.x86_64.img.save
depmod -a 3.19.3-200.fc21.x86_64
dracut --add-drivers rr174x --omit-drivers sata_mv /boot/initramfs-3.19.3-200.fc21.x86_64.img 3.19.3-200.fc21.x86_64
- 『cd ~/Temp/rr174 ...』:以使用者身份,切換到家目錄下的編譯工作目錄。
- 『make clean』:將舊的編譯暫存資料清除,在小版本更新時很有用。
- 『make KERNELDIR= ...』:編譯的命令及參數。
- 『su』:切換到 root 身份,但不改變目錄位置,方便接下來的操作。
- 『cp rr174x.ko /l ...』:將編譯好的「驅動程式核心模組」複製到『更新版』Linux 核心的驅動程式目錄。
- 『mv /boot/initra ...』:修改新系統的 Linux 核心的名稱,留作備份之用。
- 『depmod -a 3.17. ...』:記錄目錄使用中的核心模組,為待會修改 Linux 核心之用。
- 『dracut --add-dr ...』:重製一份新的 Linux 載入核心,加上 RAID 硬碟組的驅動程式,去除不用的 sata_mv 模組。
註二:需要製作「驅動程式核心模組」的更新,必需確認已將「驅動模組」加入 Linux 核心,否則不能重新以新版開機。
相關發文:
參考以前幾篇與 HighPoint RocketRAID 有關的發文,將本篇內容略做修改應該也會適用。過一陣子有空再試。先把這幾篇發文列表於下:- 解決「成功編譯的『驅動模組 (driver module)』卻掛載失敗」的問題
- 在 Fedora 18 (3.11.10) 安裝 RocketRAID 2220 的驅動程式
- 安裝 HighPoint RocketRAID 2220 的 Kernel 3.9 驅動程式
- 安裝 HighPoint RocketRAID 2220 的 Kernel 3.8 驅動程式
- 安裝 Fedora 「編譯『核心模組』」所需套件
- 在 Fedora 安裝 HighPoint RocketRAID 的驅動程式
- 安裝 Fedora 的某特定版本之套件
後記:
- 2015-4-21 : 以同樣步驟測試(只修改「驅動程式原始碼」的目錄、檔案名),可成功編譯 RocketRAID 2220、2320 的「驅動程式核心模組」。尚未安裝測試。
- 2015-4-22 : 為修正一部使用 RocketRAID 2220 伺服器的 「根目錄」之 inode 問題(註:不正常關機造成),用 Fedora 21 Workstation 開機並修護,使用上述步驟建立之 RocketRAID 2220「驅動程式核心模組」(名稱為:hptmv6.ko),可正常驅動之。
已測試版本:
- HighPoint RocketRAID 1740
- Fedora 21 Workstation
- Linux kernel: 3.19.5-200
沒有留言:
張貼留言
感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)