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 バイト

残念ながら、VM をシャットダウンし、UFD と ISO を切り離してマシンを再起動すると、VMware は次のように表示します。

This is not a bootable disk... 

手伝ってもらえますか?

答え1

次の U&L Q&A で説明されている方法のいずれかを使用できると思います。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

これは部分的ですが、非常に興味深いアプローチ/ソリューションだと思います。

YUMI 経由で Arch ISO を UFD にコピーし、USB ドライブを仮想ディスクにコピーした後で、Arch ISO を仮想ディスクに直接コピーすることができます。

Arch ISO を使用して VM をブートストラップします。ここで想定されている仮想ディスクに ISO をコピーするには、2 つの方法があります。1 つ目はFat32 (YUMI UFD など)sdaをフォーマットすることです。sda

#!/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

2 番目、おそらくより便利な方法は、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 は Syslinux 経由で Arch にブートパラメータ を渡しますarchisolabel=MULTIBOOT。現在 にはsdaラベルが付いていませんがMULTIBOOT、Arch は起動します。いずれにしても、スクリプトに次のコードを追加してより堅牢にすることができます。

mlabel -s -i /dev/sda1 ::MULTIBOOT

さらなる調査

さらに調査を進めると、移植不可能なのは YUMI か Syslinux MBR かがわかります。

関連情報