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 rootwait
nei 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/sdX
dispositivo è 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 drive
nel 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 rootwait
e non ho avuto fortuna a provare a usarne altri.
Il processo di avvio procede in questo modo ( è abbastanza simile in Windows ):
- Il BIOS sceglie il dispositivo di avvio e carica qualunque sia il suo MBR (che risulta essere grub stage-1).
- 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. - Grub carica e avvia un kernel (sempre con la stessa numerazione, quindi posso usarlo di
(hd0,0)
nuovo). - Il kernel inizializza tutti i dispositivi integrati (
rootwait
fa magia ora). - Il kernel monta la partizione in cui è stata passata
root
(questo è un parametro del kernel, non un parametro grub). init.d
avvia il processo di avvio dell'utente, incluso il montaggio di elementi da/etc/fstab
.
La parte 5 è quella che mi dà problemi.