如何阻止 update-grub 扫描所有驱动器?

如何阻止 update-grub 扫描所有驱动器?

每次update-grub运行时都会扫描所有硬盘驱动器。每个处于待机状态的驱动器都会旋转以进入空闲状态。这是对能源的浪费。我们使用 update-grub 版本 1.98:

# update-grub -v
grub-mkconfig (GRUB) 1.98+20100804-14+squeeze1

回归

  1. GRUB_DISABLE_OS_PROBER=true文件中有一个选项/etc/default/grub。但这似乎只适用于版本 2 及更高版本。至少在我们的 1.98 版本中它不会停止扫描所有驱动器。

  2. 有一个/etc/grub.d/20_linux_xen脚本可以作为 update-grub 的一部分运行。删除所有用户的chmod a-x /etc/grub.d/20_linux_xen所有驱动器的执行权限后,仍然会旋转。

如何停止update-grub扫描每个硬盘?

答案1

在文件中/etc/grub.d/30_os-prober线

OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"

使所有驱动器旋转(待机 -> 空闲)。操作系统探针是一个实用程序,用于在引导驱动器以外的驱动器上查找 Linux 安装。这是os-prober需要禁用的。

  1. 一种方法是删除包装: apt-get --purge remove os-prober
  2. 另一种方法是删除 os-prober 的可执行权限。首先使用 找到 os-prober 的位置$ which os-prober。输出可能如下所示/usr/bin/os-prober:删除所有用户对该文件的可执行权限:# chmod a-x /usr/bin/os-prober
  3. 另一种方法是删除 30_os-prober 的可执行权限。使用 查找 30_os-prober 的位置$ locate /30_os-prober。输出可能如下所示/etc/grub.d/30_os-prober:删除所有用户对该文件的可执行权限:# chmod a-x /etc/grub.d/30_os-prober
  4. 还有一种方法是跳过执行/etc/grub.d/30_os-prober。例如,让该GRUB_DISABLE_OS_PROBER=true选项在我们的 grub 版本 1.98 中工作。这可以通过在文件中插入/etc/grub.d/30_os-prober以下行的代码来完成set -e

...

if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
  exit 0
fi

答案2

对于那些想知道这是否真的值得付出努力的人来说,是的。也许不是为了节能,但今天我遇到了 update-grub 的问题,因为它想要探测 /dev/sda (我的硬盘)和 /dev/sdc (USB 记忆棒)。如果没有将后者插入到我的笔记本电脑中,即使我的 USB 记忆棒上实际上没有安装任何操作系统,也没有从该记忆棒上启动,update-grub 就会挂起。由于 USB 记忆棒最近坏了,我需要一种方法让 update-grub 在没有它的情况下继续(活动)。幸运的是,GRUB_DISABLE_OS_PROBER=true刚刚成功了。 :)

答案3

(这真的值得花时间和精力来解决吗?)

正如您所提到的,探测可能是在grub-mkconfig调用时发生的grub-probe。您可以grub-mkconfig通过简单地对调用结果进行硬编码来进行修改grub-probe。它用于填充GRUB_DEVICEGRUB_DEVICE_UUIDGRUB_DEVICE_BOOTGRUB_DEVICE_BOOT_UUIDGRUB_FS

答案4

我知道这是一篇旧帖子,但是我找到了另一种不涉及更改脚本的方法。在/etc/grub.d/我将文件重命名30_os-prober.30_os-prober(以句点开头)并且在更新过程中它会被跳过,即使它显示在同一个位置(ls如果您使用)-a

相关内容