
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 -l
dá:
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 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, é 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 mkisofs
em 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.cfg
os 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 sda
nã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.