XFS分区上装grub
出自Linux Wiki
提示:此文已超过 15 年(5757 天)未更新,如发现内容过时或有误,欢迎改进:)
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
参考资料
本文对您有帮助?分享给更多朋友!
反馈与讨论
发现文档不全面、有错误却没时间编辑文档?想分享自己的经验或见解?欢迎在此留言、讨论。