当前位置: 首页 > 工具软件 > GNU Hurd > 使用案例 >

GNU GRUB手册之启动(二)

钱俊楚
2023-12-01

与操作系统有关的注意事项

这里,我们提供了一些操作系统要注意的地方:

• GNU/Hurd:

由于GNU/Hurd是Multiboot兼容的,因此启动它很容易,没有什么需要特别处理的。但不要忘了,你要把根分区只给内核。下面是加载内核和模块的例子:

grub> multiboot /boot/gnumach.gz root=device:hd0s1

grub> module /hurd/ext2fs.static ext2fs --readonly \

--multiboot-command-line='${kernel-command-line}' \

--host-priv-port='${host-port}' \

--device-master-port='${device-port}' \

--exec-server-task='${exec-task}' -T typed '${root}' \

'$(task-create)' '$(task-resume)'

最后,用boot命令启动就行了。

• GNU/Linux:

从GRUB启动GNU/Linux也是非常容易的,因为它看起来就类似于启动一个Multiboot兼容的系统。

1. 把GRUB的root的驱动器设置的跟GNU/Linux一样,用search --set=root --file /vmlinuz或者类似的命令可以帮助你配置。

2. 用linux这个命令来加载内核

linux /vmlinuz root=/dev/sda1

如果你需要是指定内核的参数,把它们加到命令后面就行了,比如把acpi设置为off:

linux /vmlinuz root=/dev/sda1 acpi=off

对于使用32位协议的GRUB,一些BIOS的服务,比如APM或者EDD是不能使用的,在这种情况下,你就要用linux16

linux16 /vnlinuz root=/dev/sda1 acpi=off

3. 如果你用了initrd,那么在使用linux命令后再执行它:

initrd /initrd

如果你用的是linux16,那么就要用initrd16:

initrd16 /initrd

4. 最后,执行root命令

• NetBSD:

通过GRUB来加载NetBSD内核也是非常简单的:首先设置GRUB的根驱动器,然后加载内核和模块,最后运行boot。

1. 把GRUB的根驱动器设置到和NetBSD一致。对于一个磁盘带有NesBSD便签的,这通常是第一个分区。这种情况下,假设这个分区是在第一个硬盘,那么设置就类似于下面:

insmod part_bsd

set root=(hd0,netbsd1)

对于那些使用GPT的磁盘,假设NetBSD的分区是在第三个GPT分区,那么这样做:

insmod part_gpt

set root=(hd0,gpt3)

3. 通过knetbsd来加载内核

knetbsd /netbsd -s -v

如果有需要,可以通过knetbsd_module_elf来加载内核的模块,对于根文件系统,一个典型的例子是这样的:

knetbsd_module_elf /stand/amd64/6.0/modules/ffs/ffs.kmod

4. 运行boot命令

• DOS/Windows:

GRUB不能够直接启动dos或者windows,所以要chian-load,才能启动它们。因为他们的boot loader有一些致命的缺陷,所以单单是chain-load的话,还不能成功。要解决这个问题,GRUB提供了两个辅助函数。

如果你没有把dos、windows安装到第一个硬盘,你要用磁盘交换技术,因为那些操作系统只能从第一个硬盘启动。解决办法就是用GRUB的divemap命令,就像下面这样:

drivemap -s (hd0)(hd1)

这个命令就是让第一个磁盘和第二个磁盘产生一个虚拟互换。

注意:要这个命令生效,DOS或者windows必须要用BIOS来访问这些被交换的磁盘。如果那个OS用了特别的驱动,那么就会失效。

如果你安装了多个Dos、windows到一个磁盘,那么也会出问题,因为对于dos、windows来说,多于一个主分区,会出现问题。当然,如果你还是要这么做,也是有解决办法的,用分区隐藏、解隐藏技术就行了。

如果GRUB隐藏了一个dos或者windows分区,那么dos或者windows就会忽略这个分区,如果GRUB没有隐藏DOS或者windows分区,那么它们就会检测到那些分区。所以,如果你在第一个磁盘的第一个分区和第二个分区安装了dos或者windows,而你想在第一个分区启动,那么就这么做:

parttool (hd0,1) hidden-

parttool (hd0,2) hidden+

set root=(hd0,1)

chainloader +1

parttool ${root} boot+

boot

以上是第五章的内容~~翻译不易,请大家多多支持~有问题的话,尽管拍砖~

 类似资料: