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 rootwait
dans 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 drive
dans 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 rootwait
et 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 ):
- Le BIOS choisit le périphérique de démarrage et charge quel que soit son MBR (qui se trouve être grub stage-1).
- 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. - Grub charge et démarre un noyau (toujours la même numérotation, donc je peux réutiliser
(hd0,0)
). - Le noyau initialise tous les périphériques intégrés (
rootwait
est-ce que c'est magique maintenant). - 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). init.d
dé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.