重新启动进入另一个操作系统

重新启动进入另一个操作系统

我有一台装有多个操作系统的笔记本电脑。

有什么命令可以让我关闭当前操作系统并启动另一个操作系统?

windows->Ubuntu 反之亦然

谢谢

答案1

是的,如果你使用 Grub 进行启动选择,这是可能的:-

  • 启动进入 Linux。
  • 使能够通过登录或使用su或来获取权限sudo -s
  • 复制/boot/grub.cfg到 或/boot/grub.win/boot/grub.lin具体取决于您的默认设置。
  • 编辑/etc/default/grub以更改GRUB_DEFAULT=为启动列表中备用操作系统的编号(从零开始数)。
  • 运行update-grub,然后根据需要复制/boot/grub.cfg/boot/grub.lin/boot/grub.win
  • 恢复GRUB_DEFAULT=至先前的值/etc/default/grub
  • 创建bootlinbootwin包含:
    cp /boot/grub.lin /boot.cfgcp /boot/grub.win /boot.cfg
    shutdown -r now

现在您可以从 Ubuntu拨打bootlin或拨打电话。bootwin

在 Windows 中,您需要做同样的事情:-

  • 首次安装ext2fsd
  • U:为 Ubuntu 分区分配一个驱动器号(例如)并使其可写入。
  • 现在您可以创建bootlin.cmdbootwin.cmd包含适当的copy命令来覆盖U:\boot\grub.cfg,然后:
    shutdown -r

如果您使用 进行引导,则ntldr可以对 的两个副本使用类似的技术boot.ini(您可能需要先清除只读、系统和隐藏属性)。您可能可以使用其他引导加载程序的类似技术,但我留给其他人来建议如何使用这些。

警告:我发现ext2fsd在只读模式下运行良好,但我从未在可写模式下使用它:请注意,它可能会损坏您的 Ubuntu 系统,因此请确保它已备份,直到您尝试了几次并确信它正常工作为止。在 Windows 上编辑可能更安全grub.cfg 就地,这不需要更改目录,但您需要某种不使用同一文件系统中的工作文件的 Windows 内联编辑器,或者敲几行来C执行此操作。

答案2

这些细节可能与 UEFI 处理 GPT 系统的方式不完全匹配,但它确实描述了基于 MBR 的系统。

官方(旧)标准是使用主引导记录上的内容。可以使用“fdisk”命令更改 MBR 的详细信息。

传统 MBR 包含一些位,用于指定分区是否已标记。标准指定只标记一个分区,尽管引导代码不一定强制执行这一点。当用户指定应标记特定分区时,传统 fdisk 程序通常会检查是否有另一个已标记的分区,如果找到,则取消标记。可能会使用其他词语来描述“已标记”分区,例如“选定”分区。

然后,传统的 MBR 包含一些“代码”(指令)。系统启动时,将运行此代码。代码将检查 MBR 以查看每个分区有多大,并查看哪个分区被标记。然后,它将通过运行位于被标记的分区中的一些附加代码来继续启动过程。

所以,这是得到广泛支持的标准。不幸的是,这种标准方法需要进入 fdisk 并手动与其交互。所以这不仅仅是一个你可以运行的程序。然而,它是得到最广泛支持的标准。

去引用OpenBSD 常见问题解答: 多重引导

几乎每个操作系统都提供了一个程序来执行此操作;OpenBSD 的程序是 fdisk(8),Windows 9x 和 DOS 以及许多其他操作系统中也有类似名称的程序。这对于需要很长时间关闭和重新启动的操作系统或系统来说非常理想 - 您可以设置它并启动重新启动过程,然后走开,喝杯咖啡,然后回到以您想要的方式启动的系统 - 无需等待 Magic Moment 来选择下一个操作系统。

有趣的是,随着人们做出各种花哨的替换,最广泛支持的官方流程的优势却常常被忽视。

我知道这可能不像期望的那样自动化,尽管所问的问题没有指定非交互性。所以,简单的答案是,是的,有这样的命令。它是“fdisk”。

现在,还有一些其他的变化,因此如果您正在寻找这样的解决方案,自动化可能是可能的。您可能希望检查您的操作系统是否有名为“boot”或类似名称的命令;我知道旧的 OS/2 操作系统确实包含一个“BOOT”命令,它可以修改启动的操作系统。您需要运行的精确命令取决于您实际使用的引导代码。有多个“启动管理器”程序可用,此功能现在已内置到更多操作系统中。这是好消息。坏消息是该过程并不完全标准化,所以我不能只为您提供一个可以很好地与每个人的不同变化集成的特定过程。基本上,您需要选择一个解决方案并使用它。主要关注的可能是找到一个可以从多个操作系统完成的过程,并且可用于写入系统启动时处理的磁盘部分。这些部分通常不是文件系统的一部分,防病毒功能可能会尝试限制一个人写入磁盘的这些关键部分的能力。

基本上,这个过程将涉及更改分区的标志位,或更改 MBR 的引导代码,或更改 MBR 用于继续引导的分区上的代码的行为。因此,这是三种不同的方法,每种方法实际上都由一些不同的可用选项使用。

第四种方法可能是更改 BIOS 从哪个磁盘启动。但是,这种方法传统上在不同系统之间的兼容性要差得多,因此这种方法更多的是一种理论上的可能性,而不是实际使用的方法。(尽管许多用户已经以交互方式使用了这种方法,通常是按 F12 或其他键来调出启动菜单;有时他们只是进入 BIOS 设置并更改将在后续启动中使用的默认磁盘。)

最常见的方法可能是在系统启动时创建整个 MBR 的 512 字节映像,然后在系统启动时保存整个 MBR 的 512 字节映像。然后,使用您需要的任何软件,将这 512 字节直接写入磁盘的前 512 字节。(像“dd”这样的命令就可以了。)这样做的最大挑战可能只是获得操作系统的许可。

AFH 的回答似乎表明了如何使用 grub 从 Linux 完成此操作。XP/2003 时代的 Windows 启动管理器将使用此类扇区映像(将由“Boot.ini”文件引用),因此可以通过更改 Boot.ini 文本文件退出 Windows。(该过程在 Vista/2008 中可能已更改,因此在较新的系统上尝试之前,请先检查新的启动管理器。)实施任何这些解决方案的确切方法将取决于您要停止使用的操作系统。(例如:哪个版本的 Microsoft Windows。)

答案3

而当我们调用硬件重启时,它与关机和随后开机大致相同。因此所有内存都会丢失。当我们开机时,启动过程由主板固件处理。如果我们想告诉主板固件一些信息,我们不能在 RAM 中留下这样的消息。但我们可以在磁盘(或其他永久介质,我相信 efi 提供了设置非易失性变量的机制)上写入一些东西(任何东西)。

除了上述方法外,Linux内核还有执行在不导致硬件故障的情况下将“控制权移交给”另一个系统的功能。尽管无法直接通过 kexec 进入 Windows 内核,但存在一种解决方法,即通过 kexec 进入加载程序并让加载程序初始化 Windows 系统。

相关内容