手動將 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 是不可移植的。

相關內容