
Я установил 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
, у меня есть две возможности. Первая — форматирование sda
Fat32 (как 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 непереносимым.