Clonando manualmente uma distro Live USB Arch em um disco virtual VMware

2

Eu instalei o Arch Linux em um pen drive com yumi , baseado no syslinux. Eu gostaria de testar a distro USB no VMware. Para acelerar as coisas, eu gostaria de clonar o UFD como um disco virtual VMware (vmdk).

Isso pode ser simples. Eu conecto à máquina virtual a unidade física UFD, o disco virtual vmdk e o arco ISO. Bootstrapping do último, eu posso clonar.

Meu problema é que o UFD é muito grande e eu gostaria de copiar / clonar somente os setores reais do UFD.

Não sei se existem ferramentas específicas para clonar apenas os setores usados. Minha ideia é formatar manualmente o disco vmdk e depois copiar os arquivos UFD.

Dado o seguinte mapeamento de disco:

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

Eu emiti estes 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

Depois deles, fdisk -l dá:

Disk /dev/sda: 858 MB, 858783744 bytes, 1677312 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xc3072e18

Device Boot Start End Blocks Id System /dev/sda1 * 2048 1677311 837632 c W95 FAT32 (LBA)

Disk /dev/sdb: 4048 MB, 4048551936 bytes, 7907328 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xc3072e18

Device Boot Start End Blocks Id System /dev/sdb1 * 2976 7907327 3952176 c W95 FAT32 (LBA)

Disk /dev/mapper/arch_root-image: 1563 MB, 1563426816 bytes, 3053568 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes

Infelizmente, quando encerro a VM, desanexo o UFD e o ISO e reinicio a máquina, a VMware diz:

This is not a bootable disk... 

Você pode me ajudar?

    
por antonio 12.10.2013 / 21:33

4 respostas

0

O problema

O carregador de boot do YUMI UFD (Syslinux) parece ter informações codificadas para que ele não possa ser copiado para o MBR do disco virtual com:

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

A solução

Reinstale o Syslinux diretamente no MBR do disco virtual com:

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

--directory é o diretório onde syslinux.cfg e os outros arquivos de configuração do Syslinux estão localizados. Por simples inspecção do YUMI UFD entende-se que é multiboot .

A solução com script

#!/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

Observação YUMI passa para o Arch (via Syslinux) o parâmetro de inicialização archisolabel=MULTIBOOT . Atualmente, apesar de sda não ser rotulado como MULTIBOOT , o Arch será inicializado. De qualquer forma, você pode querer tornar o script mais robusto ao acrescentar:

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

Mais Investigação

Outras investigações mostram se o YUMI ou o Syslinux MBR não são portáteis.

    
por 25.10.2013 / 19:10
0

Acredito que você pode usar um dos métodos discutidos neste livro de perguntas e respostas intitulado: Como posso zerar arquivos dentro de um arquivo de imagem do VMware para que seu espaço possa ser recuperado? para zerar qualquer espaço não utilizado na imagem antes, para que possa ser recuperado, antes, para que o tamanho da imagem possa ser reduzido.

    
por 12.10.2013 / 21:52
0

Use tar. Se você tar tarar seu diretório raiz, copiará apenas os arquivos usados e não o sistema inteiro. Em seu novo sistema, basta substituir seu diretório raiz e reinstalar o grub.

$ cd /
$ mkdir backups

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

Em seguida, extraia-o em seu novo sistema (tar -xvpf /fullbackup.tar) e reinstale o grub no MBR.

$ grub-install recheck /dev/sdX (where x is whatever your MBR is)
$ grub-update
    
por 19.10.2013 / 08:22
0

Esta é uma abordagem / solução parcial, mas muito interessante.

Em vez de copiar o Arch ISO para um UFD via YUMI e depois de copiar o drive USB para um disco virtual, posso copiar o Arch ISO direto para o disco virtual.

Eu inicializo a VM com o ISO do Arch. Para copiar o ISO para o disco virtual, aqui assumido sda , tenho duas possibilidades. A primeira é a formatação de sda Fat32 (como o 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

A segunda possibilidade, talvez mais conveniente, é a formatação de 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 a digitação, é possível adicionar uma unidade de CD / DVD secundária à máquina virtual e empacotá-los em um ISO.

Os usuários do Windows podem ficar satisfeitos em saber que o player VMWare gratuito já vem com um mkisofs em seu diretório de instalação. Para tornar um ISO dos arquivos na pasta archextra :

# mkisofs -joliet-long  -o archextra.iso archextra
    
por 24.10.2013 / 21:50