
私は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
--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 は Syslinux 経由で Arch にブートパラメータ を渡しますarchisolabel=MULTIBOOT
。現在 にはsda
ラベルが付いていませんがMULTIBOOT
、Arch は起動します。いずれにしても、スクリプトに次のコードを追加してより堅牢にすることができます。
mlabel -s -i /dev/sda1 ::MULTIBOOT
さらなる調査
さらに調査を進めると、移植不可能なのは YUMI か Syslinux MBR かがわかります。