XFS分區上裝grub
從 Linux Wiki
提示:此文已超过 15 年(5758 天)未更新,如发现内容过时或有误,欢迎改进:)
XFS文件系統是一種高效的日誌文件系統。但如果嘗試將grub直接安裝到XFS分區上,則會發生錯誤,即不能通過別的grub中的chainloader +1命令啟動XFS分區上的grub,出現錯誤:
grub> chainloader +1 Error 13: Invalid or unsupported executable format
目錄 |
原因簡析
通常來說,grub既可以被安裝到硬盤的MBR上,也可以安裝到分區的第一個扇區,作為該分區的啟動程序。安裝到MBR總是可行的,但要安裝到分區的開頭,則要求分區的這一扇區必須未被使用。不幸的是,XFS文件系統恰好把分區的第一個扇區做為超級塊,也就是有關文件系統的信息被存儲到這一扇區,grub無法覆蓋這一內容,這也就導致grub不能被簡單地安裝到此種分區上。
提示:
類似地,NTFS文件系統也把第一個扇區(Sector 0)作為存放文件系統信息的扇區,如果使用grub-install或grub的setup命令把grub安裝到NTFS分區上,就會導致NTFS分區不能被訪問,如果你遇到這一問題,可以參考修復被grub覆蓋的ntfs分區引導扇區。
類似地,NTFS文件系統也把第一個扇區(Sector 0)作為存放文件系統信息的扇區,如果使用grub-install或grub的setup命令把grub安裝到NTFS分區上,就會導致NTFS分區不能被訪問,如果你遇到這一問題,可以參考修復被grub覆蓋的ntfs分區引導扇區。
解決方案
方法一:新增/boot分區
最好想的方法是專門準備一個ext2分區存放/boot,但這需要調整分區表。
方法二:使用configfile
grub有個configfile命令,可以讀取某個grub配置文件。由於本文所述問題一般發生於一個grub啟動另一個grub時,所以可以使用configfile命令代替chainloader命令:
grub> root (hd0,7) grub> configfile /boot/grub/menu.lst
方法三:導出啟動信息到文件
在不調整分區的情況下讓分區中的grub可用也是可能的[1],不過需要一個未做啟動分區的ext3分區。在已經啟動的系統中,啟動grub:
grub> root (hd0, XFS的分区编号) grub> setup (hd0, 一个不用做启动的ext分区编号)
再用dd把ext分區的引導扇區複製出來。假設那個ext分區是/dev/hda15
# dd if=/dev/hda15 of=/boot/grub/stage1.copy bs=512 count=1
這樣啟動時在上一層grub中,這樣使用chainloader啟動文件就可以了:
grub> chainloader /boot/grub/stage1.copy
參考資料
本文对您有帮助?分享给更多朋友!
反馈与讨论
发现文档不全面、有错误却没时间编辑文档?想分享自己的经验或见解?欢迎在此留言、讨论。