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: 858MB, 858783744 バイト, 1677312 セクタ単位 = 1 * 512 = 512 バイト セクタ セクタ サイズ(論理/物理): 512 バイト/512 バイト I/O サイズ(最小/最適): 51ディスクラベルタイプ:dosディスク識別子:0xc3072e18

デバイス起動開始エンドブロックID System / dev / sda1 * 2048 1677311 837632 c W95 FAT32(LBA)

ディスク /dev/sdb: 4048MB, 4048551936 バイト, 7907328 セクタ単位 = 1 * 512 = 512 バイト セクタ セクタ サイズ (論理/物理): 512 バイト/512 バイト I/O サイズ (最小/2 バイト): 最小ディスクラベルタイプ:dosディスク識別子:0xc3072e18

デバイスの起動開始および終了ブロックID system/dev/sdb1 * 2976 7907327 3952176 c W95 FAT32(LBA)

ディスク /dev/mapper/arch_root-image: 1563MB, 1563426816 バイト, 3053568 セクタ単位 = 1 * 512 = 512 バイト セクタ セクタ サイズ (論理/物理): 512 バイト / 最小 11/2 サイズバイト/ 512バイト

残念ながら、VMをシャットダウンし、UFDとISOを分離してシステムを再起動すると、VMwareは次のように言います。

This is not a bootable disk... 

助けてください?

答え1

U&L Q&Aで議論された方法の1つを使用できるようです。スペースを解放するために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

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

YUMIを使用してArch ISOをUFDにコピーし、USBドライブを仮想ディスクにコピーする代わりに、Arch ISOを仮想ディスクに直接コピーできます。

Arch ISOを使用して仮想マシンを起動します。ここで仮定すると、ISOを仮想ディスクにコピーするにはsda2つの可能性があります。 1つ目は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

おそらくより便利な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 Playerが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。現在、Archはsdaタグ付けされていないにもかかわらず実行されますMULTIBOOT。とにかくスクリプトをより強力にしたいかもしれません。

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

さらなる調査

さらなる調査により、YUMIまたはSyslinux MBRが移植可能でないかどうかが明らかになります。

関連情報