
我在筆式驅動器上安裝了 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 是不可移植的。