XFS分區上裝grub

此頁由 Saber 於 2009年2月28日 (星期六) 12:32 的最後更改。 在Linux Wiki用戶Chenxing的工作基礎上。

出自Linux Wiki

提示:此文已超过 7 年(2842 天)未更新,如发现内容过时或有误,欢迎改进:)

XFS文件系統是一種高效的日誌文件系統。但如果嘗試將grub直接安裝到XFS分區上,則會發生錯誤,即不能通過別的grub中的chainloader +1命令啟動XFS分區上的grub,出現錯誤:

grub> chainloader +1
Error 13: Invalid or unsupported executable format

目錄

原因簡析

通常來說,grub既可以被安裝到硬盤的MBR上,也可以安裝到分區的第一個扇區,作為該分區的啟動程序。安裝到MBR總是可行的,但要安裝到分區的開頭,則要求分區的這一扇區必須未被使用。不幸的是,XFS文件系統恰好把分區的第一個扇區做為超級塊,也就是有關文件系統的信息被存儲到這一扇區,grub無法覆蓋這一內容,這也就導致grub不能被簡單地安裝到此種分區上。

Hint.gif
提示:
類似地,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
Hint.gif
提示:
如果不是openSUSE,使用grub-install應該也能達到目的。

參考資料

  1. http://www.mail-archive.com/bug-grub@gnu.org/msg10770.html

本文对您有帮助?分享给更多朋友!

反馈与讨论

发现文档不全面、有错误却没时间编辑文档?想分享自己的经验或见解?欢迎在此留言、讨论。
简体繁体转换