Başsız Ubuntu sunucu makinesi bazen GRUB menüsüne takılıyor


54

Yarı-gömülü bir ortamda tek kartlı bir makineye kurulu Ubuntu 10.10 Sunucum var; klavye veya ekran yok, sadece SSH erişim.

Bu yüzden zaman zaman açıldığında GRUB menüsünde sıkışıp kaldığında ilk seçeneği seçmek için bir tuşa basılmasını bekleyen gerçekten sinir bozucu oluyor.

GRUB'u hiçbir koşulda tuşa basılmasını beklemeyecek şekilde nasıl yapılandırabilirim?

Güncelleme # 1: Bu menü GRUB 2 olduğu için menu.lst yok. Fakat şöyle bir / etc / default / grub var:

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

Güncelleme # 2: Ben çözdüm. Başarısız botları takip eden botlarda GRUB kendi zaman aşımını devre dışı bırakır. Menüyü göstermek önyüklemeyi başarısız hale getirdiğinden, bu kaçınılmaz bir döngüdür. Bu davranış /etc/grub.d/00_header dosyasını düzenleyerek ve make_timeout işlevini değiştirerek devre dışı bırakılabilir:

make_timeout ()
{
    echo "set timeout=0"
}

Şimdi grub yapılandırma güncelleyici komut dosyasından çıkın ve yeniden çalıştırın:

sudo update-grub2

Konsolosun erişebildiği makineler için tasarlanan bir ürün olan Ubuntu Sunucusu için bu davranışın varsayılan olacağı bana mantıklı gelmiyor.


1
Neye /boot/grub/menu.lstbenziyorsun?
Shane Madden

7
Bulgularınızı düzenleme yerine kendi sorunuza cevap olarak gönderebilirsiniz. Bu şekilde, eğer istersek cevabınızı yükseltmek için bir fırsatımız var.
Skyhawk

Yanıtlar:


41

Ubuntu 12.04 LTS için ayarlanabilecek belirli bir seçenek var /etc/default/grub.

Örneğin, 2 saniye zaman aşımına sahip olmak istiyorsanız (bu nedenle katılımsız yeniden başlatmalar için kilitlenmekten kaçının) yalnızca aşağıdaki satırı ekleyin /etc/default/grub:

GRUB_RECORDFAIL_TIMEOUT=2

Bundan update-grubsonra kaçmayı unutma.


Bu benim sorunumu çözdü, OP'ler ile aynıydı, ancak şimdi sunucumu bir monitöre bağladığımda nadiren hiçbir şey göremediğimi fark ettim. Monitör bir bağlantı bile kurmuyor, ancak SSH hala iyi çalışıyor. Bu bekleniyor mu?
Dowlers

18

İşte önceki sürümlerden biraz farklı olan Ubuntu 10.10 için talimatlar. /Etc/grub.d/00_header dosyasında önceki bir önyükleme hatası için yapılan aptalca kontrol hakkında yorum yapın:

##if [ \${recordfail} = 1 ]; then
##  set timeout=-1
##else
  set timeout=${2}
##fi

Ardından güncelleyin:

sudo update-grub

Linux ekli ikinci bir sürücü varsa, grub2'nin onu bulacağını ve açılışta hangisinden istediğinizi soracağını unutmayın. "Güncelleme grubunu" çalıştırmadan önce tüm ilave sürücüleri çıkarın.

Ayrıca bakınız https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/797544


6

Bu son derece nahoş tasarım gözetimine Ubuntu Server 9.10 ile rastladım. Düzeltmeniz bana çok yardımcı oldu. Sadece 9.10 için gereken düzeltmenin aynı dosyada "make_timeout ()" fonksiyonu olmadığı için farklı olduğunu belirtmek istedim.

Ubuntu 9.10 için, aynı dosyanın sonuna gidin (00_header) ve aşağıdakileri değiştirin:

eğer [\ $ {recordfail} = 1]; sonra
  zaman aşımını ayarlama = -1
Başka
  zaman aşımını ayarlama = $ {GRUB_TIMEOUT}
fi
EOF

için

eğer [\ $ {recordfail} = 1]; sonra
  zaman aşımını ayarlama = $ {GRUB_TIMEOUT}
Başka
  zaman aşımını ayarlama = $ {GRUB_TIMEOUT}
fi
EOF

Daha önce olduğu gibi, sonra çalıştırın:

sudo güncelleme grub2

Mükemmel çözüm, bunun nasıl yapıldığını merak ediyor, mükemmel çalışıyor! Not: grub güncellediğinizde, çalıştırdığınız grubun ne olduğuna bakmaksızın sadece "sudo update grub" komutunu çalıştırmanız yeterlidir.

Bu sadece benim pastırma kurtardı - sunucum bir hafta boyunca her yeniden başlatmada grub menüsünde oturdu - ne olduğu hakkında hiçbir fikri yoktu ve her şeyi denedi. Bu ve sorudaki ipucu bunu yaptı. Çok teşekkürler.
Darren

1

GRUB'u seri erişim için (ve üzerindeyken önyükleyiciniz) yapılandırın ve açık seri bir bağlantı noktasını, boş modem kablosunu ve USB-RS232 dönüştürücüsünü bu durumlar için kullanışlı tutun. Başsız bir sunucu ve bir Guruplug kullanıyorum ve başka bir şekilde olmazdı.


1

Sadece kayıt hatası için uzun bir zaman aşımı belirledim:

if [ "\${recordfail}" = 1 ]; then
  set timeout=30
else
  set timeout=${2}

Önceki önyükleme başarısız olursa, önyükleme yaparken 30 sn zaman aşımı alırsınız. (Diğer işletim sistemlerinin yaptığı gibi değil ...)

Bu (ve IMHO) bile / etc / default / grub içindeki bir ayar olabilir.


1

Bunun neden özellikle bir sunucu için varsayılan eylem olduğunu bilmiyorum, ancak sunucu kurulum komut dosyama uyguladım.

sudo sed -i 's/set timeout=-1/set timeout=30/g' /etc/grub.d/00_header
sudo update-grub

1

Bu yaklaşım biraz daha temiz - sadece /etc/default/grubsatırı eklemek için değiştirin :

GRUB_RECORDFAIL_TIMEOUT=2

... provizyonda böyle bir şeyle otomatik olarak yapabilecekleri:

if grep '^GRUB_RECORDFAIL_TIMEOUT=' /etc/default/grub ; then
   echo GOOD: /etc/default/grub
else
   echo FIXING: /etc/default/grub
   perl -pi.bak -e \
      's/^(GRUB_TIMEOUT=.*\n)/${1}GRUB_RECORDFAIL_TIMEOUT=2\n/' \
      /etc/default/grub
   update-grub
fi

GRUB_RECORDFAIL_TIMEOUT değişkeni /etc/grub.d/00_header(12.04 LTS'de gördüğüm gibi) içinde belirtiliyorsa, bu geçerli olmalıdır :

make_timeout ()
{
    cat << EOF
if [ "\${recordfail}" = 1 ]; then
  set timeout=${GRUB_RECORDFAIL_TIMEOUT:--1}
else
  set timeout=${2}
fi
EOF
}

Arızaların nasıl kaydedildiğini araştırmanın daha iyi bir cevap verebileceğini merak ediyorum.


Bu soru başlangıçta tartışıldığından beri GRUB_RECORDFAIL_TIMEOUT parametresi eklendi. Günümüzde, evet, bu daha iyi bir yöntemdir.
mikepurvis
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.