Czy Grub można skonfigurować do zapamiętywania ostatniego systemu operacyjnego?

17

Zwykle mam 2-3 systemy operacyjne w menu rozruchowym:

  • Ubuntu 10.04
  • System Windows 7
  • [Czasami trzecia opcja, taka jak Ubuntu 10.04 Netbook]

Jeśli mam system operacyjny inny niż domyślny (w tym przypadku Windows 7) i zrestartuję się, Grub uruchomi się w Ubuntu 10.04. To nie powinno się zdarzyć - kiedy ponownie uruchamiam system Windows 7, chcę pozostać w systemie Windows 7. Czy jest jakiś sposób, aby skonfigurować Gruba, aby zapamiętał mój ostatni wybór i uruchomić go?

Alternatywnie byłoby jeszcze lepiej, gdyby Grub zrobił to tylko po ponownym uruchomieniu komputera (a nie przy pierwszym włączeniu komputera). Zdaję sobie sprawę, że może to nie być możliwe, więc byłbym zadowolony z prostego zapamiętania ostatniego wyboru.

Mateusz
źródło

Odpowiedzi:

20

W oryginalnym Grub chcesz to zrobić poprzez ustawienie w /boot/grub/menu.lst , z domyślną słowa kluczowego do „zbawienia” , a następnie za pomocą savedefault słowo kluczowe w każdej pozycji menu rozruchu.


Zaktualizowano :
Grub2 jest nieco bardziej skomplikowany. Wciąż ewoluuje, więc chociaż zarówno Ubuntu 9.10, jak i 10.04 używają Grub2, istnieje wystarczająca różnica w sposobie pakowania i konfiguracji rzeczy, aby uczynić je interesującymi.

Oto jak wykonać sztuczkę zapisaną w obu przypadkach:

  • Ubuntu 10.04:
    Kierunki 9.10 to podstęp; Świadomy jest o wiele prostszy. Zobacz pomoc Ubuntu, aby uzyskać więcej krwawych szczegółów. Musisz wprowadzić dwie zmiany w / etc / default / grub :

    1. Zmień ten wiersz, który czyta GRUB_DEFAULT=0sięGRUB_DEFAULT=saved

    2. Dodaj linię za pomocą GRUB_SAVEDEFAULT=true

    Otóż ​​to. Właściwie to nie jest takie złe, prawda? Nie zapomnij uruchomić sudo update-grub.

  • Ubuntu 9.10:
    Istnieje kilka hacków na forach Ubuntu, aby to działało; najwyraźniej słowo kluczowe saveefault było błędne w Grub v1.97. Ten post na forach Ubuntu zawiera jedną metodę. Kolejny post sugeruje nieco prostszą metodę:

    1. Ustaw GRUB_DEFAULT = zapisany w / etc / default / grub .

    2. Umieść te dwie linie w /etc/grub.d/40_custom (u dołu, po linii „exec tail” ):

      saved_entry=${chosen}
      save_env saved_entry
      

    Przetestowałem tę metodę w Ubuntu 9.10 i działa; następny rozruch automatycznie podświetli ostatnio wybrany wpis. W połączeniu z limitem czasu spowoduje to automatyczne uruchomienie do ostatniego uruchomionego systemu operacyjnego.

I nie zapomnij uruchomić sudo update-grub. Po zakończeniu wprowadzania zmian. Jest to ważne i żenująco łatwe do zapomnienia ...


Grub nie ma sposobu na odróżnienie ponownego uruchomienia od zimnego rozruchu , więc Grub sam nie może tego zrobić przy ponownym uruchomieniu. Jeśli jednak uruchamiasz się w systemie Linux, możesz użyć sudo grub-set-default N(gdzie N jest numerem pozycji menu rozruchu, zaczynając od 0), aby ustawić pozycję N, która ma być wybierana przy następnym uruchomieniu (zamiast jakiejkolwiek zapisanej pozycji).

Teoretycznie możesz zhakować coś, co zaczepiło się o procedury zamykania ( być może skrypt Upstart ), który uruchomił dla ciebie grub-set-default , kiedy powiedziałeś Linuksowi, żeby się zamknął (ale nie, kiedy powiedziałeś, żeby zrestartował się). Jednak zamknięcie systemu Windows nie zapewniłoby takiej samej funkcjonalności.

Słyszałem o technice Grub4DOS lub Grub1, która wymagała instalacji Gruba na partycji FAT32 lub NTFS / boot - która pozwoliłaby ci również uruchomić grub-set-default z Windows, abyś mógł wywołać go ze skryptu wylogowania Windows. Ostatnim razem, gdy coś o tym widziałem, nie było to możliwe na Grub2. To mogło już się zmienić.

quack quixote
źródło
Rozwiązanie nr 2 wydaje się nie działać dla mnie. Edytowałem / etc / default / grub, edytowałem /etc/grub.d/40_custom i uruchomiłemsudo update-grub . Testowałem, uruchamiając system Windows 7, zamykając się, a następnie włączając ponownie komputer. System Ubuntu 10.04 (domyślny) był nadal wybrany. Próbowałem również umieścić „save_entry” w / etc / default / grub, zamiast „save” (nie jestem pewien, jak działają skrypty konfiguracji gruba), ale to nie pomogło. Nie próbowałem jeszcze rozwiązania nr 1.
Matthew
@Matthew: sprawdź dwukrotnie, czy plik /etc/grub.d/40_custom jest wykonywalny (sudo chmod + x, jeśli nie jest). ale tak, właśnie wypróbowałem na moim Ubuntu 10.04 i też tam nie działa. sprawdzanie, dlaczego ...
quack quixote
@Matthew: OK, wymyśliłem to. przepraszam, powinienem był wiedzieć, że Lucid i Karmic byliby zupełnie inni. (och. i upewnij się, że biegnieszsudo update-grub .)
szarlatan Kichot
3

Ten post prawdopodobnie Ci się przyda, jest dość oczywisty. Zauważ, że 10.04 i 9.10 używają tej samej wersji GRUB, więc rzeczy powinny być dokładnie takie same dla Ciebie.

marcusw
źródło