Clonando manualmente uma distribuição Live USB Arch em um disco virtual VMware

Clonando manualmente uma distribuição Live USB Arch em um disco virtual VMware

Instalei o Arch Linux em um pen drive comYumi, baseado em syslinux. Gostaria de testar a distribuição USB no VMware. Para agilizar as coisas, gostaria de clonar o UFD como um disco virtual VMware (vmdk).

Isso pode ser simples. Eu anexei à máquina virtual o drive UFD físico, o disco virtual vmdk e o Arch ISO. Inicializando a partir deste último, posso clonar.

Meu problema é que o UFD é muito grande e eu gostaria de copiar/clonar apenas os setores reais usados ​​pelo UFD.

Não sei se existem ferramentas específicas para clonar apenas 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 -ldá:

Disco /dev/sda: 858 MB, 858783744 bytes, 1677312 setores Unidades = setores de 1 * 512 = 512 bytes Tamanho do setor (lógico/físico): 512 bytes/512 bytes Tamanho de E/S (mínimo/ótimo): 512 bytes/ 512 bytes Tipo de rótulo de disco: dos Identificador de disco: 0xc3072e18

Sistema de identificação de blocos finais de inicialização do dispositivo /dev/sda1 * 2048 1677311 837632 c W95 FAT32 (LBA)

Disco /dev/sdb: 4048 MB, 4048551936 bytes, 7907328 setores Unidades = setores de 1 * 512 = 512 bytes Tamanho do setor (lógico/físico): 512 bytes / 512 bytes Tamanho de E/S (mínimo/ótimo): 512 bytes / 512 bytes Tipo de rótulo de disco: dos Identificador de disco: 0xc3072e18

Sistema de identificação de blocos finais de inicialização do dispositivo /dev/sdb1 * 2976 7907327 3952176 c W95 FAT32 (LBA)

Disco /dev/mapper/arch_root-image: 1563 MB, 1563426816 bytes, 3053568 setores Unidades = setores de 1 * 512 = 512 bytes Tamanho do setor (lógico/físico): 512 bytes/512 bytes Tamanho de E/S (mínimo/ótimo) : 512 bytes/512 bytes

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

This is not a bootable disk... 

Pode me ajudar?

Responder1

Acho que você pode usar um dos métodos discutidos nestas perguntas e respostas sobre U&L intituladas:Como posso zerar arquivos dentro de um arquivo de imagem 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.

Responder2

Use alcatrão. Se você compactar seu diretório raiz, ele copiará apenas os arquivos usados ​​e não todo o sistema. No seu novo sistema, basta substituir o 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

Responder3

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

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

Eu inicializo a VM com o Arch ISO. Para copiar o ISO para o disco virtual, aqui assumido sda, tenho duas possibilidades. A primeira é a formatação sdaFat32 (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, é formatar 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 digitação, pode-se adicionar uma unidade secundária de CD/DVD à máquina virtual e compactar esses scripts em um ISO.

Os usuários do Windows podem ficar satisfeitos em saber que o reprodutor VMWare gratuito já vem com um arquivo mkisofsem seu diretório de instalação. Para fazer um ISO dos arquivos no diretório archextra:

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

Responder4

O problema

O carregador de inicialização YUMI UFD (Syslinux) parece ter informações codificadas para que não possam ser copiadas para o disco virtual MBR com:

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

A solução

Reinstale o Syslinux diretamente no disco virtual MBR com:

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

--directoryé o diretório onde syslinux.cfgos outros arquivos de configuração do Syslinux estão localizados. Pela simples inspeção do YUMI UFD entende-se que sim 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

Nota YUMI passa para Arch (via Syslinux) o parâmetro de inicialização archisolabel=MULTIBOOT. Atualmente, apesar de sdanão estar rotulado MULTIBOOT, o Arch será inicializado. De qualquer forma, você pode querer tornar o script mais robusto, anexando:

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

Investigação aprofundada

Uma investigação mais aprofundada mostraria se o YUMI ou o Syslinux MBR não são portáteis.

informação relacionada