ペンドライブに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を仮想ディスクにコピーするにはsda
2つの可能性があります。 1つ目は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
おそらくより便利な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
--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
。現在、Archはsda
タグ付けされていないにもかかわらず実行されますMULTIBOOT
。とにかくスクリプトをより強力にしたいかもしれません。
mlabel -s -i /dev/sda1 ::MULTIBOOT
さらなる調査
さらなる調査により、YUMIまたはSyslinux MBRが移植可能でないかどうかが明らかになります。