Comment dois-je configurer grub pour démarrer le noyau Linux à partir d'un disque dur USB?

17

J'ai un disque dur d'ordinateur portable dans un boîtier externe que j'utilise comme une grande clé USB. Pour une touche supplémentaire, j'ai installé Linux dessus, donc je peux démarrer n'importe quelle machine avec ma distribution de choix (par exemple pour la récupération de données ou la réparation d'un système b0rked ou tout simplement en utilisant un ordinateur portable emprunté sans détruire le Windows préinstallé). Le problème est que, selon la configuration matérielle, le disque dur USB peut être visible sous différents chemins. Pour la configuration de grub, je l'utilise simplement (hda0,0)car elle est relative à l'appareil à partir duquel grub a été lancé. J'ai des entrées UUID dans /etc/fstab. Je spécifie également rootwaitdans les paramètres du noyau afin qu'il attende que le sous-système USB se stabilise avant d'essayer de monter le périphérique.

Que dois-je transmettre au noyau en tant que root=? Actuellement, démarrez une fois /dev/sdXà partir de la clé USB , vérifiez les messages de débogage pour voir quel périphérique a été attribué au lecteur USB par le noyau, puis redémarrez et modifiez la configuration de grub. Je ne peux rien changer sur le PC à part l'activation Boot from USB hard drivedans le BIOS et la définition d'une priorité plus élevée que les disques durs internes.

Il existe différents scripts de génération d'initrd qui incluent la prise en charge de l'UUID dans le chemin du périphérique racine, malheureusement celui natif de Gentoo (genkernel) ne le prend pas en charge rootwaitet je n'ai pas eu de chance d'essayer d'en utiliser d'autres.

Le processus de démarrage se déroule comme ceci ( il est assez similaire sous Windows ):

  1. Le BIOS choisit le périphérique de démarrage et charge quel que soit son MBR (qui se trouve être grub stage-1).
  2. Grub charge sa configuration et les fichiers de l'étape 2 à partir du périphérique sur lequel il a été défini root, en utilisant (hd0)le périphérique à partir duquel il a été chargé par le BIOS.
  3. Grub charge et démarre un noyau (toujours la même numérotation, donc je peux réutiliser (hd0,0)).
  4. Le noyau initialise tous les périphériques intégrés ( rootwaitest-ce que c'est magique maintenant).
  5. Le noyau monte la partition sous laquelle il a été transmis root(il s'agit d'un paramètre de noyau, pas d'un paramètre grub).
  6. init.ddémarre le processus de démarrage de l'espace utilisateur, y compris le montage des éléments à partir de /etc/fstab.

La partie 5 est celle qui me pose des problèmes.

skolima
la source

Réponses:

6

Je pense que la réponse devrait être d'utiliser soit root=LABEL=...ouroot=UUID=...

Mais vous indiquez que cela ne fonctionne pas pour vous. Je suggérerais d'examiner s'il y a un problème avec les actions de votre initrd.

matli
la source
Je n'ai pas d'initrd, c'est tout le problème. genkernel ne prend pas en charge l'option "rootwait" et les autres ne fonctionnent pas avec Gentoo.
skolima
2

Je pourrais me tromper ou peut-être simplement vous mal comprendre, mais le choix du périphérique de démarrage n'est-il pas quelque chose qui serait configuré à partir du BIOS de la machine que vous démarrez?

Je pense qu'il s'agirait de choisir le lecteur USB, sur lequel GRUB serait installé comme chargeur de démarrage, puis de choisir la distribution que vous souhaitez démarrer dans le menu GRUB.

Justin Bennett
la source
2

Vous pouvez utiliser:

set root='(hd0,msdos5)'
user40070
la source