Clonar manualmente una distribución Live USB Arch en un disco virtual VMware

Clonar manualmente una distribución Live USB Arch en un disco virtual VMware

Instalé Arch Linux en un pendrive conyumi, basado en syslinux. Me gustaría probar la distribución USB en VMware. Para acelerar las cosas, me gustaría clonar el UFD como un disco virtual VMware (vmdk).

Esto puede ser sencillo. Adjunto a la máquina virtual la unidad física UFD, el disco virtual vmdk y el Arch ISO. Arrancando desde este último, puedo clonar.

Mi problema es que la UFD es muy grande y me gustaría copiar/clonar sólo los sectores reales utilizados en la UFD.

No sé si existen herramientas específicas para clonar solo sectores usados. Mi idea es formatear manualmente el disco vmdk y luego copiar los archivos UFD.

Dada la siguiente asignación de disco:

Virtual vmdk disk -> sda
Physical UFD disk -> sdb

Emití estos comandos:

# Format vmdk disk as FAT32
(echo o; echo n; echo p; echo 1; echo ; echo ; echo a; echo t; echo c; echo w) | fdisk /dev/sda
mkdosfs -F 32 /dev/sda1

#Copy UFD MBR to vmdk MBR
dd if=/dev/sdb of=/dev/sda bs=446 count=1
partprobe /dev/sda

#Mount vmdk 
mkdir /vmdk
mount -t vfat /dev/sda1 /vmdk

#Mount UDF
mkdir /usb
mount -t vfat /dev/sdb1 /usb

#Copy files from UFD to vmdk
cp -a  /usb/* /vmdk

Tras ellos, fdisk -lda:

Disco /dev/sda: 858 MB, 858783744 bytes, 1677312 sectores Unidades = sectores de 1 * 512 = 512 bytes Tamaño del sector (lógico/físico): 512 bytes / 512 bytes Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes Tipo de etiqueta de disco: dos Identificador de disco: 0xc3072e18

Dispositivo Arranque Inicio Fin Bloques Id. Sistema /dev/sda1 * 2048 1677311 837632 c W95 FAT32 (LBA)

Disco /dev/sdb: 4048 MB, 4048551936 bytes, 7907328 sectores Unidades = sectores de 1 * 512 = 512 bytes Tamaño del sector (lógico/físico): 512 bytes / 512 bytes Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes Tipo de etiqueta de disco: dos Identificador de disco: 0xc3072e18

Dispositivo Arranque Inicio Fin Bloques Id. Sistema /dev/sdb1 * 2976 7907327 3952176 c W95 FAT32 (LBA)

Disco /dev/mapper/arch_root-image: 1563 MB, 1563426816 bytes, 3053568 sectores Unidades = sectores de 1 * 512 = 512 bytes Tamaño del sector (lógico/físico): 512 bytes / 512 bytes Tamaño de E/S (mínimo/óptimo) : 512 bytes / 512 bytes

Desafortunadamente, cuando apago la máquina virtual, desconecto el UFD y el ISO y reinicio la máquina, VMware dice:

This is not a bootable disk... 

¿Me puedes ayudar?

Respuesta1

Creo que puedes usar uno de los métodos discutidos en estas preguntas y respuestas de U&L titulado:¿Cómo puedo eliminar archivos dentro de un archivo de imagen de VMware para poder recuperar su espacio?para poner a cero cualquier espacio no utilizado en la imagen anterior, para que pueda recuperarse, antes para que se pueda reducir el tamaño de la imagen.

Respuesta2

Usa alquitrán. Si almacena su directorio raíz, solo copiará los archivos utilizados y no todo el sistema. En su nuevo sistema simplemente reemplace su directorio raíz y luego reinstale grub.

$ cd /
$ mkdir backups

$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups . 

Luego extráigalo en su nuevo sistema (tar -xvpf /fullbackup.tar) y reinstale grub en el MBR.

$ grub-install recheck /dev/sdX (where x is whatever your MBR is)
$ grub-update

Respuesta3

Este es un enfoque/solución parcial, pero creo que muy interesante.

En lugar de copiar Arch ISO a un UFD a través de YUMI y después de copiar la unidad USB a un disco virtual, puedo copiar Arch ISO directamente al disco virtual.

Arranco la VM con Arch ISO. Para copiar la ISO al disco virtual, asumida aquí sda, tengo dos posibilidades. El primero es formatear sdaFat32 (como el YUMI UFD):

#!/bin/sh -xv


# Partition and Format fat32 first VM disk
if (mountpoint -q /vdk); then umount /vdk; fi
echo "1,,c,*" | sfdisk /dev/sda
mkdosfs -F 32 /dev/sda1 

# Mount v-disk 
mkdir -p /vdk
mount -t vfat /dev/sda1 /vdk 

#Copy Arch ISO files in `arch' dir to v-disk
cp -a /run/archiso/bootmnt/arch /vdk

#Install Syslinux 
syslinux --directory /arch/boot/syslinux/ --install /dev/sda1

#Edit config files 
cd  /vdk/arch/boot/syslinux
sed -i "s|label=ARCH_.*|device=/dev/disk/by-uuid/$(blkid -o value -s UUID /dev/sda1)|" archiso_sys{32,64}.cfg

La segunda posibilidad, quizás más conveniente, es formatear Ext3:

#!/bin/sh -xv

# Partition and Format Ext3 first VM disk
if (mountpoint -q /vdk); then umount /vdk; fi
echo "1,,L,*" | sfdisk /dev/sda
mkfs.ext3 /dev/sda1

# Mount v-disk 
mkdir -p /vdk
mount /dev/sda1 /vdk

#Copy Arch ISO files in `arch' dir to v-disk
cp -a /run/archiso/bootmnt/arch /vdk

#Install Syslinux 
cd  /vdk/arch/boot/syslinux
extlinux --install . 
dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/mbr.bin of=/dev/sda

#Edit config files 
sed -i "s|label=ARCH_.*|device=/dev/disk/by-uuid/$(blkid -o value -s UUID /dev/sda1)|" archiso_sys{32,64}.cfg

Para evitar escribir, se puede agregar una unidad de CD/DVD secundaria a la máquina virtual y empaquetar estos scripts en una ISO.

A los usuarios de Windows les complacerá saber que el reproductor VMWare gratuito ya viene con un archivo mkisofsen su directorio de instalación. Para hacer una ISO de los archivos en el directorio archextra:

# mkisofs -joliet-long  -o archextra.iso archextra

Respuesta4

El problema

El cargador de arranque YUMI UFD (Syslinux) parece tener información codificada de modo que no se puede copiar al disco virtual MBR con:

dd if=/dev/sdb of=/dev/sda bs=446 count=1

La solución

Reinstale Syslinux directamente en el disco virtual MBR con:

syslinux --directory /multiboot --install /dev/sda1

--directoryes el directorio donde syslinux.cfgse encuentran los otros archivos de configuración de Syslinux. Con una simple inspección del YUMI UFD se comprende que lo es multiboot.

La solución escrita

#!/bin/sh -xv

# Partition and Format fat32 first VM disk
if (mountpoint -q /vdk); then umount /vdk; fi
echo "1,,c,*" | sfdisk /dev/sda
mkdosfs -F 32 /dev/sda1 

# Mount v-disk 
mkdir -p /vdk
mount -t vfat /dev/sda1 /vdk 

# Mount usb-disk 
mkdir -p /usb
if (mountpoint -q /usb); then umount /usb; fi
mount -t vfat /dev/sdb1 /usb

#Copy files from UFD to v-disk 
cp -a  /usb/* /vdk

#Install Syslinux relative to YUMI config file directory
syslinux --directory /multiboot --install /dev/sda1

Nota YUMI pasa a Arch (a través de Syslinux) el parámetro de arranque archisolabel=MULTIBOOT. Actualmente, a pesar de que sdano está etiquetado MULTIBOOT, Arch arrancará. De todos modos, es posible que desees hacer que el script sea más robusto agregando:

mlabel -s -i /dev/sda1 ::MULTIBOOT

Investigación exahustiva

Una investigación más profunda mostraría si YUMI o Syslinux MBR no son portátiles.

información relacionada