在双引导Linux系统上实现OS自动切换(转)[@more@]利用本文中介绍的这些技巧,我们可以在一个双引导的机器上自动从一个操作系统切换到另外一个操作系统,无需任何人工干预。您可以使用本文提供的脚本在自己的机器上复制这种同时运行 Linux? 和 Windows? 的设置。
既然我们可以非常简单地直接手工实现这种操作系统的切换,为什么还希望自动化此操作呢?简单的答案是自动化过程可以让使用多个操作系统变得容易得多。例如您要在多个操作系统平台上测试软件,那么这种功能就会特别有用。
本文在介绍这些技巧时假设您已经安装好了操作系统,并使用 GRUB 配置了多重引导。GRUB 是 GRand Unified Bootloader 的简称,它在机器启动时加载,然后机器的控制权被转交给 OS 内核软件。有关部署 GRUB 的帮助信息,请参阅本文后面的 参考资料 一节。
本文介绍的技巧可以适用于:
Microsoft? Windows XP Professional Microsoft Windows Server 2003 Debian Linux 3.1(Sarge)
Red Hat Enterprise Server(RHES) 3 GRUB 0.97;虽然使用这个版本的 GRUB 成功了,但不保证使用其他 bootloader 也会获得成功步骤 1. 设置磁盘分区
在开始配置系统之前,确保有一个最新的系统备份,并且手头有一张援助用的 CD.如果在执行这些步骤时出现了问题,那么机器可能无法启动。如果发现自己面临的风险是无法接受的,那么最好不要继续执行以下步骤。
创建 Bootcontrol 分区
在一块硬盘上创建一个小分区。在这个分区上必须创建这样一个文件系统:要切换的所有操作系统都能够加载这个文件系统,并可以对这个文件执行写入操作。我们选择使用 FAT32.尽管整个 Bootcontrol 系统只需要不到 1MB 的磁盘空间,但是 FAT32 默认最小限制为 256MB,因此这会浪费一些空间。
如果没有足够的未分配空间,可以通过缩小或删除现有分区来创建这部分空间。 在 Linux 中可以使用 GNU parted 命令来实现这项功能。如果在执行 parted 操作之后,现有分区的次序发生了变化,那么可能还需要更新 /etc/fstab 文件。有关的更多信息,请参阅 parted 的文档。
当使用 parted 在测试机器上创建所需的分区时,会看到如清单 1 中所示的结果:
清单 1. 创建必需的分区
repton:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
proc /proc proc defaults 0 0
/dev/hda2 / ext3 defaults 0 1
/dev/hda6 /home ext3 defaults 0 2
/dev/hda7 /opt ext3 defaults 0 2
/dev/hda5 none swap sw 0 0
/dev/hdc /media/cdrom0 iso9660 ro,user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
repton:~# umount /home
repton:~# parted
Using /dev/hda
(parted) print
Disk geometry for /dev/hda: 0.000-57231.562 megabytes
Disk label type: msdos
Minor Start End Type Filesystem Flags
1 0.031 18412.734 primary ntfs boot
2 18418.271 25085.874 primary ext3
3 25085.874 57231.562 extended
5 25085.905 26458.615 logical linux-swap
6 26458.646 49999.174 logical ext3
7 49999.206 57231.562 logical ext3
(parted) resize 6 26458 49739
(parted) mkpartfs logical fat32 49739 49999
(parted) print
Disk geometry for /dev/hda: 0.000-57231.562 megabytes
Disk label type: msdos
Minor Start End Type Filesystem Flags
1 0.031 18412.734 primary ntfs boot
2 18418.271 25085.874 primary ext3
3 25085.874 57231.562 extended
5 25085.905 26458.615 logical linux-swap
6 26458.646 49740.314 logical ext3
8 49740.346 49999.174 logical fat32
7 49999.206 57231.562 logical ext3
(parted) q
repton:~# mount /home
挂载 Linux 分区
在为控制分区创建好空间之后,需要将其挂载到 Linux 中,这样就可以在 Linux 中看到这个分区。在本例中,我们将以下内容添加到了 /etc/fstab 中:
# /dev/hda8 /boot/control vfat umask=022,dmask=022,fmask=022 0 2然后使用下面的命令来创建挂载点并挂载这个文件系统:
mkdir /boot/control mount /boot/control
还需要更新 GRUB 在分区结果上维护的信息。在这个测试系统上,我们使用下面的命令:grub-install /dev/hda.
挂载 Windows 分区
通过(手工)重新启动到 Windows,验证上面的分区编辑步骤不会破坏 Windows 的引导过程。 然后为刚才创建的 Bootcontrol 卷分配一个驱动器字符。在现代版的 Windows 上,可以使用 Computer Management MMC snap-in(右键点击 My Computer,然后选择 Manage)。在以前的版本上,可以选择 Start > Administrative Tools.
图 1 给出了为 Bootcontrol 分区分配字母 W: 之后的样子。
图 1. 为 Bootcontrol 分区分配一个 Windows 驱动器字符
400) {this.resized=true; this.width=400; this.alt='Click here to open new window';}" border=0>
步骤 2. 重定向 GRUB 引导菜单
将 GRUB 配置文件 /boot/grub/menu.lst 放入 Bootcontrol 分区中,Windows 和 Linux 都可以对其进行写入操作。这让我们可以使用一个在两种操作系统上都可以运行的脚本来修改默认的引导设置。默认情况下,GRUB 不会在这个位置来寻找配置文件,因此我们必须在初始位置上通过一个小技巧来使用该文件。
打印原始文件的一个硬拷贝。如果 GRUB 加载失败,那么可以手工键入所需的命令来引导系统。有关的更多信息,请参阅 GRUB 的信息页。
在这个示例系统上,我们首先复制文件 cp /boot/grub/menu.lst /boot/control/menu.lst,然后将下面的内容(参见清单 2)添加到原始 /boot/grub/menu.lst 文件中,并将其放到现有引导选项之前。
清单 2. 让两个操作系统都可以访问引导文件
title BOOTCONTROL REDIRECT : PLEASE WAIT
root (hd0,7)
configfile /menu.lst
boot
确保 root 命令的参数对于您的系统来说是正确的。通常,驱动器是从 0 开始编号的(而不是采用从 a 到 z 的字母),分区也是从 0(而不是 1)开始编号的。因此对于我们的例子来说,/dev/hda8 变成了 (hd0,7)。我们从其他所有地方中删除 savedefault 命令,并更新以下设置,确保 10 秒种之后 Bootcontrol 选项会被选中。在 GRUB 文档中可以找到更多这方面的信息。
default 0 timeout 10
现在已经完成了 GRUB 配置的重定向,接下来将重新启动系统,检查菜单显示是否仍然正确。
此处最常见的错误是确定分区时出现错误。请检验 parted 中的分区号(“Minor”)是否与 /etc/fstab 匹配,GRUB 在 /boot/grub/menu.lst 中使用的分区号是该编号减 1.
步骤 3. 配置 Bootcontrol
从后面的 下载 一节中下载 zip 文件,并将其展开到 Bootcontrol 分区中。这个 zip 文件包含了一个 Perl 脚本,用来以一种通用的方式处理切换操作系统的问题;还有几个用来在 Windows 和 Linux 之间实现切换的示例脚本。这些脚本期望将当前的工作目录设置成 Bootcontrol 分区。
使用的脚本
以下是使用的脚本:
bootcontrol.pl
grub-config-file 参数是要编辑的配置文件的路径。通常应该修改 menu.lst,但是我们可能会希望通过使用 menu.lst 副本来测试所有的修改是否都像我们所期望的那样。
platform-title 参数被用作一个子字符串(技术上是一个正则表达式),以便与 /boot/control/menu.lst 中的标题字段进行匹配。该参数是不区分大小写的,bootcontrol.pl 会选择第一个匹配的实例。如果为 platform-title 指定的是一个数字,那么该数字会被当作是要引导的菜单选项(而不是要匹配的平台)。菜单文件中的第一项是 0.
辅助脚本
与 bootcontrol.pl 一起提供的还有另外两个小脚本,它们是作为模板提供的,可以促进 Windows 与 Linux 之间的切换。在任意一个操作系统上,都可以输入 to_linux.pl 或 to_windows.pl.这些脚本只在需要时才重新启动,但是它们通常都会更新 GRUB 的默认设置。
步骤 4. 维护系统
对已经安装的操作系统进行任何修改或更新都可能对 Bootcontrol 使用的设置产生影响,因此在对系统进行任何可能会影响 GRUB 或 Linux 内核的更新操作之后,需要检查系统的重新启动能力。这些更改可能会在不更改 /boot/control/menu.lst 的情况下更改 /boot/grub/menu.lst.
既然我们可以非常简单地直接手工实现这种操作系统的切换,为什么还希望自动化此操作呢?简单的答案是自动化过程可以让使用多个操作系统变得容易得多。例如您要在多个操作系统平台上测试软件,那么这种功能就会特别有用。
本文在介绍这些技巧时假设您已经安装好了操作系统,并使用 GRUB 配置了多重引导。GRUB 是 GRand Unified Bootloader 的简称,它在机器启动时加载,然后机器的控制权被转交给 OS 内核软件。有关部署 GRUB 的帮助信息,请参阅本文后面的 参考资料 一节。
本文介绍的技巧可以适用于:
Microsoft? Windows XP Professional Microsoft Windows Server 2003 Debian Linux 3.1(Sarge)
Red Hat Enterprise Server(RHES) 3 GRUB 0.97;虽然使用这个版本的 GRUB 成功了,但不保证使用其他 bootloader 也会获得成功步骤 1. 设置磁盘分区
在开始配置系统之前,确保有一个最新的系统备份,并且手头有一张援助用的 CD.如果在执行这些步骤时出现了问题,那么机器可能无法启动。如果发现自己面临的风险是无法接受的,那么最好不要继续执行以下步骤。
创建 Bootcontrol 分区
在一块硬盘上创建一个小分区。在这个分区上必须创建这样一个文件系统:要切换的所有操作系统都能够加载这个文件系统,并可以对这个文件执行写入操作。我们选择使用 FAT32.尽管整个 Bootcontrol 系统只需要不到 1MB 的磁盘空间,但是 FAT32 默认最小限制为 256MB,因此这会浪费一些空间。
如果没有足够的未分配空间,可以通过缩小或删除现有分区来创建这部分空间。 在 Linux 中可以使用 GNU parted 命令来实现这项功能。如果在执行 parted 操作之后,现有分区的次序发生了变化,那么可能还需要更新 /etc/fstab 文件。有关的更多信息,请参阅 parted 的文档。
当使用 parted 在测试机器上创建所需的分区时,会看到如清单 1 中所示的结果:
清单 1. 创建必需的分区
repton:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
proc /proc proc defaults 0 0
/dev/hda2 / ext3 defaults 0 1
/dev/hda6 /home ext3 defaults 0 2
/dev/hda7 /opt ext3 defaults 0 2
/dev/hda5 none swap sw 0 0
/dev/hdc /media/cdrom0 iso9660 ro,user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
repton:~# umount /home
repton:~# parted
Using /dev/hda
(parted) print
Disk geometry for /dev/hda: 0.000-57231.562 megabytes
Disk label type: msdos
Minor Start End Type Filesystem Flags
1 0.031 18412.734 primary ntfs boot
2 18418.271 25085.874 primary ext3
3 25085.874 57231.562 extended
5 25085.905 26458.615 logical linux-swap
6 26458.646 49999.174 logical ext3
7 49999.206 57231.562 logical ext3
(parted) resize 6 26458 49739
(parted) mkpartfs logical fat32 49739 49999
(parted) print
Disk geometry for /dev/hda: 0.000-57231.562 megabytes
Disk label type: msdos
Minor Start End Type Filesystem Flags
1 0.031 18412.734 primary ntfs boot
2 18418.271 25085.874 primary ext3
3 25085.874 57231.562 extended
5 25085.905 26458.615 logical linux-swap
6 26458.646 49740.314 logical ext3
8 49740.346 49999.174 logical fat32
7 49999.206 57231.562 logical ext3
(parted) q
repton:~# mount /home
挂载 Linux 分区
在为控制分区创建好空间之后,需要将其挂载到 Linux 中,这样就可以在 Linux 中看到这个分区。在本例中,我们将以下内容添加到了 /etc/fstab 中:
# /dev/hda8 /boot/control vfat umask=022,dmask=022,fmask=022 0 2然后使用下面的命令来创建挂载点并挂载这个文件系统:
mkdir /boot/control mount /boot/control
还需要更新 GRUB 在分区结果上维护的信息。在这个测试系统上,我们使用下面的命令:grub-install /dev/hda.
挂载 Windows 分区
通过(手工)重新启动到 Windows,验证上面的分区编辑步骤不会破坏 Windows 的引导过程。 然后为刚才创建的 Bootcontrol 卷分配一个驱动器字符。在现代版的 Windows 上,可以使用 Computer Management MMC snap-in(右键点击 My Computer,然后选择 Manage)。在以前的版本上,可以选择 Start > Administrative Tools.
图 1 给出了为 Bootcontrol 分区分配字母 W: 之后的样子。
图 1. 为 Bootcontrol 分区分配一个 Windows 驱动器字符
![figure1.jpg](https://i-blog.csdnimg.cn/blog_migrate/6014b5e2522eb99f3f12ff1aaad4aca6.png)
步骤 2. 重定向 GRUB 引导菜单
将 GRUB 配置文件 /boot/grub/menu.lst 放入 Bootcontrol 分区中,Windows 和 Linux 都可以对其进行写入操作。这让我们可以使用一个在两种操作系统上都可以运行的脚本来修改默认的引导设置。默认情况下,GRUB 不会在这个位置来寻找配置文件,因此我们必须在初始位置上通过一个小技巧来使用该文件。
打印原始文件的一个硬拷贝。如果 GRUB 加载失败,那么可以手工键入所需的命令来引导系统。有关的更多信息,请参阅 GRUB 的信息页。
在这个示例系统上,我们首先复制文件 cp /boot/grub/menu.lst /boot/control/menu.lst,然后将下面的内容(参见清单 2)添加到原始 /boot/grub/menu.lst 文件中,并将其放到现有引导选项之前。
清单 2. 让两个操作系统都可以访问引导文件
title BOOTCONTROL REDIRECT : PLEASE WAIT
root (hd0,7)
configfile /menu.lst
boot
确保 root 命令的参数对于您的系统来说是正确的。通常,驱动器是从 0 开始编号的(而不是采用从 a 到 z 的字母),分区也是从 0(而不是 1)开始编号的。因此对于我们的例子来说,/dev/hda8 变成了 (hd0,7)。我们从其他所有地方中删除 savedefault 命令,并更新以下设置,确保 10 秒种之后 Bootcontrol 选项会被选中。在 GRUB 文档中可以找到更多这方面的信息。
default 0 timeout 10
现在已经完成了 GRUB 配置的重定向,接下来将重新启动系统,检查菜单显示是否仍然正确。
此处最常见的错误是确定分区时出现错误。请检验 parted 中的分区号(“Minor”)是否与 /etc/fstab 匹配,GRUB 在 /boot/grub/menu.lst 中使用的分区号是该编号减 1.
步骤 3. 配置 Bootcontrol
从后面的 下载 一节中下载 zip 文件,并将其展开到 Bootcontrol 分区中。这个 zip 文件包含了一个 Perl 脚本,用来以一种通用的方式处理切换操作系统的问题;还有几个用来在 Windows 和 Linux 之间实现切换的示例脚本。这些脚本期望将当前的工作目录设置成 Bootcontrol 分区。
使用的脚本
以下是使用的脚本:
bootcontrol.pl
grub-config-file 参数是要编辑的配置文件的路径。通常应该修改 menu.lst,但是我们可能会希望通过使用 menu.lst 副本来测试所有的修改是否都像我们所期望的那样。
platform-title 参数被用作一个子字符串(技术上是一个正则表达式),以便与 /boot/control/menu.lst 中的标题字段进行匹配。该参数是不区分大小写的,bootcontrol.pl 会选择第一个匹配的实例。如果为 platform-title 指定的是一个数字,那么该数字会被当作是要引导的菜单选项(而不是要匹配的平台)。菜单文件中的第一项是 0.
辅助脚本
与 bootcontrol.pl 一起提供的还有另外两个小脚本,它们是作为模板提供的,可以促进 Windows 与 Linux 之间的切换。在任意一个操作系统上,都可以输入 to_linux.pl 或 to_windows.pl.这些脚本只在需要时才重新启动,但是它们通常都会更新 GRUB 的默认设置。
步骤 4. 维护系统
对已经安装的操作系统进行任何修改或更新都可能对 Bootcontrol 使用的设置产生影响,因此在对系统进行任何可能会影响 GRUB 或 Linux 内核的更新操作之后,需要检查系统的重新启动能力。这些更改可能会在不更改 /boot/control/menu.lst 的情况下更改 /boot/grub/menu.lst.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10617731/viewspace-952717/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10617731/viewspace-952717/