Bagaimana cara menghentikan pembaruan-grub dari pemindaian semua drive?

19

Setiap kali update-grubdijalankan semua hard drive dipindai. Setiap drive yang dalam kondisi siaga akan berputar untuk idle. Ini adalah pemborosan energi. Kami menggunakan pembaruan-grub versi 1.98:

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

Regresi

  1. Ada GRUB_DISABLE_OS_PROBER=trueopsi di /etc/default/grubfile. Tapi itu sepertinya hanya bekerja dari versi 2 dan lebih tinggi. Setidaknya itu tidak berhenti memindai semua drive di versi kami 1.98.

  2. Ada /etc/grub.d/20_linux_xenskrip yang dapat dijalankan sebagai bagian dari pembaruan-grub. Setelah menghapus hak eksekusi untuk semua pengguna dengan chmod a-x /etc/grub.d/20_linux_xensemua drive masih berputar.

Bagaimana cara berhenti update-grubmemindai setiap hard drive?

Pro Backup
sumber
Itu hanya skrip shell ... Modifikasi? Seharusnya hanya berjalan setelah pembaruan kernel, yang tidak sering terjadi.
jordanm
Salah satu baris skrip dieksekusi /usr/sbin/grub-probe --target=device /. Perintah itu juga menyebabkan semua drive berputar. Ini /usr/sbin/grub-probebukan skrip shell.
Pro Backup
Seberapa sering Anda berlari update-grub? Ini seharusnya hanya terjadi ketika Anda menginstal kernel baru, jadi siapa yang peduli?
psusi
Saya tahu, bahwa seluruh picojoule yang digunakannya sungguh sia-sia - jika Anda menjalankan pembaruan-grub 24/7 selama sebulan di 1000 komputer dengan masing-masing 3 HDD, mungkin menambah satu atau dua sen ke tagihan listrik Anda.
tkbx

Jawaban:

14

Dalam file /etc/grub.d/30_os-prober baris

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

membuat semua drive berputar (siaga -> idle). Os-prober adalah utilitas untuk menemukan instalasi Linux di drive selain boot drive Anda. Itu os-proberyang perlu dinonaktifkan.

  1. Salah satu cara adalah dengan menghapus paket : apt-get --purge remove os-prober.
  2. Cara lain adalah dengan menghapus hak yang dapat dieksekusi untuk os-prober . Pertama temukan lokasi os-prober menggunakan $ which os-prober. Output akan terlihat seperti: /usr/bin/os-prober. Hapus hak yang dapat dieksekusi untuk semua pengguna untuk file itu:# chmod a-x /usr/bin/os-prober
  3. Cara lain adalah dengan menghapus hak yang dapat dieksekusi untuk 30_os-prober . Temukan lokasi 30_os-prober menggunakan $ locate /30_os-prober. Output akan terlihat seperti: /etc/grub.d/30_os-prober. Hapus hak yang dapat dieksekusi untuk semua pengguna untuk file itu:# chmod a-x /etc/grub.d/30_os-prober
  4. Namun cara lain adalah untuk melewatkan eksekusi dari /etc/grub.d/30_os-prober. Misalnya dengan membuat GRUB_DISABLE_OS_PROBER=trueopsi berfungsi di versi grub kami 1.98. Ini dapat dilakukan dengan memasukkan file /etc/grub.d/30_os-proberkode di bawah baris set -e:

...

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

Bagi mereka yang bertanya-tanya apakah itu benar-benar sepadan dengan usaha, ya itu. Mungkin bukan untuk penghematan energi, tetapi hari ini saya menghadapi masalah dengan pembaruan-grub karena ingin menyelidiki baik / dev / sda (harddisk saya) dan / dev / sdc (USB-stick). Tanpa yang terakhir dimasukkan ke laptop saya, update-grub akan hang, meskipun sebenarnya tidak ada OS pada USB-stick saya yang dipasang atau apakah saya pernah boot dari stick ini. Ketika USB-stick baru-baru ini rusak, saya membutuhkan cara untuk memperbarui-grub untuk melanjutkan (hidup) tanpa itu. Untungnya, GRUB_DISABLE_OS_PROBER=truebaru saja melakukan trik. :)

PPP
sumber
1
Saya punya masalah terbalik: pembaruan-grub gagal jika USB stick hadir. Stik USB agak tidak biasa, karena sudah menginstal Easy2Boot. Tetapi karena ini ada di kios dengan perintah update-grub dikeluarkan dari skrip yang ditempatkan pada USB stick, solusi ini sangat disambut baik.
noamik
3

(Apakah ini benar-benar sepadan dengan waktu dan upaya untuk memperbaikinya?)

Seperti yang Anda sebutkan, pemeriksaan mungkin terjadi saat grub-mkconfigpanggilan grub-probe. Anda dapat memodifikasi grub-mkconfighanya dengan melakukan hardcoding hasil grub-probepanggilan. Hal ini digunakan untuk mengisi GRUB_DEVICE, GRUB_DEVICE_UUID, GRUB_DEVICE_BOOT, GRUB_DEVICE_BOOT_UUID, dan GRUB_FS.

Jim Paris
sumber
1

Lihat solusi saya di sini untuk menonaktifkan partisi mana yang diperiksa os-proberdengan selektif patch.

Konfigurasi GRUB_OS_PROBER_SKIP_LIST="UUID@device_path"dalam /etc/default/grub:

  • mengurangi jumlah perangkat yang ${OSPROBED}digunakan oleh/etc/grub.d/30_os-prober

  • yang menghentikan cek dengan ${grub_probe} --target=fs_uuid --device

Stuart Cardall
sumber
0

Saya tahu ini adalah posting lama, tetapi saya menemukan cara lain untuk mencapai hal ini yang tidak melibatkan perubahan pada skrip. di /etc/grub.d/saya mengganti nama file 30_os-probermenjadi .30_os-prober(mulai dengan titik) dan dilewati selama pembaruan meskipun itu ditampilkan di tempat yang sama lsjika Anda menggunakan -a.

James
sumber