XFS分区上装grub

此页由Saber于2009年2月28日 (星期六) 12:32的最后更改。 在Linux Wiki用户Chenxing的工作基础上。

出自Linux Wiki

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

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

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

反馈与讨论

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