Come devo configurare grub per l'avvio del kernel Linux da un disco rigido USB?


17

Ho un disco rigido per laptop in un contenitore esterno che uso come un grande pendrive. Per un tocco in più, ho installato Linux su di esso, quindi posso avviare qualsiasi macchina con la mia distribuzione di scelta (ad esempio per il recupero dei dati o la riparazione di un sistema b0rked o semplicemente usando un laptop preso in prestito senza distruggere Windows preinstallato). Il problema è che, a seconda della configurazione hardware, il disco rigido USB potrebbe essere visibile in percorsi diversi. Per la configurazione di grub, uso solo (hda0,0)perché è relativo al dispositivo da cui è stato lanciato grub. Ho voci UUID in /etc/fstab. Specifico anche rootwaitnei parametri del kernel in modo che aspetti che il sottosistema USB si stabilizzi prima di provare a montare il dispositivo.

Cosa devo passare al kernel come root=? Attualmente avvia una volta dal pendrive, controlla i messaggi di debug per vedere quale /dev/sdXdispositivo è stato assegnato all'unità USB dal kernel, quindi riavvia e modifica la configurazione di grub. Non posso modificare nulla sul PC oltre all'abilitazione Boot from USB hard drivenel BIOS e impostandolo su una priorità più alta rispetto ai dischi rigidi interni.

Esistono vari script generatori di initrd che includono il supporto per UUID nel percorso del dispositivo root, sfortunatamente quello nativo di Gentoo (genkernel) non supporta rootwaite non ho avuto fortuna a provare a usarne altri.

Il processo di avvio procede in questo modo ( è abbastanza simile in Windows ):

  1. Il BIOS sceglie il dispositivo di avvio e carica qualunque sia il suo MBR (che risulta essere grub stage-1).
  2. Grub carica i file di configurazione e stage-2 dal dispositivo impostato come root, usando (hd0)per il dispositivo da cui è stato caricato dal BIOS.
  3. Grub carica e avvia un kernel (sempre con la stessa numerazione, quindi posso usarlo di (hd0,0)nuovo).
  4. Il kernel inizializza tutti i dispositivi integrati ( rootwaitfa magia ora).
  5. Il kernel monta la partizione in cui è stata passata root(questo è un parametro del kernel, non un parametro grub).
  6. init.davvia il processo di avvio dell'utente, incluso il montaggio di elementi da /etc/fstab.

La parte 5 è quella che mi dà problemi.

Risposte:


6

Penso che la risposta dovrebbe essere quella di utilizzare root=LABEL=...oroot=UUID=...

Ma indichi che questo non funziona per te. Suggerirei di esaminare se c'è qualche problema con le azioni del tuo initrd.


Non ho un initrd, questo è l'intero problema. genkernel non supporta l'opzione "rootwait" e altri non funzionano con Gentoo.
skolima,

2

Potrei sbagliarmi o forse solo fraintenderti, ma la scelta del dispositivo di avvio non è qualcosa che sarebbe configurata dal BIOS della macchina che stai avviando?

Penserei che sarebbe una questione di scegliere l'unità USB, che avrebbe installato GRUB come bootloader, e quindi scegliere quale distro si desidera avviare dal menu di GRUB.


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.