Forum Linux.général Conversion raw en qcow2

Posté par  .
Étiquettes : aucune
-1
12
nov.
2011

Bonjour à tous !

C'est mon premier post donc j'espère pas faire de bêtises !

Voilà mon soucis est que je voudrais convertir mon disque physique en disque virtuel.

Pour cela j'ai voulu utiliser cette commande : "qemu-img convert -f raw /dev/sda -O qcow2 hd.qcow2"

Cela fonctionne dans le sens où la conversion s'effectue, mais elle ne peux pas aller au bout car le processus veut aller à la taille du disque et non à la taille des données.

Moi ce que je voudrais, c'est que si il n'y a que 3gb de données dans un disque dur de 100gb, que l'image qcow2 ne fasse que 3gb.

Cette commande de conversion le fait très bien entre disque virtuel, mais connaitriez-vous une méthode pour mon cas ?

Merci beaucoup,

Bonne soirée

  • # -c

    Posté par  . Évalué à 0.

    Better still, convert from a sparse file into the qemu's own "Copy On Write" image. This conversion will save the same space and still be runnable:

    $ qemu-img convert -c debian.img -O qcow debian_recompressed.img

    If the guest system's image is still larger than reasonable, then open up the Guest system and run "dd if=/dev/zero of=/tmp/junk ; sync ; rm /tmp/junk". That will push out deleted file scraps, recompression should work then.

    Vu sur http://wiki.debian.org/QEMU après une recherche rapide sur un moteur de recherche

    qemu−img − QEMU disk image utility
    […]
    convert [−c] [−f fmt] [−O output_fmt] [−o options] filename [filename2 [...]] output_filename
    […]
    -c        indicates that target image must be compressed (qcow format only)

    (man qemu-img)

    Knowing the syntax of Java does not make someone a software engineer.

    • [^] # Re: -c

      Posté par  . Évalué à 0.

      J'ai oublié de mettre en avant aussi, sur le wiki de debian :

      If the guest system's image is still larger than reasonable, then open up the Guest system and run "dd if=/dev/zero of=/tmp/junk ; sync ; rm /tmp/junk". That will push out deleted file scraps, recompression should work then.

      Ton disque dur n'est sûrement pas neuf, les fichiers supprimés sont toujours dessus. Seules les entrées dans la tables des inodes ont du être supprimées. Force les écriture de bits nuls grâce à la commande du wiki debian si le -c ne marche pas :
      dd if=/dev/zero of=/tmp/junk ; sync ; rm /tmp/junk

      Dernière chose (souvent on fait des erreurs tellement grosses qu'on s'en rend pas compte soi même, ça m'arrive tout les jours), n'exporte pas /dev/sda en image qcow2 sur /dev/sda :D .

      Knowing the syntax of Java does not make someone a software engineer.

      • [^] # Re: -c

        Posté par  . Évalué à 1.

        Tout d'abord merci pour tes réponses.

        Je précise tout de même que ça fait plusieurs heures que je planche sur le sujet que j'ai bien exploré les différents man des commandes.

        J'ai déja testé avec le -c et le résultat est strictement le même. Idem si j'indique un autre disque en output.

        Pour la méthode d'ouvrir le système après coup pour en virer l'inutile, moi je veux bien, mais comment je crée l'image avant sachant que j'ai pas assez de place pour la générer vu qu'elle prend l'ensemble du disque dur existant?

        Dans l'idéal je n'aurais pas à utiliser d'autre disque.

        Merci à toi,

        • [^] # Re: -c

          Posté par  . Évalué à 0.

          Pour la méthode d'ouvrir le système après coup pour en virer l'inutile, moi je veux bien, mais comment je crée l'image avant sachant que j'ai pas assez de place pour la générer vu qu'elle prend l'ensemble du disque dur existant?

          for partition in /dev/sda*
          do
            mount $partition /mnt && \
            (dd if=/dev/zero of=/mnt/foobar
            sync
            rm /mnt/foobar -f
            umount /mnt)
          done
          
          

          Knowing the syntax of Java does not make someone a software engineer.

          • [^] # Re: -c

            Posté par  . Évalué à 0.

            C'est bon ça, je teste de suite!

          • [^] # Re: -c

            Posté par  . Évalué à 0.

            Me vient un doute, ce script il est à exécuter sur l'hôte ou la vm?

            • [^] # Re: -c

              Posté par  . Évalué à 0.

              Sur l'hôte, c'est pour palier le fait que tu ne puisse pas le lancer dans la vm.

              Knowing the syntax of Java does not make someone a software engineer.

            • [^] # Re: -c

              Posté par  . Évalué à 0.

              Ôte moi d'un doute. Tu as compris ce que faisait ce script ? Il monte les partitions de ton disque dur une par une, et force l'écriture de zéro dessus. Lance pas des trucs comme ça sans savoir ce qu'il font.

              Knowing the syntax of Java does not make someone a software engineer.

              • [^] # Re: -c

                Posté par  . Évalué à 0.

                Ouais mais je pensais pouvoir m'en servir.

                En clair, j'ai un hôte physique, et je veux virtualiser le disque pour pouvoir le lancer en virtuel sans bouger de disque.

                • [^] # Re: -c

                  Posté par  . Évalué à 1.

                  En clair, j'ai un hôte physique, et je veux virtualiser le disque pour pouvoir le lancer en virtuel sans bouger de disque.

                  Je comprend rien.

                  Si j'ai bien compris, sur ton hôte, le disque de la machine virtuelle est /dev/sda. C'est ça ? Si c'est le cas, tu as accès à toutes les partitions /dev/sdaX.

                  Knowing the syntax of Java does not make someone a software engineer.

                  • [^] # Re: -c

                    Posté par  . Évalué à 0.

                    Pour faire simple :

                    J'ai une machine physique sous un OS Linux. Mon but est d'en virtualiser le disque pour pouvoir le lancer avec kvm/qemu.

                    • [^] # Re: -c

                      Posté par  . Évalué à 0.

                      comme je vois la chose : tu dois avoir 2 disques dur, raccordés sur la même machine (au moins le temps de faire l'image disque du futur guest)

                      donc :
                      /dev/sda = disque système linux hôte
                      /dev/sdb = disque linux que tu veux virtualiser

                      si j'ai compris les suggestions précédentes (jamais essayé moi-même) :
                      depuis l'hôte :
                      - lancer le script d'écriture des 0 sur le /dev/sdb
                      - lancer ta commande qemu convert -f raw /dev/sdb -O qcow2 rep_sur_disque_sda/nom_image

                      tu peux ensuite retirer le disque sdb, et bien le conserver comme backup tant que tu n'es pas certain du bon fonctionnement de ton système virtualisé

                      j'espère ne pas avoir dit de bêtise, quelqu'un ?

                      Envoyé depuis mon Archlinux

                      • [^] # Re: -c

                        Posté par  . Évalué à 0.

                        Justement le but serait de pouvoir utiliser la méthode avec un seul disque dur.

                        • [^] # Re: -c

                          Posté par  . Évalué à 0.

                          en admettant que ça soit réalisable sans risque :
                          1 - ça va être beaucoup plus long qu'une copie de disque à disque
                          2 - dans ton image disque gcow2 tu vas te retrouver avec une copie incomplète de cette image disque (et un système de fichier pas propre car en cours de modification au moment de la création de l'image)

                          tu as une impossibilité à utiliser 2 disques ou bien c'est juste une recherche de la difficulté ? :-)

                          Envoyé depuis mon Archlinux

                          • [^] # Re: -c

                            Posté par  . Évalué à 0.

                            Tu as raison mais c'est une contrainte que je ne peux contourner.

                            Et si je créais une image disons de 5gb, que je la monte en loop et que j'y copie/colle la racine?

                            • [^] # Re: -c

                              Posté par  . Évalué à 0.

                              je ne sais pas, je ne suis pas familier de ce genre d'opération de haut vol,
                              mais je suppose que tu n'es pas sorti de l'auberge :
                              - il faut rendre bootable l'image non ?
                              - il te faudra aussi adapter le fstab peut-être, à moins que ton système actuel ait tout en 1 seule partition

                              la solution simple consisterai à sortir le disque de cette machine (portable ?) et à le brancher dans une autre machine (ayant déjà un disque linux), faire la copie disque ---> image sur autre disque, transférer l'image sur le disque d'origine et le rebrancher dans la bonne machine

                              sinon, j'ai peur que tu galère longtemps, ou pire que tu fasses un erreur fatale...

                              bon courage

                              Envoyé depuis mon Archlinux

                            • [^] # Re: -c

                              Posté par  . Évalué à 2.

                              pour ton besoin c'est une idée faisable.

                              • creer une image disque qcow2 vierge de 5Go
                              • la monter en loop dans /mnt
                              • un petit rsync --exclude /mnt -a / /mnt
                              • demonter
                              • lancer la VM avec ce disque à partir d'un livecd ou un shell de depannage
                              • chrooter le disque dans la VM, reinstaller grub, changer le fstab si besoin, etc.
                              • [^] # Re: -c

                                Posté par  . Évalué à 0.

                                J'ai suivi à la lettre tes étapes, mais quand je tente de lancer une VM avec ce disque dur, j'ai un "grub rescue>" alors que j'ai fait un grub-install juste avant de démonter le loop.

                                Auriez-vous une idée?

                                • [^] # Re: -c

                                  Posté par  . Évalué à 2.

                                  ne pas faire les choses à moitié, lire les procedures jusqu'au bout

                                  1°)creer une image disque qcow2 vierge de 5Go
                                  2°) la monter en loop dans /mnt
                                  3°) un petit rsync --exclude /mnt -a / /mnt
                                  4°)demonter
                                  5°) lancer la VM avec ce disque à partir d'un livecd ou un shell de depannage
                                  - chrooter le disque dans la VM,
                                  - reinstaller grub,
                                  - changer le fstab si besoin, etc.

                                  toi visiblement tu t'es arreté à "lancer la VM avec ce disque"

                                  tu trouveras des documents sur internet qui explique comment restaurer le grub...
                                  il te parlerons de livecd ou autre systeme, de chroot...

                                  • [^] # Re: -c

                                    Posté par  . Évalué à 0.

                                    C'est ce que je comprends pas, ça veut dire quoi le lancer à partir d'un liveCD?

                                    Enfin ce que je comprends c'est lancer le liveCD, chrooter pour travailler dans l'environnement du disque, c'est ça?

                                    Je sens que je vais me faire insulter !

                                    Désolé....

                                    • [^] # Re: -c

                                      Posté par  . Évalué à 2.

                                      Enfin ce que je comprends c'est lancer le liveCD, chrooter pour travailler dans l'environnement du disque, c'est ça?

                                      oui c'est exactement ca
                                      mais dans la machine virtuelle
                                      exactement comme tu le ferais sur une machine reelle pour restaurer les partitions ou le grub

                                      • [^] # Re: -c

                                        Posté par  . Évalué à 0.

                                        Bizarre,

                                        Quand je fais tout le processus et que je lance l'image disque avec un superdiskgrub2 le système se lance, uniquement si aucune partition est créée !

                                        Si je refais exactement le même processus avec une partition créée au préalable dans l'image, le système ne démarre pas, j'arrive sur une busybox avec un echec sur waiting for booting root filesystem !

                                        C'est rageant parce que sans partition je peux pas faire un grub-install une fois le système lancé.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.