如何在 Linux 启动时覆盖 ESP 上的文件

如何在 Linux 启动时覆盖 ESP 上的文件

我有一个 64 位双启动系统,运行 Windows 7 和 Linux Mint 17 Cinnamon。我使用 rEFInd 以图形方式选择要启动的系统。

关于 rEFInd 的一些信息:

  • 它是一个 EFI 引导加载程序。
  • 它使用外部基于文本的配置文件 (*.conf)
  • 配置文件可以引用其他的。但是,在运行时,仅refind.conf尊重第一个文件 ( ) 引用的外部文件。
  • 多次引用的特定属性将作为级联处理 - 也就是说,每个引用都会覆盖所有先前的引用;只有最后一个受到尊重。

...我的 efi 驱动器上存储了一些配置文件。在 (efi) 启动时,会加载这些配置文件:

  • refind.conf- 默认的样板设置文件。该文件按顺序引用以下两个文件。
  • settings.conf- 一个单独的、干净的石板,用于我最喜欢的设置。它由 refind.conf 引用。此处的任何设置都将覆盖 refind.conf。
  • auto_settings.conf- 包含通过编程方式动态处理的设置。也被引用refind.conf。此处的任何设置都将覆盖refind.conf.

除了这些文件之外,我还有一些替代文件,它们以编程方式交换为auto_settings.conf

  • auto_default.conf- 当此文件的内容包含在其中时,这auto_settings.conf会导致我的系统处于默认状态。这会在启动时向我显示一个菜单,提示我在 Windows 和 Linux 之间进行选择。系统等待我的输入。
  • auto_mint.conf- 当该文件的内容包含在 refind.conf 中时,rEFInd 将跳过 GUI 菜单,直接启动 Linux Mint。
  • auto_win7.conf- 当该文件的内容包含在 refind.conf 中时,rEFInd 将跳过 GUI 和启动窗口。

这就是(我认为)你需要了解 rEFInd 才能解决这个问题的全部内容。

接下来,系统:

当我启动系统时,它会询问我要加载哪个操作系统。假设我选择窗户。

它启动 Windows。

然后,我想进入Linux。

我可以右键单击桌面,然后单击“启动到 Linux”。

使用注册表,我在桌面的上下文菜单中创建了一个条目来触发自定义批处理文件。当调用批处理文件时,此注册表项还将特定参数传递给批处理文件,以指示其在运行时的功能。

所以,此时此刻,我的批处理文件(亲切地称为bootfacilitator.bat)正在出色地完成其工作。在 EFI 分区上,我的批处理文件将 的内容替换auto_default.confauto_mint.conf.如果该操作成功(确实如此),则会重新启动系统。

此外,根据启动windows,bootfacilitator也被称为透明地,当时用于将 的内容替换为 的内容的
功能 。auto_settings.confauto_default.conf

系统关闭并启动到 rEFInd,这会跳过 GUI 并启动 Linux。

我需要Linux将 的内容替换auto_settings.conf为 的内容auto_default.conf,或者我陷入仅限 linux 的引导场景。我不喜欢。我所要做的就是在启动时替换文件的内容。

bootfacilitator.sh我有一个包含在中的脚本( ) /mnt/data/Backup/Software/Linux

在linux中,bootfacilitator.sh应该将 的内容替换/mnt/efi/EFI/boot/auto_settings.conf为 的内容/mnt/efi/EFI/boot/auto_default.conf

此外,我对这个项目还有一些其他目标。我还希望在 Linux 桌面上有两个上下文菜单条目,以镜像 Windows 桌面上下文菜单中的条目:“启动到 Windows”和“重新启动 Linux”。

最终结果是拥有从一个操作系统到另一个操作系统的流畅工作流程,并具有可扩展性以合并其他操作系统。

PS我的fstab:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/sda1   /mnt/efi    vfat    defaults    0   0
UUID=f9750eee-576b-46b2-a0a1-f6ad34f4d526 /               ext4    errors=remount-ro 0       1
UUID=1f49ddc3-88d1-40e6-b706-7623a4fb47ac none            swap    sw              0       0
/dev/sda4   /mnt/osx    hfsplus defaults    0   0
/dev/sda3   /mnt/win_7  ntfs    defaults    0   0
/dev/sda5   /mnt/data   ntfs    defaults    0   0
/mnt/data/Videos    /home/rich/Videos   none    bind    0   0
/mnt/data/Documents /home/rich/Documents    none    bind    0   0
/mnt/data/Music /home/rich/Music    none    bind    0   0
/mnt/data/Pictures  /home/rich/Pictures none    bind    0   0
/mnt/data/Downloads /home/rich/Downloads    none    bind    0   0
/mnt/data/Public    /home/rich/Public   none    bind    0   0

bootfacilitator.sh:

#!/bin/sh 
#description: Re-Enables EFI multi-select boot menu (in case of forced selection scenario) 
sudo cp /mnt/efi/EFI/Boot/auto_default.conf /mnt/efi/EFI/Boot/auto_settings.conf

答案1

有几种方法可以实现此目的:

  • 在 中创建一个.desktop文件~/.config/autostart/。这将在您登录时运行。我们类似于sudo cp input.txt output.txt命令。
  • 更强大的解决方案是创建一个 Upstart 作业,该作业将在系统启动时运行。

相关内容