2015年1月5日 星期一

解決「安裝在 DMRAID 硬碟的 Fedora,升級後不能正確掛載目錄」的問題

平常用的工作機雖然有些舊了,卻還有兩個 SATA 插座,也提供 RAID 1 的硬碟資料保護。有鑑於硬碟發生故障時,常是是沒有任何預警。就用這個簡易的 BIOS RAID 保護硬碟資料,也不是說資料有多重要,只是系統壞了,要重新復原到正常狀態需要不少時間。
  之前,在安裝 Fedora 19 時,並沒有什麼大問題,依照說明書,或操作介面的提示訊息就足夠。在之後的使用時,也都很正常;唯一可以抱怨的,就是速度因 BIOS RAID 而有些微損失。

:BIOS RAID 部分容錯計算是由軟體完成,硬體只提供部分加速功能。

Fedora 21 發佈後,只安裝在「虛擬機」體驗,沒有在實體安裝測試。利用元旦的連假,將原本執行 Fedora 19 的工作機,升級到 Fedora 21 Workstation。進行實用測試,比較能試出問題點來。
  由於是原有的工作機,所以安裝時保留 /home 這個目錄。其它『分割』只做格式化,大小及掛載點都不變。安裝過程除了『分割』設定時小心一點外,其它的操作反因少了一些選項,而變得較簡單。
  安裝後,重新啟動就發生問題,查看開機時的訊息,顯示 /boot 和 /home 未能自動掛載。幾次手動掛載 /home 目錄,才勉強讓系統開機,並登入桌面。但是,下次開機又是一番折騰,難道要重新換回 Fedora 19 才行?
  根據錯誤訊息得知,該目錄(/boot 和 /home)已被掛載並處於忙錄中,造成掛載失敗。以為是原有 Linux 核心的問題,想說先更新再說;不料,仍是一樣的結果。
  比對開機階段與目錄掛載有關的檔案:/boot/grub2/grub.conf(指定『 / 』目錄所在)及 /etc/fstab(掛載 /, /boot, /home 及 swap 分割、目錄)。其中,有以 UUID 也有使用 Disk-Mapper 型式來指定分割、目錄。
  因為原本的系統是用 dmraid (Device-Mapper Software RAID) 製做的 RAID 1,其指定『分割』的方式應該是 /dev/mapper/pdc_xx...xxN,就將 /boot/grub2/grub.conf 及 /etc/fstab 兩個檔案修改一下,修改內容如下:

一、開機選項設定檔 /boot/grub2/grub.conf 的修改

先啟動「終端機」並切換為 root 身分,用讀者熟悉的「文字編輯程式」編輯 /boot/grub2/grub.conf 檔;如果喜歡「圖形化介面」可以用 pluma 或 gedit 開啟它。找到開機選項的內容,下面的例子是已將 Fedora 21 更新至最新版,
 . . . . .
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Fedora (3.17.7-300.fc21.x86_64) 21 (Twenty One)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.17.4-301.fc21.x86_64-advanced-f0acf48f-b973-4ef8-a73e-3b3aec28cc4a' {
    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='hd0,msdos1'  e386c71d-6d72-448a-994f-f42acccc7f4b
     else
         search --no-floppy --fs-uuid --set=root e386c71d-6d72-448a-994f-f42acccc7f4b
     fi
     linux16 /vmlinuz-3.17.7-300.fc21.x86_64 root=UUID=f0acf48f-b973-4ef8-a73e-3b3aec28cc4a ro rd.dm.uuid=pdc_hgjifbghb rhgb quiet LANG=zh_TW.UTF-8
     initrd16 /initramfs-3.17.7-300.fc21.x86_64.img
}
 . . . . .
其中,以 linux16 為首的那一列,有個 root=UUID=. . . 的參數是用來指定系統『 / 』(即:根目錄)之所在。把它改成 Disk-Mapper 的型式,如下:
 . . . . .
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Fedora (3.17.7-300.fc21.x86_64) 21 (Twenty One)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.17.4-301.fc21.x86_64-advanced-f0acf48f-b973-4ef8-a73e-3b3aec28cc4a' {
    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='hd0,msdos1'  e386c71d-6d72-448a-994f-f42acccc7f4b
     else
         search --no-floppy --fs-uuid --set=root e386c71d-6d72-448a-994f-f42acccc7f4b
     fi
     linux16 /vmlinuz-3.17.7-300.fc21.x86_64 root=/dev/mapper/pdc_hgjifbghb2 ro rd.dm.uuid=pdc_hgjifbghb rhgb quiet LANG=zh_TW.UTF-8
     initrd16 /initramfs-3.17.7-300.fc21.x86_64.img
}
 . . . . .
其中的 /dev/mapper/pdc_hgjifbghb2 就是 Disk-Mapper 型式的根目錄識別名。

:Disk-Mapper 型式的識別名,需要讀者自行查詢(筆者是從終端機用命令『 ll /dev/disk/by-id/ 』得到),或藉助一個名稱為 gnome-disk-utility (程式選單:《應用》→《附屬應用程式》→《硬碟》)的系統工具。

二、硬碟掛載設定檔 /etc/fstab 的修改

系統核心載入後,會根據 /etc/fstab 的內容掛載其它目錄,在修改後都是以 UUID 型式指定各分割的識別名,除了 / (根目錄)以後,其它目錄都未能成功掛載。
#
# /etc/fstab
# Created by anaconda on Fri Jan  2 22:50:57 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f0acf48f-b973-4ef8-a73e-3b3aec28cc4a/ext4 defaults 
UUID=e386c71d-6d72-448a-994f-f42acccc7f4b/boot ext4defaults12
UUID=8d6ac833-a3c4-48ab-84b2-717c812e9b13/homeext4defaults12
UUID=caa22ab9-0e2b-4286-98a1-f298c908591aswapswapdefaults00
查詢適當的 Disk-Mapper 型式識別名,(筆者是比較 /dev/mapper、/dev/disk/by-uuid 及 /dev/disk/by-id 得知)。修改後的內容如下:
#
# /etc/fstab
# Created by anaconda on Fri Jan  2 22:50:57 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/pdc_hgjifbghb2/ext4 defaults 
/dev/mapper/pdc_hgjifbghb1/boot ext4defaults12
/dev/mapper/pdc_hgjifbghb5/homeext4defaults12
/dev/mapper/pdc_hgjifbghb3swapswapdefaults00
再重新開機,系統就會正確地自動掛載這些分割。

已測試版本:

  • Fedora: 19 → 21

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)