update-grubがすべてのドライブをスキャンしないようにする方法は?


19

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_xenupdate-grubの一部として実行される可能性のあるスクリプトがあります。chmod a-x /etc/grub.d/20_linux_xenすべてのドライブを持つすべてのユーザーの実行権限を削除した後でも、スピンアップします。

update-grub各ハードドライブのスキャンを停止する方法


それは単なるシェルスクリプトです...変更しますか?カーネルの更新後にのみ実行する必要がありますが、これはあまり頻繁には発生しません。
ヨルダン

スクリプト行の1つが実行され/usr/sbin/grub-probe --target=device /ます。このコマンドにより、すべてのドライブがスピンアップします。/usr/sbin/grub-probeシェルスクリプトではありません。
プロバックアップ

あなたはどれくらいの頻度で走っていupdate-grubますか?これは、新しいカーネルをインストールしたときにのみ発生するはずです。
-psusi

私は、それが使用するピコジュール全体が非常に無駄であることを知っています-それぞれ3台のHDDを備えた1000台のコンピューターで24時間365日update-grubを実行した場合、電気料金に1〜2セント追加される可能性があります。
tkbx

回答:


14

ファイル/etc/grub.d/30_os-proberの行

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

すべてのドライブを回転させます(スタンバイ->アイドル)。Os-proberは、ブートドライブ以外のドライブで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

5

本当に努力する価値があるのか​​疑問に思う人には、そうです。おそらく省エネのためではありませんが、/ dev / sda(私のハードディスク)と/ dev / sdc(USBスティック)の両方をプローブする必要があるため、今日update-grubで問題が発生しました。後者をラップトップに挿入しないと、実際にはUSBスティックにOSがインストールされておらず、このスティックから起動したこともありませんが、update-grubはハングします。最近USBスティックが壊れたので、update-grubがUSBスティックなしで続行(生存)する方法が必要でした。幸いなことに、GRUB_DISABLE_OS_PROBER=trueちょうどトリックをしました。:)


1
逆の問題がありました:USBスティックが存在するとupdate-grubが失敗します。USBスティックは、Easy2Bootがインストールされているため、少し変わっています。しかし、これはキオスク上にあり、update-grubコマンドはそのUSBスティックに置かれたスクリプトから発行されるため、このソリューションは大歓迎でした。
-noamik

3

(これを修正するのに時間と労力を費やす価値は本当にありますか?)

あなたが述べたように、調査はおそらくをgrub-mkconfig呼び出すときに起こっていますgrub-probe。呼び出しのgrub-mkconfig結果をハードコーディングするだけで変更できgrub-probeます。埋めるために使用されるGRUB_DEVICEGRUB_DEVICE_UUIDGRUB_DEVICE_BOOTGRUB_DEVICE_BOOT_UUID、とGRUB_FS


1

ここで私の解決策を参照しos-proberて、小さいパーティションでチェックされるパーティションを選択的に無効にしてくださいpatch

GRUB_OS_PROBER_SKIP_LIST="UUID@device_path"in の構成/etc/default/grub

  • によって${OSPROBED}使用されるデバイスの数を減らします/etc/grub.d/30_os-prober

  • でチェックを停止します ${grub_probe} --target=fs_uuid --device


0

これは古い投稿であることは知っていますが、スクリプトを変更する必要のない別の方法を見つけました。で/etc/grub.d/ファイルの名前を変更30_os-prober.30_os-prober(ピリオドで始まる)、それlsを使用すると同じ場所に表示されていても更新中にスキップされます-a

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.