Okna podwójnego rozruchu na drugim dysku twardym, system UEFI / GPT

15

Chciałbym zainstalować Linuksa, ale nie chcę ryzykować uszkodzenia mojej obecnej instalacji systemu Windows, ponieważ słyszałem wiele horrorów. Na szczęście mam dodatkowy dysk twardy. Czy mogę zainstalować na nim Linuksa, a następnie okna podwójnego rozruchu bez konieczności modyfikacji napędu Windows?

Mam też UEFI „BIOS”, a dysk Windows ma format GPT.

Złotowłosa
źródło

Odpowiedzi:

18

Użyję poniższego terminu BIOS , odnosząc się do pojęć, które są takie same zarówno dla nowszych systemów UEFI, jak i tradycyjnych systemów BIOS, ponieważ chociaż jest to pytanie zorientowane na UEFI, lepiej mówić o „BIOS”, np. W dokumentacji GRUB , a „BIOS / UEFI” jest zbyt niezręczny. GRUB (właściwie GRUB 2 - jest to często używane niejednoznacznie) to program ładujący instalowany przez Linuksa i używany do podwójnego uruchamiania systemu Windows.

Najpierw słowo o kolejności dysków i kolejności rozruchu. Kolejność dysków odnosi się do kolejności, w której dyski są fizycznie podłączone do magistrali na płycie głównej (pierwszy dysk, drugi dysk itp.); ta informacja jest zgłaszana przez BIOS. Kolejność rozruchuodnosi się do sekwencji, w której BIOS sprawdza dysk rozruchowy. To niekoniecznie jest to samo, co kolejność dysków i zwykle można je skonfigurować za pomocą ekranu konfiguracji BIOS. Kolejność dysków nie powinna być konfigurowalna ani nie może na nią wpływać kolejność rozruchu, ponieważ byłoby to bardzo nieprzyjazne dla systemu operacyjnego (ale teoretycznie mógłby to zrobić tępy BIOS). Ponadto, jeśli odłączysz pierwszy dysk, drugi dysk prawdopodobnie stanie się pierwszym. Użyjemy identyfikatorów UUID w konfiguracji modułu ładującego, aby uniknąć problemów takich jak ten (robią to również współczesni instalatorzy Linuksa).

Idealnym sposobem na uzyskanie tego, co chcesz, jest instalacja Linuksa na drugim dysku pod względem kolejności dysków, a następnie wybranie go najpierw pod względem kolejności rozruchu za pomocą konfiguracji UEFI. Dodatkową zaletą tego jest to, że możesz następnie użyć kolejności rozruchu BIOS / UEFI, aby wybrać dysk Windows i ominąć grub, jeśli chcesz. Powodem, dla którego zalecam Linuksa na drugim dysku jest to, że GRUB musi „załadować” natywny bootloader Windows, a bootloader Windows zawsze zakłada, że ​​jest on na pierwszym dysku. Istnieje jednak sposób, aby go oszukać, jeśli wolisz lub potrzebujesz go na odwrót.

Mamy nadzieję, że możesz po prostu użyć płyty CD na żywo lub cokolwiek innego i zrobić to za pomocą instalatora GUI. Jednak nie wszystkie instalatory są sobie równe, a jeśli to się zepsuje i pojawią się problemy, takie jak:

  1. Zainstalowałem Linux na pierwszym dysku i teraz nie mogę uruchomić systemu Windows, lub

  2. Zainstalowałem Linuksa na drugim dysku, ale używając pierwszego dysku jako bootloadera, a teraz nic nie mogę uruchomić!

Następnie czytaj dalej. W drugim przypadku powinieneś najpierw spróbować ponownie zainstalować Linuksa na drugim dysku i tym razem upewnij się, że tam właśnie zmierza bootloader. Najłatwiejszym i najbardziej niezawodnym sposobem na to byłoby tymczasowe usunięcie dysku Windows z komputera, ponieważ zakładamy, że nie ma na nim zainstalowanych żadnych dodatkowych elementów, bez względu na kolejność dysków.

Po zainstalowaniu Linuksa i upewnieniu się, że można go uruchomić, podłącz ponownie dysk systemu Windows (jeśli go usunąłeś - i pamiętaj, najlepiej, aby był on najpierw pod względem kolejności dysków, a drugi pod względem kolejności kolejność rozruchu) i przejdź do następnego kroku.

Dostęp do konfiguracji GRUB

Uruchom Linux, otwórz terminal i

> su root

Zostaniesz poproszony o hasło roota. Od tego momentu jesteś superużytkownikiem w tym terminalu (do sprawdzenia, spróbuj whoami), więc nie rób nic głupiego. Jednak nadal jesteś zwykłym użytkownikiem interfejsu GUI, a ponieważ będziemy edytować plik tekstowy, jeśli wolisz edytor GUI, będziemy musieli tymczasowo zmienić własność tego pliku i katalogu, w którym się znajduje:

> chown -R yourusername /etc/grub.d/

Jeśli pojawi się komunikat „Operacja niedozwolona”, nie suwykonano poprawnie. Jeśli tak chown: invalid user: ‘yourusername’, to zbyt dosłownie podjąłeś ostatnie polecenie.

Możesz teraz przejść do przeglądarki /etc/grub.dplików i poszukać pliku o nazwie 40_custom. To powinno wyglądać tak:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

Jeśli nie możesz go znaleźć, w terminalu głównym wprowadź następujące polecenia:

> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom

Otwórz go w edytorze tekstu, skopiuj i wklej powyższą część (zaczynając w / #!/bin/sh) i przejdź do następnego kroku.

Dodanie opcji rozruchu systemu Windows

Skopiuj i wklej to w edytorze tekstu na końcu pliku:

menuentry "MS Windows" {
        insmod part_gpt
        insmod search_fs_uuid
        insmod ntfs
        insmod chain
}

To jest lista modułów, które GRUB będzie musiał załatwić ( ntfsmoże być zbędny, ale nie powinien też nic zranić). Zauważ, że jest to niepełny wpis - musimy dodać kilka kluczowych poleceń.

Znalezienie programu rozruchowego drugiego etapu systemu Windows

Twoja instalacja linuksowa prawdopodobnie automatycznie zamontowała partycję Windows i powinieneś być w stanie ją znaleźć w przeglądarce plików. Jeśli nie, wymyśl, jak to zrobić (jeśli nie jesteś pewien, jak to zrobić, zadaj pytanie na tej stronie). Gdy to zrobisz, musimy znać punkt montowania - powinno to być oczywiste w przeglądarce plików, np /media/ASDF23SF23/. Aby zaoszczędzić trochę pisania, umieścimy to w zmiennej powłoki:

win="/whatever/the/path/is"

Po obu stronach znaku równości nie powinno być spacji. Nie dołączaj tutaj żadnych elementów ścieżki systemu Windows. Powinno to wskazywać na folder najwyższego poziomu na partycji Windows. Teraz:

cd $win
find . -name bootmgfw.efi

Może to potrwać kilka minut, jeśli masz dużą partycję, ale najprawdopodobniej pierwszą rzeczą, jaką wypluje, jest to, czego szukamy; mogą być dalsze odniesienia w systemie plików zawierające długie łańcuchy goobledygook - to nie jest to. Użyj, Ctrl-caby zatrzymać wyszukiwanie, gdy zobaczysz coś krótkiego i prostego, takiego jak ./Windows/Boot/EFI/bootmgfw.efilub ./EFI/HP/boot/bootmgfw.efi.

Z wyjątkiem .początku pamiętaj o tej ścieżce na później; możesz skopiować go do edytora tekstu w pustym wierszu u dołu, ponieważ będziemy go tam używać. Jeśli chcesz teraz powrócić do poprzedniego katalogu, użyj cd -, chociaż nie ma znaczenia, gdzie jesteś w powłoce od teraz.

Ustawianie właściwych parametrów

GRUB musi być w stanie znaleźć i przekazać proces uruchamiania do drugiego etapu programu ładującego system Windows. Mamy już ścieżkę na partycji Windows, ale potrzebujemy również parametrów, aby powiedzieć GRUB-owi, gdzie jest ta partycja. W twoim systemie powinno być zainstalowane narzędzie o nazwie grub-probelub (np. Fedora) grub2-probe. Wpisz, gruba następnie naciśnij Tabdwa lub trzy razy; powinieneś zobaczyć listę zawierającą jedną lub drugą.

> grub-probe --target=hints_string $win

Powinieneś zobaczyć ciąg, taki jak:

--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1

Wróć do edytora tekstu z konfiguracją GRUB i dodaj wiersz po wszystkich insmodpoleceniach (ale przed zamykającym nawias klamrowy), aby wyglądało to tak:

    insmod chain
    search --fs-uuid --set=root [the complete "hint bios" string]
}

Nie przerywaj tej linii ani nie zezwalaj na to edytorowi tekstu. Może się zawijać na wyświetlaczu - łatwym sposobem na odróżnienie jest ustawienie numeracji linii. Kolejny:

> grub-probe --target=fs_uuid $win

Powinno to zwrócić krótszy ciąg liter, cyfr i możliwych myślników, takich jak „123A456B789X6X” lub „b942fb5c-2573-4222-acc8-bbb883f19043”. Dodaj to na końcu search --fs-uuidwiersza za ciągiem bios wskazówki, oddzielone spacją.


Następnie, jeśli (i tylko jeśli) system Windows znajduje się na drugim dysku pod względem kolejności dysków , dodaj wiersz po search --fs-uuidwierszu:

    drivemap -s hd0 hd1

To wspomniana wcześniej „sztuczka”. Uwaga: nie gwarantuje się, że będzie działać, ale nie zaszkodzi spróbować.


Wreszcie ostatnia linia powinna brzmieć:

    chainloader (${root})[the Windows path to the bootloader]
}

Dla jasności, na przykład:

    chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi

Otóż ​​to. Zapisz plik i sprawdź w przeglądarce plików, aby upewnić się, że naprawdę został zapisany i wygląda tak, jak powinien.

Dodaj nową opcję menu do GRUB

Odbywa się to za pomocą narzędzia o nazwie grub-mkconfiglub grub2-mkconfig; będzie na liście, którą znalazłeś Tabwcześniej. Możesz także wywołać komendę update-grub. Aby to sprawdzić, po prostu wpisz go w terminalu głównym. Jeśli pojawi się komunikat „Komenda nie została znaleziona”, musisz użyć grub-mkconfigbezpośrednio. Jeśli nie (wliczając w to dłuższy błąd), właśnie skonfigurowałeś konfigurację i możesz trochę zejść.

Aby użyć grub-mkconfigbezpośrednio, najpierw musimy znaleźć grub.cfg:

> find /boot -name grub.cfg

To prawdopodobnie będzie /boot/grub/grub.cfglub /boot/grub2/grub.cfg.

> grub-mkconfig -o /boot/grub/grub.cfg

update-grubautomatycznie skanuje konfigurację w poszukiwaniu błędów. grub-mkconfignie zrobi tego, ale ważne jest, aby to zrobić, ponieważ łatwiej jest sobie z nimi teraz poradzić niż podczas próby uruchomienia komputera. W tym celu użyj grub-script-check(lub grub2-script-check):

> grub-script-check /boot/grub/grub.cfg

Jeśli to (lub update-grub) powoduje błąd wskazujący numer linii, jest to numer linii w grub.cfg, ale musisz naprawić odpowiednią część w /etc/grub.d/40_custom(plik w edytorze tekstu). Być może trzeba być rootem, aby zobaczyć poprzedni plik, więc spróbuj less /boot/grub/grub.cfgw terminalu, naciśnij :i wprowadź numer linii. Powinieneś zobaczyć swoją pozycję menu. Znajdź literówkę, popraw go w edytorze tekstowym i uruchom update-grublub grub-mkconfigponownie.

Po zakończeniu możesz zamknąć edytor tekstu i wpisać exitterminal, aby wyjść z trybu administratora.

Restart!

Po przejściu do menu grub przewiń szybko w dół (przed upływem limitu czasu, zwykle 5 sekund) do opcji „Windows” i przetestuj ją. Jeśli pojawi się błąd wiadomości tekstowej od grub, coś jest nie tak z konfiguracją. Jeśli pojawi się komunikat o błędzie z systemu Windows , problem występuje między tobą a firmą Microsoft. Nie martw się jednak, twój dysk Windows nie został zmodyfikowany i będziesz mógł uruchomić się bezpośrednio na nim, stawiając go na pierwszym miejscu (pod względem kolejności rozruchu) poprzez konfigurację BIOS.

Gdy ponownie wrócisz do systemu Linux, przywróć własność /etc/grub.dkatalogu i jego zawartości do pierwotnego stanu:

sudo chmod 755 /etc/grub.d/40_custom

Bibliografia

Złotowłosa
źródło
2
Technicznie poprawnym terminem, którego szukasz, który również nie jest niezgrabny, jest oprogramowanie układowe , które może prezentować się jako BIOS lub jako UEFI.
Milind R
Niestety oprogramowanie układowe ma również znacznie bardziej ogólne znaczenie, ponieważ odnosi się do dowolnego oprogramowania wbudowanego w sprzęt.
Kylotan
na moim pulpicie „łańcuch” jest nieuzasadniony jako polecenie podczas uruchamiania, ale jest to program ładujący w pliku 40_custom, który muszę napisać. daj mi znać, jeśli jest to normalne
FlogFR
Bardzo dobrze! Jednak gdy spróbuję, moja instalacja systemu Windows 8 nie pojawi się jako wpis w Grub2. Naprawiłem wszystkie błędy składniowe, a plik grub.cfg jest tworzony bez błędów. Pamiętaj też, że występuje błąd składniowy, gdy po raz pierwszy wspomniane jest obciążenie łańcuchowe: chainload $({root})powinno być chainload (${root})(nie mogę go edytować, ponieważ jest to zbyt mała zmiana).
sobek
@sobek Dzięki za to - poprawione. Jeśli dodałeś coś do pliku /etc/grub.di nie jest on dodawany podczas generowania konfiguracji, dzieje się coś dziwnego. Jeśli uruchomisz grub-mkconfigbez -oniego, wypluje się na standardowe wyjście, może to pomóc potwierdzić lub zaprzeczyć, że Twoje dodatki są przetwarzane.
goldilocks