Finestre a doppio avvio sul secondo disco rigido, sistema UEFI / GPT


15

Vorrei installare Linux, ma non voglio rischiare di danneggiare la mia attuale installazione di Windows poiché ho sentito molte storie dell'orrore. Fortunatamente, ho un disco rigido aggiuntivo. Posso installare linux su quello e quindi avviare dual windows senza dover modificare il drive Windows?

Inoltre, ho un "BIOS" UEFI e l'unità Windows è in formato GPT.

Risposte:


18

Userò il termine BIOS qui sotto quando mi riferirò a concetti che sono gli stessi sia per i più recenti sistemi UEFI che per i sistemi BIOS tradizionali, poiché mentre questa è una domanda orientata all'UEFI, parlando di "BIOS" si adatta meglio con, ad esempio, la documentazione di GRUB e "BIOS / UEFI" è troppo grosso. GRUB (in realtà, GRUB 2 - questo è spesso usato in modo ambiguo) è il bootloader installato da Linux e utilizzato per il dual boot di Windows.

Innanzitutto, una parola sull'ordine dell'unità e sull'ordine di avvio. L'ordine dell'unità si riferisce all'ordine in cui le unità sono fisicamente connesse al bus sulla scheda madre (prima unità, seconda unità, ecc.); queste informazioni sono riportate dal BIOS. Ordine di avviosi riferisce alla sequenza in cui il BIOS verifica un'unità avviabile. Questo non è necessariamente uguale all'ordine dell'unità, ed è generalmente configurabile tramite la schermata di configurazione del BIOS. L'ordine delle unità non dovrebbe essere configurabile o influenzato dall'ordine di avvio, dal momento che sarebbe una cosa molto ostile da fare al sistema operativo (ma in teoria un BIOS ottuso potrebbe). Inoltre, se si scollega la prima unità, probabilmente la seconda diventerà la prima. Useremo gli UUID nella configurazione del boot loader per cercare di evitare problemi come questo (anche gli installatori di Linux contemporanei lo fanno).

Il modo ideale per ottenere ciò che vuoi è installare Linux sul secondo disco in termini di ordine unità e quindi selezionarlo prima in termini di ordine di avvio usando il setup UEFI. Un ulteriore vantaggio di ciò è che è quindi possibile utilizzare l'ordine di avvio BIOS / UEFI per selezionare l'unità Windows e bypassare grub, se lo si desidera. Il motivo per cui raccomando linux sulla seconda unità è perché GRUB deve "caricare a catena" il bootloader nativo di Windows e il bootloader di Windows presuppone sempre che si trovi sulla prima unità. C'è un modo per ingannarlo, tuttavia, se lo preferisci o ne hai bisogno al contrario.

Spero che tu possa semplicemente andare avanti e utilizzare un CD live o qualsiasi altra cosa e farlo usando il programma di installazione della GUI. Tuttavia, non tutti gli installatori sono uguali, e se questo viene rovinato e rimangono problemi come:

  1. Ho installato linux su primo disco e ora non riesco ad avviare Windows, o

  2. Ho installato Linux sul secondo disco, ma usando il primo disco per il bootloader, e ora non riesco ad avviare nulla!

Quindi continua a leggere. Nel secondo caso, dovresti prima provare a reinstallare Linux sul secondo disco, e questa volta assicurati che sia dove si trova il bootloader. Il modo più semplice e più sicuro per farlo sarebbe quello di rimuovere temporaneamente l'unità Windows dalla macchina, poiché supponiamo che non ci sia nulla in più installato su di essa, indipendentemente dall'ordine dell'unità.

Una volta che hai installato Linux e ti sei assicurato che possa avviarsi, ricollega l'unità Windows (se l'hai rimossa - e ricorda, idealmente la vogliamo prima in termini di ordine dell'unità, e la seconda unità prima in termini di ordine di avvio) e procedere al passaggio successivo.

Accesso alla configurazione di GRUB

Avvia Linux, apri un terminale e

> su root

Ti verrà chiesta la password di root. Da questo punto in poi, sei il superutente in quel terminale (per controllare, provare whoami), quindi non fare nulla di stupido. Tuttavia, sei ancora un normale utente nella GUI e poiché modificheremo un file di testo, se preferisci un editor della GUI dovremo cambiare temporaneamente la proprietà di quel file e della directory in cui si trova:

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

Se ottieni "Operazione non consentita", non hai eseguito sucorrettamente. Se ottieni chown: invalid user: ‘yourusername’, hai preso l'ultimo comando alla lettera.

Ora puoi navigare /etc/grub.dnel tuo browser di file e cercare un file chiamato 40_custom. Dovrebbe sembrare come questo:

#!/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.

Se non riesci a trovarlo, nel terminale di root inserisci i seguenti comandi:

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

Aprilo nel tuo editor di testo, copia incolla la parte sopra (a partire da #!/bin/sh ) e vai al passaggio successivo.

Aggiunta di un'opzione di avvio di Windows

Copia e incolla questo con l'editor di testo alla fine del file:

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

Questa è la lista dei moduli di cui GRUB ha bisogno per fare le cose ( ntfspotrebbe essere superfluo, ma non dovrebbe far male a nessuno). Si noti che questa è una voce incompleta - dobbiamo aggiungere alcuni comandi cruciali.

Trovare il Bootloader di Windows Secondo Stadio

L'installazione di Linux probabilmente ha montato automaticamente la partizione di Windows e dovresti riuscire a trovarla in un browser di file. In caso contrario, trova un modo per farlo (se non sei sicuro di come, fai una domanda su questo sito). Una volta fatto, dobbiamo conoscere il punto di montaggio - questo dovrebbe essere ovvio nel browser dei file, ad es /media/ASDF23SF23/. Per salvare un po 'di battitura, lo inseriremo in una variabile shell:

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

Non ci dovrebbero essere spazi su entrambi i lati del segno di uguale. Non includere qui alcun elemento di un percorso Windows. Questo dovrebbe puntare alla cartella di livello superiore sulla partizione di Windows. Adesso:

cd $win
find . -name bootmgfw.efi

Questo potrebbe richiedere alcuni minuti se hai una grande partizione, ma molto probabilmente la prima cosa che sputa è ciò che stiamo cercando; potrebbero esserci ulteriori riferimenti nel filesystem contenente lunghe stringhe goobledygook - quelli non lo sono. Utilizzare Ctrl-cper interrompere la ricerca quando vedi qualcosa di breve e semplice come ./Windows/Boot/EFI/bootmgfw.efio./EFI/HP/boot/bootmgfw.efi .

Tranne .all'inizio, ricorda questo percorso per dopo; puoi copiarlo nel tuo editor di testo su una riga vuota in fondo, poiché lo useremo lì. Se vuoi tornare alla tua directory precedente ora, usacd - , anche se non importa dove ti trovi nella shell da qui in avanti.

Impostazione dei parametri corretti

GRUB deve essere in grado di trovare e distribuire il processo di avvio al bootloader di Windows della seconda fase. Abbiamo già il percorso sulla partizione di Windows, ma abbiamo anche bisogno di alcuni parametri per dire a GRUB dove si trova quella partizione. Dovrebbe esserci uno strumento installato sul tuo sistema chiamato grub-probeo (su, ad esempio, Fedora) grub2-probe. Digitare grube quindi premere Tabdue o tre volte; dovresti vedere un elenco che include l'uno o l'altro.

> grub-probe --target=hints_string $win

Dovresti vedere una stringa come:

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

Torna all'editor di testo con la configurazione di GRUB al suo interno e aggiungi una riga dopo tutti i insmodcomandi (ma prima della parentesi graffa di chiusura) in modo che assomigli a:

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

Non interrompere quella linea o consentire al tuo editor di testo di farlo. Potrebbe apparire sul display: un modo semplice per capire la differenza è attivare la numerazione delle righe. Il prossimo:

> grub-probe --target=fs_uuid $win

Ciò dovrebbe restituire una stringa più corta di lettere, numeri e trattini come "123A456B789X6X" o "b942fb5c-2573-4222-acc8-bbb883f19043". Aggiungilo alla fine della search --fs-uuidriga dopo la stringa di bios del suggerimento, separata da uno spazio.


Successivamente, se (e solo se) Windows si trova sulla seconda unità in termini di ordine dell'unità , aggiungere una riga dopo la search --fs-uuidriga:

    drivemap -s hd0 hd1

Questo è "il trucco" menzionato in precedenza. Nota che non è garantito per funzionare ma non fa male provare.


Infine, l'ultima riga dovrebbe essere:

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

Giusto per essere chiari, ad esempio:

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

Questo è tutto. Salvare il file e controllare in un browser di file per assicurarsi che sia stato davvero salvato e abbia l'aspetto che dovrebbe.

Aggiungi la nuova opzione di menu a GRUB

Questo viene fatto con uno strumento chiamato grub-mkconfigo grub2-mkconfig; sarà stato nell'elenco che hai trovato Tabprima. Potresti anche avere un comando chiamato update-grub. Per verificarlo, basta digitarlo nel terminale di root. Se ottieni "comando non trovato", devi usarlo grub-mkconfigdirettamente. In caso contrario (incluso ottenere un errore più lungo), hai appena impostato la configurazione e puoi scorrere un po '.

Per utilizzare grub-mkconfigdirettamente, dobbiamo prima trovare grub.cfg:

> find /boot -name grub.cfg

Questo sarà probabilmente /boot/grub/grub.cfgo /boot/grub2/grub.cfg.

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

update-grubanalizzerà automaticamente la configurazione per errori. grub-mkconfigno, ma è importante farlo perché è molto più facile gestirli ora rispetto a quando si tenta di avviare la macchina. Per questo, usa grub-script-check(o grub2-script-check):

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

Se questo (o update-grub) produce un errore che indica un numero di riga, quello è il numero di riga in grub.cfg, ma è necessario correggere la parte corrispondente in /etc/grub.d/40_custom(il file nell'editor di testo). Potrebbe essere necessario essere root solo per guardare il file precedente, quindi prova less /boot/grub/grub.cfgnel terminale, premi :e inserisci il numero di riga. Dovresti vedere la tua voce di menu. Trova l'errore di battitura, correggilo nell'editor di testo ed esegui update-grubo di grub-mkconfignuovo.

Al termine puoi chiudere l'editor di testo e digitare exitil terminale per uscire dalla modalità superutente.

Reboot!

Quando si arriva al menu di grub, scorrere rapidamente verso il basso (prima della scadenza del timeout, in genere 5 secondi) fino all'opzione "Windows" e testarlo. Se ricevi un messaggio di errore da grub, qualcosa non va nella configurazione. Se ricevi un messaggio di errore da Windows , quel problema è tra te e Microsoft. Non preoccuparti, tuttavia, l'unità Windows non è stata modificata e sarai in grado di avviarlo direttamente inserendolo prima (in termini di ordine di avvio) tramite la configurazione del BIOS.

Quando torni di nuovo su Linux, restituisci la proprietà della /etc/grub.ddirectory e i suoi contenuti al loro stato originale:

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

Riferimenti

  • Manuale di GRUB 2

  • Arch Linux Wiki GRUB page

    Arch ha alcuni dei migliori documenti disponibili, e gran parte di esso (inclusa quella pagina) è principalmente applicabile a qualsiasi distribuzione GNU / Linux.


2
Il termine tecnicamente corretto che stai cercando, che non è nemmeno goffo, è firmware , che può presentarsi come BIOS o UEFI.
Milind R

Sfortunatamente il firmware ha anche un significato molto più generale in quanto si riferisce a qualsiasi software incorporato nell'hardware.
Kylotan,

sul mio desktop, "chain" è infondato come comando durante l'avvio, ma è chainloader nel file 40_custom che devo scrivere. fatemi sapere se questo è normale
FlogFR

Molto bella! Tuttavia, quando provo questo, la mia installazione di Windows 8 non verrà visualizzata come voce in grub2. Ho corretto tutti gli errori di sintassi e il file grub.cfg è stato creato senza errori. Inoltre, tieni presente che c'è un errore di sintassi quando viene citato per la prima volta il chainload: chainload $({root})dovrebbe essere chainload (${root})(non posso modificarlo perché è una modifica troppo piccola).
sobek,

@sobek Grazie per quello - corretto. Se hai aggiunto qualcosa a un file /etc/grub.de non viene aggiunto quando generi la configurazione, sta succedendo qualcosa di strano. Se corri grub-mkconfigsenza -osputare allo standard out, ciò potrebbe aiutare a confermare o negare che le tue aggiunte vengano elaborate.
riccioli d'oro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.