J'ai fait ce qui suit:
- créé un fichier .img vide avec dd
- l'a associé à / dev / loop0 avec losetup
- créé une partition avec fdisk
- formaté cette partition avec mke2fs
- copié un système GNU / Linux personnalisé dans cette partition
Maintenant, j'aimerais rendre le fichier .img amorçable en installant grub dans ses répertoires MBR et / boot. Mon objectif est de charger le fichier .img avec qemu. Il serait préférable d’utiliser Grub2 au lieu de Grub Legacy.
Merci.
Réponses:
Ceci est avec la version 1.98 + 20100804-5ubuntu3 (Maverick Meerkat).
Le programme d’installation de grub2 peut s’installer sur des périphériques en boucle, mais si vous montez à l’aide du mappeur de périphériques, vous serez confus et croirez que vous avez un schéma LVM, échouant mystérieusement avec une réclamation concernant une abstraction manquante.
Au lieu de cela, vous devez configurer vous-même le périphérique de bouclage pour la partition, avec un nom qui doit correspondre au modèle "/ dev / loop [0-9]", c'est-à-dire sans aucun indicateur de partition à la fin:
(Notez que si vous souhaitez que grub-mkconfig / update-grub fonctionne sur ce volume, le bouclage de partition doit être connecté au bouclage de disque sous / dev et non directement au fichier image).
Puisque vous avez utilisé fdisk pour partitionner l’image, vous disposez d’une table de partition de type msdos (aka label) et démarrez à l’aide d’un BIOS. En plus de placer le stage1 / boot.img dans le MBR, le stage1.5 / core.img sera placé dans une zone d'intégration dans un espace non partitionné (!) Juste après, et il doit y avoir un espace pour cela.
L'astuce consiste maintenant à indiquer au programme d'installation grub2, via une carte de périphérique, comment votre configuration de bouclage sera mappée sur les lecteurs BIOS de la machine virtuelle. (Dans Grub1, cela se faisait directement dans la coque). Vous envisagez probablement de démarrer cette image en tant que premier disque. Par conséquent, le mappage approprié serait le suivant:
Ici, j'ai placé la carte des périphériques dans l'image du disque invité, de sorte que vous puissiez générer le fichier de configuration de démarrage grub.cfg:
(Attention, le post-installateur du paquet grub-pc lancera une sonde qui écrasera la carte des périphériques (!). Vous devrez donc l'écrire après l' installation et exécuter vous-même grub-mkconfig / update-grub).
Maintenant, lancez le programme d'installation à partir de l' hôte , en pointant sur l'installation du client:
Enfin, démontez tout ce qui est configuré ici avant de lancer qemu sur votre image:
la source
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
échoue malheureusement car il n'y a pasgrub-mkconfig
ou aucun binaire dans le disque .img, et/mnt
est déjà monté. Ce serait formidable si vous avançiez pas à pas et écriviez tous les détails / commandes.losetup -P
est un autre bon moyen de monter une seule partition: stackoverflow.com/a/15200862/895245/usr/sbin/grub-probe: warning: the device.map entry 'hd0,1' is invalid. Ignoring it. Please correct or delete your device.map.
cette réponse est donc inutile.merci beaucoup pour ces explications. J'ai intégré votre solution dans mes propres scripts avec les modifications suivantes (traduites en notation / variables):
cela fonctionne au moins sur Debian Squeeze. Vérifiez '/boot/grub/grub.cfg' pour l'exactitude.
la source
cat > /mnt/boot/grub/device.map
être fait dans l'environnement chrooté? Si oui, le chemin devrait être/boot/grub/device.map
.Hypothèses:
Voici comment j'ai lancé qemu dans le menu GRUB:
Ensuite, le shell GRUB apparaît:
Si vous aviez copié un noyau et un disque virtuel dans / dev / loop0p1, vous pouvez l’amorcer:
Et voici le shell Linux par défaut (car aucun / sbin / init n'était disponible dans ce cas)
la source