J'ai une image d'une partition existante générée avec dd if=/dev/sdXN of=image.bin
. Maintenant, je veux utiliser cette image comme base pour une machine virtuelle. Je sais comment convertir l'image dans un format que VirtualBox peut utiliser.
Le problème est que l'image "disque" n'est vraiment que l'image d'une partition et ne contient donc pas de MBR ou de table de partition. Cela rend très difficile le démarrage de la machine virtuelle.
Existe-t-il un moyen simple, étant donné une image d'une partition, de créer une image disque appropriée, y compris une table de partition?
la source
Je suis sûr que le problème d'origine a été résolu il y a longtemps, mais pour toute personne ayant un problème similaire:
Une façon d'éviter de copier l'image entière serait de créer une image au format .vmdk qui fait référence à des fichiers d'extension distincts pour la table de partition et pour le contenu de la partition.
J'ai cet extrait qui traîne dans un fichier .vmdk d'un test que j'ai fait il y a un moment:
Cela signifie que les 63 secteurs à partir de l'offset 0 sont lus à partir du fichier brut "parttable.bin", mais que le secteur 63 et les suivants proviennent du vidage de partition brut "partition-image.bin". (Bien sûr, remplacez 63 par le décalage réel vers la première partition, généralement 2048 de nos jours).
Le résultat final est que, de l'intérieur de la VBox, il semble que vous ayez ajouté la table de partition à l'avant de l'image de partition, sans avoir à effectuer la longue opération de copie.
Partitionnez le lecteur à partir de la machine virtuelle et, si vous obtenez vos bons décalages, vous devriez voir le contenu de votre image de partition à l'intérieur de la partition nouvellement créée.
la source
Problème intéressant. Voici ce que je ferais:
Après cela, vous devrez mettre à jour votre chargeur de démarrage. En supposant que vous utilisez GRUB, montez la partition nouvellement écrite, puis chrootez dessus et exécutez
update-grub
(attention cependant, vous devrez peut-être ajuster ses fichiers de configuration avant que cela fonctionne correctement).Bonne chance!
la source
Vous pouvez redimensionner le système de fichiers en place, avec GParted.
Créez l'image de test:
Je n'utilise pas resize2fs, car il redimensionne le fichier, plutôt que de laisser de l'espace libre.
Libérez 1 Mo au début.
Enfin, créez la table de partition.
Réglez le premier secteur sur 2048 (2048 secteurs * 512 B / secteur = 1 Mo), le dernier secteur par défaut (c'est-à-dire la fin de l'image).
la source
Personnellement, je préfère ajouter en utilisant
dd
.Je suppose des secteurs de 512 octets ici. Il peut y avoir un cas pour les secteurs de 2048 octets, alors échangez simplement les chiffres et faites le calcul.
Dans chaque cas, j'utilise un fichier de test de 512 Mo par exemple:
dd if=/dev/zero of=testfs.img bs=512 count=1M mkfs.ext4 testfs.img
MBR
Composer l'image
Personnellement, je préfère ajouter le premier MB (2048 secteurs) à son début:
dd if=testfs.img skip=2048 bs=512 of=full.img
Enfin, exécutez fdisk pour créer la table de partition (ou copiez la vôtre), j'ai créé 1 partition en utilisant les valeurs par défaut.
Vérification
Pour vérifier, créez des partitions de boucle et détectez automatiquement:
sudo losetup -fP full.img
Et exécutez
file
sur le périphérique de bouclage partitionné résultant:sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
GPT
Composer l'image
Personnellement, je préfère ajouter le premier Mo (2048 secteurs, car gdisk aura par défaut ce nombre car il est aligné sur 1 Mo) à son début pour le MBR de début et 34 secteurs à sa fin (ou 2048 pour un MB complet) pour la fin GPT (le secteur final peut être différent). Omettre le GPT final peut vous faire perdre des données:
dd if=testfs.img skip=2048 bs=512 of=full.img dd if=/dev/zero seek=1050624 bs=512 of=full.img count=34
Enfin, exécutez gdisk pour créer la table de partition (ou copiez la vôtre), j'ai créé 1 partition en utilisant les valeurs par défaut.
Vérification
Pour vérifier, créez des partitions de boucle et détectez automatiquement:
sudo losetup -fP full.img
Et exécutez
file
sur le périphérique de bouclage partitionné résultant:sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
Cette méthode garantit l'absence de devinettes, de redimensionnement ou d'alignement manuel.la source
sudo file -s /dev/loop11p1
je l'ai/dev/loop11p1: data
. Ce qui était auparavant un système de fichiers ext4. Et le full.img résultant est plus petit. Je pense que la solution est inversée.seek=2048
dans cette commande dd if = testfs.img skip = 2048 bs = 512 of = full.img