Chaining bootloader per una configuration insolita

Sto cercando di implementare qualche idea insolita sul mio PC.

Ho un totale di 6 partizioni:

  • La prima è per Windows 7 (il mio sistema operativo di base)
  • Seconda per Ubuntu
  • 3 ° e 5 ° sono le partizioni di archiviazione di Windows
  • 4th è un / home per Ubuntu
  • e la sesta è una partizione di ripristino con alcuni strumenti estremo.

La mia idea sembra così:

  • Windows è l'opzione di avvio predefinita
  • Ubuntu è avviabile sia nativamente che all'interno di VM ospitati da Windows
  • GRUB2 può lanciare alcuni strumenti dall'ultima partizione

Finora funziona bene. Il mio MBR e il primo BS sono inediti, i settori predefiniti di Windows. Il secondo BS ha installato GRUB2, utilizzato per lanciare Ubuntu. Ci sono anche GRUB4DOS e memdisk sull'ultima partizione, che vengono caricati a catena da Grub2win. VM ha un'unità virtuale collegata a GRUB, quindi la partizione di Ubuntu è avviabile.

Così l'avvio sembra questo:

  • Windows: MS BootMgr -> Windows 7 (predefinito)
  • Ubuntu: MS BootMgr -> Grub2win -> GRUB2 -> Ubuntu
  • Strumenti: MS BootMgr -> Grub2win -> GRUB4DOS -> (alcuni altri strumenti)

Quello che voglio get è fare (alcuni) GRUB2 virtualmente il primo gestore di avvio per avviare, preferibilmente l'attuale Grub2win. Lo scenario perfetto sarebbe:

  • Windows: statico GRUB2 -> MS BootMgr -> Windows 7 (predefinito)
  • Ubuntu: GRUB2 statico -> Ubuntu GRUB2 -> Ubuntu
  • Strumenti: statico GRUB2 -> GRUB4DOS -> (strumenti)

Il problema è che non ho idea di come installare un altro GRUB2 indipendente o come fare Grub2win il mio gestore di avvio predefinito (se ho ragione, non è nemless ansible).

Impostando il timeout di BootMgr a 0 e rendendo Grub2win l'opzione predefinita di avvio renderebbe praticamente Grub2win il primo, ma sarebbe imansible lanciare Windows. La soluzione sarebbe lanciare Windows direttamente (senza BootMgr), ma per quanto ne so, non è ansible.

Tuttavia, Ubuntu sembra farlo con il suo GRUB2 – sta saltando su BootMgr e avvia Windows. Ho provato a copiare quella voce da /boot/grub/grub.cfg alla configuration di Grub2win, ma poi non funzionava in quel modo – appena lanciato BootMgr.

La ragione per cui non voglio utilizzare GRUB di Ubuntu è che each volta che l' update-grub viene eseguito all'interno di un VM, Windows è andato dall'elenco. Accade perché VM ha solo accesso a due partizioni Linux, quindi non esiste una partizione Windows visibile per Ubuntu virtualizzata.

Quindi, per ora il mio punto è quello di lanciare Windows direttamente da Grub2win come il GRUB2 di Ubuntu lo fa. ragazzi potete aiutarmi?

Modifica: poche cose da considerare:

  • GRUB4DOS è parte integrante di alcuni set di strumenti, quindi è fondamentalmente intaccabile. Non voglio eseguire alcun lavoro aggiuntivo per each aggiornamento del set di strumenti.
  • Ho bisogno di un modo per avviare le immagini ISO, attualmente sto usando Grub2win + memdisk.
  • Il menu di Ubuntu GRUB è esattamente lo stesso quando viene caricato in catena e su VM. Poiché il VM ha solo due partizioni Ubuntu collegate, voglio solo opzioni correlate Ubuntu in quel menu.

Vedo cosa stai cercando di fare (menu di avvio a livello di un livello, invece di due menu separati) e vorrei proporre una soluzione alternativa allo stesso effetto:

Tenere il bootmgr dal menu principale, non impostare il timeout a zero. Utilizzare EasyBCD per aggiungere due voci distinte: una voce di Ubuntu e una voce GRUB4Dos (EasyBCD ha una propria copia di Grub4Dos chiamata NeoGrub).

Assicurarsi di cancellare tutto ma Ubuntu dal menu di Ubuntu GRUB. Configurare il menu NeoGrub di EasyBCD per imitare il menu Grub4Dos esistente.

Avrai un menu a livello singolo in cui è ansible avviare Windows, Ubuntu o GRUB4Dos.

Non dovrai mai aggiornare Grub4Dos / NeoGrub e il tuo avvio functionrà attraverso gli aggiornamenti di Ubuntu e gli aggiornamenti del kernel senza wherer modificare una cosa.

Il problema è che non ho idea di come installare un altro GRUB2 indipendente

L'installazione di un GRUB2 indipendente è in linea diretta ( per aver sempre puntato sul futuro Linux / Ubuntu Kernel, vedere la mia domanda ).

Fai abbastanza backup (dd è il tuo amico) prima di iniziare!

[Voglio che questo post sia semplice e semplice, quindi chiunque non abbia familiarità con la configuration GRUB può utilizzarlo per installare un GRUB indipendente. Se qualcuno ha suggerimenti su come migliorare questo post, ti prego di comunicarmi.]

Creare una partizione di avvio separata in cui installerai GRUB2 e nient'altro. Non verrà montato su alcun sistema operativo installato, viene utilizzato solo per select il primo sistema. Potresti finire per fare alcuni riarrangiamenti (spostare le partizioni in giro per rendere spazio o magari distruggere e ricrearle in un ordine diverso). Mi piace avere la mia partizione GRUB come la prima partizione sul disco (o la seconda, dopo la partizione BIOS se si utilizza GPT), di 50 MB di size (potrebbe essere 5, ma hdds sono grandi). Prima di installare tutti i sisthemes operativi, perché sovrascriveranno l'MBR. NON utilizzare / dev / sda1 in alcun sistema operativo.

Avvia un sistema live che viene fornito con gli strumenti GRUB2. Raccommand Parted Magic (che puoi anche usare per tutto il tuo partizionamento).

  • Fare attenzione a non digitare sda2 anziché sda1 o qualcosa del genere. Puoi facilmente pulire il tuo hdd pulito con un errore di typo (ovviamente hai un backup completo, quindi niente sarebbe perso).
  • Formatta / dev / sda1 con ext2.

mkfs.ext2 / dev / sda1

  • Montare la partizione GRUB e installare GRUB2:

cd / mnt

mkdir sda1

mount / dev / sda1 sda1

grub-install –boot-directory = / mnt / sda1 / dev / sda

  • "L'installazione è terminata, nessun errore è stato segnalato."

cd sda2

ls

  • "grub / perso + trovato /"
  • Crea manualmente una nuova configuration del menu (è anche ansible che GRUB generi uno).

vi grub / grub.cfg

menuentry "Windows 7 (loader)" –class windows –class os {

 insmod part_msdos insmod ntfs set root='(hd0,msdos2)' chainloader +1 

}

menuentry 'Debian (o Ubuntu)' {

 insmod part_msdos insmod ext2 set root='(hd0,msdos3)' echo 'Loading Linux...' linux /boot/vmlinuz root=/dev/sda6 ro quiet <- current vmlinuz file name echo 'Loading initial ramdisk...' initrd /boot/initrd.img <- current initrd.img file name 

}

menuentry 'Fedora (solo un altro esempio)' {

 insmod part_gpt insmod ext2 set root='(hd0,msdos3)' echo 'Loading Linux...' linux /boot/vmlinuz-3.7.3-101.fc17.x86_64 root=UUID=[UUID of /dev/sda3] ro rd.md=0 rd.lvm=0 rd.dm=0 SYSFONT=True KEYTABLE=us rd.luks=0 LANG=en_US.UTF-8 echo 'Loading initial ramdisk...' initrd /boot/initramfs-3.7.3-101.fc17.x86_64.img 

}

  • Ho provato questo con Parted Magic 11.11.11 (numero di versione fortunato), gli strumenti GRUB crearono solo la directory "grub" su / dev / sda1. Una versione diversa potrebbe creare una directory "grub2". In entrambi i casi, inserisci il tuo file di configuration GRUB2 (GRUB2 sembra uno script Shell, in GRUB1, è stato un semplice menu.lst, ma è così indietro).
  • Sostituire "[UUID di / dev / sda3]" con quello che ls -l / dev / disk / by-uuid | grep sda3 ti dice.
  • Sostituisci "/ boot / vmlinuz" con il nome del file reale (in / dev / sda3, la tua partizione Linux).
  • Sostituire "/boot/initrd.img" allo stesso modo.
  • Smontare e riavviare. Il tuo computer avvia un GRUB2 semplice, che elenca le voci specificate ("Windows 7 (loader)", "Debian (o Ubuntu)"). Se lo hai fatto bene, sarai in grado di avviare sia Windows che Linux direttamente da quel GRUB indipendente .
  • Ancora una volta, la voce di Linux punti a una specifica versione del kernel. Dovrebbe essere aggiornato manualmente (mount / dev / sda1 e modificare grub / grub.cfg), che costituisce un inconveniente principale. Ancora una volta, vedi la mia altra domanda sulla creazione di GRUB per questo.

(lol, superuser ha rimosso each istanza della parola "have")