GNU GRUB手册之安装(二)

4.3 bios驱动器和OS驱动器之间的映射

如果设备映射文件存在,那么GRUB的工具(比如grub-probe)就会读取它,并把bios的驱动器映射到OS的设备。这个文件的组成是这样的:

(device)file

device就是用GRUB语法指定的驱动器,file就是OS中的文件,通常来说就是一个设备文件(意思就是把硬件驱动器,映射到操作系统里的设备文件,因为在linux中,所有东西都是文件,哪怕是设备)

历史原因,因为GRUB的在配置文件中使用的驱动器名称是来源于BIOS的驱动器编号,因此要用到驱动器映射文件。BIOS的驱动器和OS的设备文件在设备映射文件中有时会出错,比如当你把IDE和SCSI的启动顺序调换后,那么GRUB就会得到错误的顺序了。

不幸的是,就是算OS的设备文件也是不稳定的(会变)。现代的linux内核检测到的驱动器顺序在每次启动的时候都可能会不一样,并且前缀(/dev/hd*、/dev/sd*)也会因为使用的驱动程序的子系统不同而改变。所有,在一些系统中,设备映射文件需要经常修改。

为了避免这个问题,在生成grub.cfg时,GRUB使用UUIDS或者文件系统的符号,因此,我们建议你在自定义的启动目录项时,也用这种方式。如果设备映射文件不存在,GRUB的工具会使用一个临时的映射文件(是这样翻译吧)。对于一个磁盘的系统来说,这个方法一般都可以解决问题。

但是,设备映射文件还没有完全过时,如果在启动时,当前的环境变化时,它会被重写。比如,一个常见的情况就是你在虚拟机中使用分区或者逻辑卷作为磁盘。在配置文件中,以#开头的都是注释,因此你可以根据需要来写你想要的注释。

在bios中的安装

MBR

在PC BIOS平台使用的传统分区表的格式叫做MBR(master boot record)格式;这个分区表允许最多4个主分区和一个额外的逻辑分区。使用这种分区表格式,可以有两种方法来安装GRUB:第一,可以放在MBR和第一个分区之间的区域(这个区域有不同的叫法:boot track、MBR gap、emdeding area等),这个区域一般最少有1000k;第二,核心映像文件安装在文件系统,让它启动的东西就放在分区的第一个扇区。

现代的工具常常会把MBR gap保留至少1023k的空间,这个空间可以满足多数配置。此外,这个值也是GRUB团队建议的。

历史上,许多工具只预留了31k的空间。但这点空间不够用来解析可靠的、复杂的结构,比如:Btrfs、ZFS、RAID或者LVM,也不能过使用复杂的磁盘访问方法,比如ahci。如果要使用小的MBR gap空间来安装,除非配置文件很小,并且有一定的保证。这些要保证的配置是:

1. 在/boot这里使用biosdisk作为磁盘访问模块

2. 不使用任何额外的分区映射表来访问/boot

3. /boot必须是以下几种文件系统: AFFS, AFS, BFS, cpio, newc, odc, ext2/3/4, FAT, exFAT, F2FS, HFS, uncompressed HFS+, ISO9660, JFS, Minix, Minix2, Minix3, NILFS2, NTFS, ReiserFS, ROMFS, SFS, tar, UDF, UFS1, UFS2, XFS

MBR有一些技术上的问题。没有一个百分百安全的方法来保证MBR gap的空间,有一些专用软件会使用这个区域,从而导致用户在解决授权限制的问题时会很棘手。GRUB通过是这样来解决的:

1. 检测被其他软件使用的扇区

2. 通过Reed-Solomon的编码方式来保护自己扇区的和避免他们。

GRUB团队建议MBR gap至少要1000k。

把GRUB安装到文件系统,意味着GRUB很容易被移动,所以,这种安装方式是很脆弱的。这种方法只有/boot安装到同一个磁盘时(这个磁盘时BIOS的启动时使用的),才能够被使用。所以GRUB不应该依赖BIOS的磁盘序号。(因为这个序号经常会变的,前面也提到了)

除非你有特别的需求,GRUB团队建议把GRUB安装到一个分区之前。你必须保证第一个分区必须至少在1000k之后的扇区开始。在现代的磁盘中,它常常会对其分区,从而有个更大的边界,因此,第一个分区常常从1M这个地方开始的。

GPT

一些新的系统使用的是GPT格式。这是EFI的一部分,但如果系统软件支持的话,它也可以用在BIOS平台。比如GRUB和GNU/Linux就能这么用。通过这种格式,可以保留一整个分区给GRUB,叫做BIOS boot 平台。这样GRUB就可以被装在分区里,不用担心被其他软件覆盖,不用因为在文件系统里被移走。

如果要在GPT系统里安装BIOS启动分区,你要保证至少有31k的空间(GPT格式的硬盘都不会小,因此我们建议你要比最低要求要高,比如1m,以满足日后空间的增长)。你也要保证有正确的分区类型。通过GNU的parted,你可以用这些命令:

parted /dev/disk set partition-number bios_grub on

如果你使用gdisk,要把分区类型设置为‘0xEF02’。如果是那些直接使用GUID的程序,那么使用'21686148-6449-6e6f-744e656564454649'.

注意:在选择分区时,要非常小心。当你用GRUB在安装时,会查找BIOS boot分区,它会自动覆盖它的部分内容,必须保证这个分区里没有其他数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值