Editar (1 y 2):

Editar (1 y 2):

Editar (1 y 2):

Cloné mi sistema operativo en funcionamiento (apagado, HD montado en una unidad USB,

> dd if=/dev/sdc1 of=/data/system.img

El SSD original es el siguiente:

> sfdisk -d /dev/sdc
# partition table of /dev/sdc
unit: sectors

/dev/sdc1 : start=       63, size= 92164842, Id=83
/dev/sdc2 : start=        0, size=        0, Id= 0
/dev/sdc3 : start=        0, size=        0, Id= 0
/dev/sdc4 : start= 92164905, size=884603160, Id= 5
/dev/sdc5 : start= 92164968, size= 33559722, Id=82
/dev/sdc6 : start=125724753, size=851043312, Id=83

Para crear una VM con solo la primera partición, me inspiré en el siguiente artículo:Notas técnicas: convierta una imagen de partición en una imagen de disco de arranque.

Reconstruí una imagen de disco completa:

> dd if=/dev/zero of=d.img count=1 bs=1MiB

Para comenzar con un encabezado de sistema moderno normal (comenzando con una pizarra en blanco con 2048 bloques de 512 bytes), pero a diferencia de mi antiguo sistema que solo tenía un bloque de 512 bytes.

> pv system.img >> d.img # to paste sdc1 onto that header
> file d.img 
d.img: data
> fdisk d.img # to initialise the header suitably (create the partition)

volver a crear la partición (n (+todos los valores predeterminados, dijo no a eliminar la firma ext4 existente), a (hacer que sea de arranque), w)

> file d.img
d.img: DOS/MBR boot sector; partition 1 : ID=0x83, active, start-CHS \
(0x0,32,33), end-CHS (0x275,145,28), startsector 2048, 92364800 sectors
> cp d.img e.img # take a backup
> file e.img 
e.img: DOS/MBR boot sector; partition 1 : ID=0x83, active, start-CHS \
(0x0,32,33), end-CHS (0x275,145,28), startsector 2048, 92364800 sectors

> losetup -f -P d.img
> losetup -l
/dev/loop4          0      0         0  0 /data/d.img         0     512
> blkid
/dev/loop4: PTUUID="55733c83" PTTYPE="dos"
/dev/loop4p1: UUID="437b9924-b81d-4054-b89e-b1ce0cf2a2c7" TYPE="ext4" PTTYPE="dos" PARTUUID="55733c83-01"
> mkdir d
> mount /dev/loop4p1 d/
> ll d
> mount --bind /dev d/dev
> mount --bind /sys d/sys
> mount --bind /proc d/proc
> chroot d
> ls -al /boot/grub
> less /boot/grub/grub.cfg
<...>
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 437b9924-b81d-4054-b89e-b1ce0cf2a2c7
<...>
> grub-install /dev/loop4
Installation finished. No error reported.
> vi etc/fstab
# uncomment swap and /data, just keep the root partition (which includes /boot)
> exit # come out of the chroot environment
> umount d/sys
> umount d/proc
> umount d/dev
> umount d/
> losetup -d /dev/loop4
> qemu-img convert -f raw -O qcow2 d.img d.qcow2

Definitivamente puedo ver la imagen, pero de alguna manera GRUB en qemu no puede ver la partición:

> qemu-system-x86_64 d.qcow2

Se detiene en grub_rescue, indicando que no reconoce el UUID como se muestra arriba, y lo que puedo ver es:

> ls
(hd0) (fd0)

Una cosa que hice diferente al artículo en el que me inspiré es que usé el sistema local (antiguo) grub-install(en chroot), en lugar del sistema host. Y verificar el 'archivo d.img' antes y después muestra una diferencia, así que tal vez sea ahí donde se rompe, aunque puedo montarlo una y otra vez y fdiskmuestra los mismos datos antes y después:

Antes d.img: DOS/MBR boot sector; partition 1 : ID=0x83, active, start-CHS (0x0,32,33), end-CHS (0x275,145,28), startsector 2048, 92364800 sectors
después:d.img: DOS/MBR boot sector

No tengo idea de por qué no se ve la partición válida.

Pregunta original:

Contexto:
Cloné mi sistema operativo actual (Ubuntu10.04) desde una única partición en un SSD desmontado.

dd if=/dev/sdc1 conv=sync,noerror bs=100M of=/data/system.img

Convertí la imagen sin formato a qcow2 en mi nuevo sistema U18.04 (ambas imágenes residen en una partición de datos ext4 separada del sistema operativo):

qemu-img convert -f raw -O qcow2 system.img system.qcow2

Obviamente, esto no se inicia (qemu-kvm dice geom erroral intentar iniciar).

No quiero copiar todo el disco porque es demasiado grande (muy lento e inútil para mi propósito).
Sin embargo, me resultó obvio que este método no logra copiar sectores esenciales del disco, entre ellos el MBR con el arranque GRUB.

Así que también copié los primeros 512 bytes en un archivo separado:

dd if=/dev/sdc of=/data/sdc-512B.img bs=512 count=1 conv=sync,noerror
cat sdc-512B.img system.img > system2.img
qemu-img convert -f raw -O qcow2 system2.img system2.qcow2

Ahora parece que el sistema va a iniciarse, pero se congela para siempre durante el arranque. Dice Booting from hard disk...pero cuelga ahí.


Versiones de software:

> qemu-system-x86_64 --version
QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.14)
> uname -a
Linux <hostname> 4.18.0-18-generic #19~18.04.1-Ubuntu SMP Fri Apr 5 10:22:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
> lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic

Problema:

Esta imagen no arranca bajo kvm:

qemu-system-x86_64-spice -hda system2.qcow2 -m 4096

o

qemu-system-x86_64 -hda system2.qcow2 -m 4096

o

qemu-system-x86_64 -hda system2.qcow2 -m 4096 -no-acpi

El resultado es similar: la ventana de qemu se bloquea durante el proceso de arranque con una CPU funcionando al 90-100% hasta que la termino.

¿Qué estoy haciendo mal y qué guía debo leer para que esto funcione sin tener que copiar todo el disco?

Respuesta1

/dev/sdc1 : start=       63, size= 92164842, Id=83
/dev/sdc2 : start=        0, size=        0, Id= 0
/dev/sdc3 : start=        0, size=        0, Id= 0
/dev/sdc4 : start= 92164905, size=884603160, Id= 5
/dev/sdc5 : start= 92164968, size= 33559722, Id=82
/dev/sdc6 : start=125724753, size=851043312, Id=83

Prueba esto:

$ dd if=/dev/null of=disk.img seek=$((125724753 + 851043312))
    # create a big sparse file, the same size as /dev/sdc

# dd if=/dev/sdc of=disk.img conv=notrunc count=$((63 + 92164842))
    # copy through the mbr + gap + 1st partition into place

# sfdisk -d /dev/sdc | sfdisk disk.img
    # replicate the complete partitioning of /dev/sdc onto disk.img

$ qemu img convert -O qcow2 disk.img disk.qcow2
    # convert the raw image to qcow2

Los comandos con la #necesidad inmediatasolo lecturaacceso a su disco (es decir, debe ejecutarlos como root). Sólo deberían escribir en el disk.imgarchivo disperso, pero será mejor que lo compruebes dos veces ;-)

Es posible que la imagen resultante no se pueda iniciar directamente si grub u otro gestor de arranque mantuvo su segunda o tercera etapa en una partición que no copió (sdc5 o sdc6).

Deberíanocorrer grub-install. Si desea comprobar si la partición funcionó bien, puede hacer (antes de eliminar disk.img):

# kpartx -l disk.img

# kpartx -a disk.img  # even try to attach ...
# mount /dev/mapper/loop0p1 /mnt/tmp  # and mount it

información relacionada