Ручное клонирование дистрибутива Live USB Arch на виртуальный диск VMware

Ручное клонирование дистрибутива Live USB Arch на виртуальный диск VMware

Я установил Arch Linux на флешку сюми, основанный на syslinux. Я хотел бы протестировать дистрибутив USB в VMware. Чтобы ускорить процесс, я хотел бы клонировать UFD как виртуальный диск VMware (vmdk).

Это может быть просто. Я подключаю к виртуальной машине физический диск UFD, виртуальный диск vmdk и Arch ISO. Загрузившись с последнего, я могу клонировать.

Моя проблема в том, что USB-накопитель очень большой, и я хотел бы скопировать/клонировать только фактически используемые сектора USB-накопителя.

Я не знаю, есть ли специальные инструменты для клонирования только используемых секторов. Моя идея — вручную отформатировать диск vmdk, а затем скопировать файлы UFD.

Дано следующее отображение диска:

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

Я дал следующие команды:

# 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

После них fdisk -lдает:

Диск /dev/sda: 858 МБ, 858783744 байт, 1677312 секторов Единицы = сектора по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер ввода-вывода (минимальный/оптимальный): 512 байт / 512 байт Тип метки диска: dos Идентификатор диска: 0xc3072e18

Устройство Загрузка Начало Конец Блоки Идентификатор Система /dev/sda1 * 2048 1677311 837632 c W95 FAT32 (LBA)

Диск /dev/sdb: 4048 МБ, 4048551936 байт, 7907328 секторов Единицы = сектора по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер ввода-вывода (минимальный/оптимальный): 512 байт / 512 байт Тип метки диска: dos Идентификатор диска: 0xc3072e18

Устройство Загрузка Начало Конец Блоки Идентификатор Система /dev/sdb1 * 2976 7907327 3952176 c W95 FAT32 (LBA)

Диск /dev/mapper/arch_root-image: 1563 МБ, 1563426816 байт, 3053568 секторов Единицы = сектора по 1 * 512 = 512 байт Размер сектора (логический/физический): 512 байт / 512 байт Размер ввода-вывода (минимальный/оптимальный): 512 байт / 512 байт

К сожалению, когда я выключаю виртуальную машину, отсоединяю USB-флеш-накопитель и ISO-образ и перезапускаю машину, VMware сообщает:

This is not a bootable disk... 

Вы можете помочь мне?

решение1

Я думаю, вы можете использовать один из методов, обсуждаемых в этом выпуске вопросов и ответов U&L под названием:Как можно обнулить файлы внутри файла образа VMware, чтобы освободить их пространство?чтобы предварительно обнулить все неиспользуемое пространство в изображении, чтобы его можно было восстановить, а затем уменьшить размер изображения.

решение2

Используйте tar. Если вы tarballите свой корневой каталог, он скопирует только используемые файлы, а не всю систему. В новой системе просто замените корневой каталог и переустановите grub.

$ cd /
$ mkdir backups

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

Затем извлеките его в новую систему (tar -xvpf /fullbackup.tar) и переустановите grub в MBR.

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

решение3

Это частичный, но, на мой взгляд, очень интересный подход/решение.

Вместо того чтобы копировать Arch ISO на USB-накопитель через YUMI и после этого копировать USB-накопитель на виртуальный диск, я могу скопировать Arch ISO прямо на виртуальный диск.

Я загружаю VM с помощью Arch ISO. Чтобы скопировать ISO на виртуальный диск, предположенный здесь sda, у меня есть две возможности. Первая — форматирование sdaFat32 (как 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

Вторая, возможно более удобная возможность — форматирование 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

Чтобы избежать набора текста, можно добавить к виртуальной машине второй привод CD/DVD и упаковать эти скрипты в ISO-образ.

Пользователи Windows, возможно, будут рады узнать, что бесплатный проигрыватель VMWare уже поставляется с mkisofsв своей установочной директории. Чтобы создать ISO-образ файлов в директории archextra:

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

решение4

Проблема

Загрузчик YUMI UFD (Syslinux), по-видимому, имеет жестко запрограммированную информацию, поэтому его невозможно скопировать на виртуальный диск MBR с помощью:

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

Решение

Переустановите Syslinux прямо на виртуальный диск MBR с помощью:

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

--directoryэто каталог, где syslinux.cfgнаходятся и другие файлы конфигурации Syslinux. Простым осмотром YUMI UFD можно понять, что это multiboot.

Сценарий решения

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

Примечание: YUMI передает Arch (через Syslinux) параметр загрузки archisolabel=MULTIBOOT. В настоящее время, несмотря на то, sdaчто не помечено MULTIBOOT, Arch загрузится. В любом случае, вы можете сделать скрипт более надежным, добавив:

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

Дальнейшее расследование

Дальнейшее исследование покажет, является ли MBR YUMI или Syslinux непереносимым.

Связанный контент