每次update-grub
运行时都会扫描所有硬盘驱动器。每个处于待机状态的驱动器都会旋转以进入空闲状态。这是对能源的浪费。我们使用 update-grub 版本 1.98:
# update-grub -v
grub-mkconfig (GRUB) 1.98+20100804-14+squeeze1
回归
GRUB_DISABLE_OS_PROBER=true
文件中有一个选项/etc/default/grub
。但这似乎只适用于版本 2 及更高版本。至少在我们的 1.98 版本中它不会停止扫描所有驱动器。有一个
/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
需要禁用的。
- 一种方法是删除包装:
apt-get --purge remove os-prober
。 - 另一种方法是删除 os-prober 的可执行权限。首先使用 找到 os-prober 的位置
$ which os-prober
。输出可能如下所示/usr/bin/os-prober
:删除所有用户对该文件的可执行权限:# chmod a-x /usr/bin/os-prober
- 另一种方法是删除 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
- 还有一种方法是跳过执行的
/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_DEVICE
、GRUB_DEVICE_UUID
、GRUB_DEVICE_BOOT
、GRUB_DEVICE_BOOT_UUID
和GRUB_FS
。
答案4
我知道这是一篇旧帖子,但是我找到了另一种不涉及更改脚本的方法。在/etc/grub.d/
我将文件重命名30_os-prober
为.30_os-prober
(以句点开头)并且在更新过程中它会被跳过,即使它显示在同一个位置(ls
如果您使用)-a
。