手动将 Live USB Arch 发行版克隆到 VMware 虚拟磁盘

手动将 Live USB Arch 发行版克隆到 VMware 虚拟磁盘

我在笔式驱动器上安装了 Arch Linux由美,基于syslinux。我想在VMware 中测试USB 发行版。为了加快速度,我想将 UFD 克隆为 VMware 虚拟磁盘 (vmdk)。

这可以很简单。我将物理 UFD 驱动器、vmdk 虚拟磁盘和 Arch ISO 连接到虚拟机。从后者引导,我可以克隆。

我的问题是 UFD 非常大,我只想复制/克隆实际 UFD 使用的扇区。

我不知道是否有专门的工具可以仅克隆使用过的扇区。我的想法是手动格式化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 MB,858783744 字节,1677312 个扇区 单位 = 1 * 512 = 512 字节的扇区 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xc3072e18

设备引导开始结束块 ID 系统 /dev/sda1 * 2048 1677311 837632 c W95 FAT32 (LBA)

磁盘 /dev/sdb:4048 MB,4048551936 字节,7907328 个扇区 单位 = 1 * 512 = 512 字节的扇区 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xc3072e18

设备引导开始结束块 ID 系统 /dev/sdb1 * 2976 7907327 3952176 c W95 FAT32 (LBA)

磁盘 /dev/mapper/arch_root-image:1563 MB,1563426816 字节,3053568 个扇区单位 = 1 * 512 = 512 字节的扇区扇区大小(逻辑/物理):512 字节/512 字节 I/O 大小(最小/最佳) : 512 字节 / 512 字节

不幸的是,当我关闭虚拟机、分离 UFD 和 ISO,然后重新启动计算机时,VMware 说:

This is not a bootable disk... 

你能帮助我吗?

答案1

我认为您可以使用 U&L 问答中讨论的方法之一,标题为:如何将 VMware 映像文件内的文件清零以便回收其空间?事先将图像中任何未使用的空间清零,以便可以回收它,从而减小图像大小。

答案2

使用焦油。如果您压缩根目录,它只会复制使用的文件,而不是整个系统。在您的新系统上,只需替换根目录,然后重新安装 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 直接复制到虚拟磁盘,而不是通过 YUMI 将 Arch ISO 复制到 UFD,然后将 USB 驱动器复制到虚拟磁盘。

我使用 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

--directorysyslinux.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

进一步的调查

进一步调查将显示是否是 YUMI 或 Syslinux MBR 是不可移植的。

相关内容