GRUB'da varsayılan çekirdeği ayarla


49

Hangi çekirdek GRUB2'nin varsayılan olarak yüklenmesi gerektiğini nasıl seçebilirim? Geçenlerde bir linux realtime çekirdeği kurdum ve şimdi varsayılan olarak yüklüyor. Normal olanı varsayılan olarak yüklemek istiyorum.

Şimdiye kadar sadece varsayılan işletim sistemini seçmeyi başardım .. ve nedense, /boot/grub.cfgzaten rt-çekirdeğini yüklemek ve onu genel linux menü girişine (benim durumumda Arch Linux) koymak istediğimi varsayar.


2
grub2-set-default <başlık veya sayı>?
taliezin

1
Ama numarayı nasıl bilebilirim? Rakamlar grub.cfgyalnızca işletim sistemlerine karşılık gelir ve çekirdekleri değil.
TomTom

Bazı durumlarda bu işe yarar : askubuntu.com/questions/216398/… Menü adlarını bu dosyaya bakarak bulabilirsiniz: /boot/grub/grub.cfg
TekOps

Yanıtlar:


41

TomTom'un Arch ile olduğu gibi, çoğu dağıtımın bu noktada gelişmiş seçenekler alt menüsüne ek çekirdekler getirdiğini düşünüyorum.

Varsayılan olarak önceki bir çekirdeği seçmek için üst düzey menü yapımı değiştirmek istemedim. Cevabı burada buldum:

http://www.humans-enabled.com/2014/08/how-to-set-default-grub-kernel-boot.html

Özetlemek:

1) $menuentry_idAlt menü için _option öğesini bulun :

$ grep submenu /boot/grub/grub.cfg
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

2) $menuentry_id_optionKullanmak istediğiniz çekirdeğin menü girişi için:

$ grep gnulinux /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

3) Geçerli varsayılan grubunuzu yorumlayın /etc/default/grubve $menuentry_id_optionilk adımdaki alt menülerle ve ikinci adımdaki seçili çekirdeğin $menuentry_id_optionbirbiriyle ayırarak değiştirin >.

Benim durumumda değiştirilmiş GRUB_DEFAULT:

#GRUB_DEFAULT=0

GRUB_DEFAULT="gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc>gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc"

4) Değişiklikleri yapmak için grub'u güncelleyin. Debian için bu böyle yapılır:

$ sudo update-grub

Bitti. Şimdi önyükleme yaptığınızda, gelişmiş menü bir yıldız işaretine sahip olmalı ve seçilen çekirdeğe önyükleme yapmalısınız. Bunu uname ile onaylayabilirsiniz.

$ uname -a
Linux NAME 4.18.0-0.bpo.1-amd64 #1 SMP Debian 4.18.0-0 (2018-09-13) x86_64 GNU/Linux

Bunu en son çekirdeğe değiştirmek, yeni çizgiyi yorumlamak ve rahatsız etmek #GRUB_DEFAULT=0, ardından yeniden çalmak kadar basit update-grub.


31

2 saat boyunca uğraştıktan sonra, bunu başarmanın daha kolay bir yolunu buldum. Ben sadece RTFM. ;)

/ Etc / default / grub dizinine iki satır ekleyin

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Do sudo update-grub, yeniden başlatma, senin grub menüsüne girmek ve ihtiyacınız hangisi menü veya alt menü öğesini seçin. Seçim kaydedilir ve bilgisayarınız bir dahaki sefere otomatik olarak önyüklendiğinde.


2
Olağanüstü! Çok basit!
Egor Skriptunoff

Oh, çok daha basit. Teşekkür ederim.
user207863

21

Yorumlarda belirtildiği gibi, grub-set-default Xkomutu kullanarak önyüklenecek varsayılan çekirdeği ayarlayabilirsiniz; burada X, önyüklemek istediğiniz çekirdeğin numarasıdır. Bazı dağıtımlarda bu numarayı /etc/default/grubdosyayı düzenleyerek ve ayarlayarak GRUB_DEFAULT=Xve sonra çalıştırarak da ayarlayabilirsiniz update-grub.

Sayı, önyükleme sırasında GRUB menüsünde gösterilen bir çekirdek / çekirdek ayarları dizinidir; 0, ilk (en üstteki) girdidir. Doğru numarayı genellikle aşağıdaki gibi menuentrysatırları arayarak bulabilirsiniz /boot/grub/grub.cfg:

grep menuentry /boot/grub/grub.cfg

GRUB açılış menüsünde gösterilen ad ile listelenen her bir çekirdeği göreceksiniz. İlki 0, ikincisi 1 vb.


1
Fedora 21'de öyle /boot/grub2/grub.cfg.
şey, bir şey

3
Bu benim için çalışmıyor. Yüklememdeki en son çekirdek 4.4.0-64-generic (menuentry 0) ancak 4.4.0-59-generic (menuentry 9) varsayılan önyükleme çekirdeği olmasını istiyorum. Koştum grub-set-default 9ve sonra grub-updateyeniden açtım . Grubun varsayılan çekirdeği ile boot etmesine izin verdim ve hala 4.4.0-64-jeneric ile boot ediyor . Ayrıca düzenlemeyi denedim /etc/default/grubve ayarlayıp GRUB_DEFAULT=9koştum grub-update. Hiçbir şeyi yeniden başlatırken, sistem hala 4.4.0-64-generic ile önyükleme yapıyor . Belki bir şeyleri özledim, biri bana yardım edebilir mi?
Dronacharya

Bu benim için de işe yaramadı. Burada açıklandığı gibi istenmeyen çekirdeği sildim: askubuntu.com/a/764242/456247
Luis

8

Yapmanız grep 'menuentry' /boot/grub/grub.cfggereken, asıl çekirdek veya işletim sistemi sürümleriyle ilgili olmayan ek girişleri listeler. Örneğin, listeler

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option

Bu dosyayı arama yönteminde küçük bir iyileştirme önermek istiyorum: awk

$ awk '/menuentry/ && /class/ {count++; print count-1"****"$0 }' /boot/grub/grub.cfg                                            
0****menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-86df21bf-d95f-435c-9292-273bdbcba056' {
1****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
2****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {
3****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
4****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {

Aşağıdaki komut ve çıktısı ile awkkodun gerçek işletim sistemi sürümüyle eşleştiğini görebilir ve daha sonra /etc/default/grubdosyada kullanabileceğiniz sayıyı verebilirsiniz .

/etc/default/grubDosyayı el ile düzenlemeye ek olarak kullanmanızı öneririm sed. Aşağıdaki komutta, X'i yukarıdaki awk komutundan aldığınız uygun numara ile değiştirin:

sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=X/g' /etc/default/grub; sudo update-grub


2
Bu bir cevap değil. Bir yorum gibi okur. Bir cevap, "Bu, başka bir cevaba zeyilname ekleyeyim" değil, "GRUB’da varsayılan giriş nasıl ayarlanır" demeli. Bunu kolayca uygun bir cevapta düzenleyebilirsiniz, ancak jkt123'ün grep yerine awk kullanmayla ilgili cevabı hakkında yorum bırakmak daha akıllıca olabilir.
Aleksandr Dubinsky

2

jkt123's sanırım çoğu dağıtım için çalışacak. Ancak, Arch Linux için işe yaramadı, en azından elimde olan paketlerle.

Ayarlayabileceğiniz endeksler grub-set-defaultyalnızca ana menü girişlerine karşılık gelir. Ancak çekirdek seçenekleri bir alt menüdedir. Böylece, çekirdek girişini alt menüden ana menüye taşırsınız veya girişi alt menü listesinin en üstüne yerleştirir ve alt menüyü seçersiniz.

Grubum Menüsü

  • Arch Linux
  • Arch Linux için gelişmiş seçenekler
    • Çekirdek 1
    • Çekirdek 2
  • pencereler

Çekirdek 2'yi önyüklemek için ya Kernel 1 ile değiştirmelisiniz ya da alt menünün dışına, Arch Linux ya da Windows ile aynı seviyeye getirmelisiniz. Ardından varsayılan numarayı ana menü dizinlerinden birine ayarlayın. Örneğin yukarıdaki menüde "0" önyükleme yapar "Arch Linux" ve "1" Kernel 1'i önyükler.

Hiyerarşiyi değiştirmek ve değiştirmek için, /boot/grub/grub.cfgtaşımak istediğiniz girişi açıp taşıyın. Bir giriş böyle görünebilir

menuentry 'ENTRY NAME'
   ... some code ...
}

O zaman değişikliklerinizi uygulamanız gerekir. Benim durumumda grub-mkconfig. Ancak bu sistemden sisteme değişebilir.


0

CentOS-6.6 grub.conf gibi göründüğü gibi, varsayılan seçimi değiştirmek için manuel olarak düzenlenebilir:

default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

0

Debian Stretch:

Config dosyaları ile uğraşmak yerine, bir klasör oluşturun /noot(istediğiniz şekilde arayın), istediğiniz çekirdeği, uygun config ve sistem dosyalarıyla birlikte bırakın /bootve gerisini bu yeni klasöre taşıyın.

Run update-grub.

/bootÇekirdek sürümünüzün ve eşleşen config ve sistem dosyalarınızın hala orada olduğunu (kontrol etmemeniz gereken bir şeyi kopyalamanız durumunda) klasörünü tekrar kontrol edin ve yeniden başlatın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.