Czy istnieje sposób, aby grub automatycznie uruchomił się ponownie w systemie Windows z poziomu systemu Windows?

12

Mam konfigurację podwójnego rozruchu:

  1. Ubuntu 16.04 LTS
  2. Windows

Obecnie, gdy chcę przejść rebootz Ubuntu na Windows, używam grub-rebootz odpowiednim numerem jako argumentem. To działa dobrze.

Jednak czasami system Windows wymaga ponownego uruchomienia, aby pewien program mógł zainstalować lub zaktualizować, a ja muszę ręcznie wybrać odpowiednią pozycję menu rozruchowego grub. Czy istnieje podobny sposób (z interfejsu użytkownika systemu Windows), aby powiedzieć grubowi, który wpis uruchomić?

Przypuszczam, że grub-rebootpolecenie przekazuje argument do pliku, który z kolei jest odczytywany przez gruba reboot.

edit (dotyczy mojej wybranej odpowiedzi): Obecnie szukam zamontowania dysku ext4 zawierającego / boot i skryptuję edycję. może to potrwać dość długo, ponieważ robię to w wolnym czasie obok mojej 40-tygodniowej pracy nietechnicznej. ^^

amon san
źródło
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
terdon
Zaktualizuj swoje pytanie w przyszłości, co skończyło się na tym, aby grub automatycznie uruchomił się ponownie w systemie Windows. Chciałbym wiedzieć, która metoda zadziałała dla Ciebie i zobaczyć napisany przez ciebie skrypt Windows. Jestem pewien, że wiele innych osób również jest zainteresowanych.
WinEunuuchs2Unix
@ WinEunuuchs2Unix obecnie pracuję nad tym. jak powiedział Oli - pisanie skryptów w systemie Windows to królewska PITA.
amon san
@amonsan Zaktualizowałem moją odpowiedź reboot-to-windowsfunkcją, która jest kompromisem w stosunku do używania ext2fsd, który psuje superbloki ext4 .
WinEunuuchs2Unix
@amonsan Czy masz teraz konfigurację systemu do ponownego uruchomienia Windows Update, aby automatycznie wrócić do systemu Windows?
WinEunuuchs2Unix

Odpowiedzi:

19

Najprościej jest z Grubem

Uciążliwe jest sterowanie grubz poziomu systemu Windows. Wymagana jest aplikacja innej firmy, aby uzyskać dostęp do Ubuntu z systemu Windows i wymagane jest hakowanie. Jednak z górnej części tego postu: Jak zmienić kolejność na moich podwójnych dystrybucjach rozruchowych , możesz skonfigurować grubautomatyczne ponowne uruchomienie do ostatniej opcji menu. Więc kiedy początkowo uruchamiasz się z systemem Windows i budzi się o 2 w nocy, aby uruchomić aktualizacje, grubprzeładuje system Windows, aby mógł z wdziękiem ukończyć aktualizacje.

Po ręcznym ponownym uruchomieniu i wybraniu Ubuntu ze grubwszystkich kolejnych uruchomień automatycznie załaduje Ubuntu. Ta funkcja działa równie dobrze, jeśli masz błędy w bieżącym jądrze i chcesz grubautomatycznie zrestartować się do wybranej przez ciebie starszej wersji jądra.

Jak sprawić, by Grub powtórzył ostatni wybór rozruchu

Jest to dość proste. Używając sudouprawnień, edytuj /etc/default/grubi zmień:

#GRUB_DEFAULT=0 # Rather than option #1, we'll always default to last boot choice.
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Pierwszy wiersz, który będziesz komentował, a tuż poniżej wstawia kolejne dwa wiersze.

Zapisz plik i wpisz w terminalu:

sudo update-grub

Linia poleceń Ubuntu do ponownego uruchomienia w systemie Windows

Obecnie używasz czegoś takiego:

sudo grub-reboot x # Where x is Windows zero-based grub menu number
sudo reboot now

Na podstawie tej zmodyfikowanej odpowiedzi Stack Exchange możesz użyć domyślnego gruba, aby ponownie uruchomić system Windows. Skopiuj ten kod do swojego ~/.bashrcpliku:

function reboot-to-windows {
    WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
    sudo grub-set-default "$WINDOWS_TITLE"
    sudo reboot
}
  • Zapisz ~/.bashrcplik z nową reboot-to-windowsfunkcją.
  • Zamknij bieżącą sesję terminalową.
  • Otwórz nową sesję terminala, ~/.bashrcaby załadować zmieniony .
  • Możesz wpisać, : ~/.bashrcaby przeładować go do istniejącej sesji terminala, ale niektórzy ludzie tego nie zalecają.

Aby ponownie uruchomić system Windows z wiersza polecenia, użyj:

reboot-to-windows

Jeśli system Windows automatycznie uruchomi się ponownie, gdy nie będziesz szukać, system zostanie ponownie uruchomiony. Pozwala to na normalne przetwarzanie automatycznych aktualizacji systemu Windows w cyklach wielokrotnego restartu, których czasami używa Windows.

WinEunuuchs2Unix
źródło
1
To pytanie nie ma nic wspólnego z kolejnością rozruchu.
Jennifer
2
@Jennifer Pytanie dotyczy jednak problemu XY. Ta odpowiedź jest przydatna. Ponadto chodzi w zasadzie o kolejność rozruchu, ponieważ prosi o sposób tymczasowej zmiany kolejności rozruchu z interfejsu użytkownika systemu Windows.
wizzwizz4,
obecnie trzymam się tego i działa dla mnie dobrze w ponad 90% moich przypadków użycia
amon san
@amonsan, czy możesz opracować 10 procent tam, gdzie to nie działa?
WinEunuuchs2Unix
Przeważnie gram na maszynie z podwójnym uruchomieniem, a Linux jest tam, żeby wykonywać inne prace, których nie robię codziennie. tak długo, jak grub pamięta, że ​​ostatnim uruchomieniem jest Windows, nic mi nie jest. Muszę tylko ręcznie wybrać, kiedy uruchamiam się po użyciu Linuksa, aby przywrócić standardowy system Windows i odwrotnie. zdarza się to nie tak często. Niestety, moje przypadki użycia są zasadniczo z tym związane.
amon san
8

Możesz replikować to, co grub-rebootrobi. To tylko skrypt, który ostatecznie wywołuje:

grub-editenv /boot/grub/grubenv set next_entry="Windows"

Gdzie Windowsjest nazwa pozycji menu grub. To może nie być tak

Uruchomiłem to. Wszystko to robi to wkładka next_entry=Windowsdo /boot/grub/grubenv. W linii 2. Więc jeśli jest to tylko plik, w systemie plików, możesz zrobić dokładnie to samo z poziomu systemu Windows . Jest to problem z systemem Windows do rozwiązania, ale oto ogólny przegląd:

  • Zamontuj dysk, na którym mieszka boot. Jest to prawdopodobnie najtrudniejszy bit, ponieważ prawdopodobnie jest to ext4. Może to pomóc, ale nie jest wykluczone, że do edycji może być potrzebny system Linux z systemem Windows.

    Jak wskazuje Muru, nie musi to być takie trudne. Możesz przejść /bootdo własnej partycji FAT32 . To sprawia, że ​​montaż w systemie Windows jest prosty.

  • Wstaw next_entry=Windows(lub cokolwiek) do pliku po komentarzu, przed skrótami.

  • Odmontuj.
  • Restart.

Skrypty, które w systemie Windows są poza moją strefą komfortu, a nie tak naprawdę, co tutaj robimy. Ale to wszystko, co musisz zrobić.

Oli
źródło
1
W tej metodzie, jak powiedziałem w komentarzu przeniesionym teraz na czat, najlepiej jest przejść na osobną /bootpartycję i sformatować ją w FAT32 lub NTFS, a następnie wygodnie edytować w systemie Windows. Nie ma w /boottym nic szczególnie wymagającego funkcji Unix-y. Skryptowanie tego za pomocą Powershell powinno być wtedy łatwe.
muru
2

grub-set-defaultpowinien zrobić to samo, co grub-restart, ale ustawienie powinno być trwałe. Nie jest to dokładnie z interfejsu użytkownika systemu Windows, jak prosiłeś, ale może to działa dla Ciebie.

Sebastian Stark
źródło
To pytanie nie ma nic wspólnego z kolejnością rozruchu.
Jennifer
Nie rozumiem, co masz na myśli przez ten komentarz, możesz to wyjaśnić?
Sebastian Stark
Amon San nie pyta, jak przywrócić domyślną grub do Windowsa - pyta, czy Windows jest już uruchomiony, jak spowodować teraz restart i wybierz system operacyjny, który chcesz uruchomić.
Jennifer
@Jennifer OP nie pyta „jak zrestartować teraz system Windows”. Jeśli tak, OP może po prostu wybrać Uruchom ponownie system Windows, a następnie wybierz Windows w menu grub. OP pyta: „Kiedy Windows automatycznie uruchomi się ponownie, gdy mnie nie będzie, jak mogę się upewnić, że uruchomi się ponownie w systemie Windows, a nie domyślnej opcji menu grub”. Przynajmniej tak widzę główny problem.
WinEunuuchs2Unix
Tak, OP może po prostu wybrać Uruchom ponownie system Windows, a następnie wybierz Windows w menu grub. Ale OP pyta w szczególności, jak automatycznie wrócić do systemu Windows, bez konieczności wybierania systemu Windows w menu rozruchu - innymi słowy, jak to zrobić bez mojej interwencji? Za dużo X Ying!
Jennifer,
1

Nie powiedziałeś, która wersja systemu Windows lub czy korzystasz z UEFI.

Jeśli używasz prawidłowego rozruchu UEFI (a nie starszego rozruchu), możesz tymczasowo uruchomić system Windows UEFI. W systemie Linux można to zrobić za pomocą narzędzi takich jak efibootmgr. W systemie Windows osobiście korzystam z EasyUEFI . Jest bezpłatny do użytku osobistego, z GUI, ale nie do użytku korporacyjnego ani CLI. Nie mogę ręczyć za jego bezpieczeństwo. Wydaje się również, że jest nieco powolny, ale wydaje się, że działa

W mojej własnej konfiguracji, która korzysta z Arch Linux (podkładka EFI jądra, bez GRUB) i Windows 10, tak to wygląda po wybraniu „Zarządzaj opcją rozruchu EFI” na ekranie startowym:

Obraz przedstawiający opcję jednorazowego rozruchu

Jeśli używasz rozruchu UEFI, powinieneś zobaczyć coś podobnego dla Windows, plus pojedynczy wpis dla Ubuntu (który ładuje GRUB), a także kilka innych opcji specyficznych dla urządzenia. Opcji jednorazowego rozruchu można następnie użyć do jednokrotnego uruchomienia do pozycji rozruchowej UEFI dla Windows, a następnie z powrotem do GRUB rozruchu. Po ustawieniu tego restartujesz jak zwykle.

muru
źródło
1
dzięki, ale to wymaga za dużo ręcznej interakcji za każdym razem jak na mój gust.
amon san
1
Wzruszać ramionami. W każdym razie powinieneś przejść /bootna NTFS lub FAT32 zamiast edytować go jako ext4. Obsługa zapisu w ext4 w systemie Windows jest niepewna, ryzykujesz w ten sposób zbyt wiele.
muru