我在笔式驱动器上安装了 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
,我有两种可能性。第一个是格式化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
进一步的调查
进一步调查将显示是否是 YUMI 或 Syslinux MBR 是不可移植的。