Manuelles Klonen einer Live USB Arch-Distribution auf eine virtuelle VMware-Festplatte

Manuelles Klonen einer Live USB Arch-Distribution auf eine virtuelle VMware-Festplatte

Ich habe Arch Linux auf einem USB-Stick installiert mitYumi, basierend auf Syslinux. Ich möchte die USB-Distribution in VMware testen. Um die Dinge zu beschleunigen, möchte ich das UFD als virtuelle VMware-Festplatte (vmdk) klonen.

Das kann ganz einfach sein. Ich schließe das physische UFD-Laufwerk, die virtuelle VMDK-Festplatte und das Arch ISO an die virtuelle Maschine an. Von letzterem aus kann ich dann das Booten starten und klonen.

Mein Problem besteht darin, dass das UFD sehr groß ist und ich nur die tatsächlich vom UFD verwendeten Sektoren kopieren/klonen möchte.

Ich weiß nicht, ob es spezielle Tools zum Klonen nur verwendeter Sektoren gibt. Meine Idee ist, die VMDK-Festplatte manuell zu formatieren und dann die UFD-Dateien zu kopieren.

Gegeben sei die folgende Datenträgerzuordnung:

Virtual vmdk disk -> sda
Physical UFD disk -> sdb

Ich habe diese Befehle ausgegeben:

# 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

Danach folgt fdisk -l:

Datenträger /dev/sda: 858 MB, 858783744 Bytes, 1677312 Sektoren Einheiten = Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes Datenträgerbezeichnungstyp: dos Datenträgerkennung: 0xc3072e18

Gerät Booten Start Ende Blöcke Id System /dev/sda1 * 2048 1677311 837632 c W95 FAT32 (LBA)

Datenträger /dev/sdb: 4048 MB, 4048551936 Bytes, 7907328 Sektoren Einheiten = Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes Datenträgerbezeichnungstyp: dos Datenträgerkennung: 0xc3072e18

Gerät Booten Start Ende Blöcke Id System /dev/sdb1 * 2976 7907327 3952176 c W95 FAT32 (LBA)

Datenträger /dev/mapper/arch_root-image: 1563 MB, 1563426816 Bytes, 3053568 Sektoren Einheiten = Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physisch): 512 Bytes / 512 Bytes I/O-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Wenn ich die VM herunterfahre, das UFD und das ISO trenne und die Maschine neu starte, sagt VMware leider:

This is not a bootable disk... 

Kannst du mir helfen?

Antwort1

Ich denke, Sie können eine der Methoden verwenden, die in diesem U&L-Q&A mit dem Titel:Wie kann ich Dateien in einer VMware-Image-Datei auf Null setzen, damit ihr Speicherplatz freigegeben werden kann?um allen ungenutzten Speicherplatz im Bild vorab auf Null zu setzen, damit er zurückgewonnen werden kann, vorab, damit die Bildgröße reduziert werden kann.

Antwort2

Verwenden Sie tar. Wenn Sie Ihr Stammverzeichnis in ein Tar-Archiv packen, werden nur die verwendeten Dateien kopiert und nicht das gesamte System. Ersetzen Sie auf Ihrem neuen System einfach Ihr Stammverzeichnis und installieren Sie Grub dann erneut.

$ cd /
$ mkdir backups

$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups . 

Extrahieren Sie es dann in Ihr neues System (tar -xvpf /fullbackup.tar) und installieren Sie Grub erneut im MBR.

$ grub-install recheck /dev/sdX (where x is whatever your MBR is)
$ grub-update

Antwort3

Dies ist ein teilweiser, aber meiner Meinung nach sehr interessanter Ansatz/Lösung.

Anstatt Arch ISO über YUMI auf ein UFD zu kopieren und das USB-Laufwerk anschließend auf eine virtuelle Festplatte zu kopieren, kann ich das Arch ISO direkt auf die virtuelle Festplatte kopieren.

Ich boote die VM mit dem Arch ISO. Um das ISO auf die hier angenommene virtuelle Festplatte zu kopieren sda, habe ich zwei Möglichkeiten. Die erste ist das Formatieren mit sdaFat32 (wie beim 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

Die zweite, vielleicht bequemere Möglichkeit ist die Formatierung von 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

Um das Eintippen zu vermeiden, kann man der virtuellen Maschine ein sekundäres CD/DVD-Laufwerk hinzufügen und diese Skripte in ein ISO packen.

Windows-Benutzer werden sich freuen zu hören, dass der kostenlose VMWare-Player bereits einen mkisofsin seinem Installationsverzeichnis hat. So erstellen Sie eine ISO der Dateien in das Verzeichnis archextra:

# mkisofs -joliet-long  -o archextra.iso archextra

Antwort4

Das Problem

Der YUMI UFD-Bootloader (Syslinux) scheint fest codierte Informationen zu haben, sodass diese nicht mit Folgendem auf den virtuellen Datenträger-MBR kopiert werden können:

dd if=/dev/sdb of=/dev/sda bs=446 count=1

Die Lösung

Installieren Sie Syslinux direkt auf dem virtuellen Datenträger-MBR neu mit:

syslinux --directory /multiboot --install /dev/sda1

--directoryist das Verzeichnis, in dem syslinux.cfgsich die anderen Syslinux-Konfigurationsdateien befinden. Durch einfache Überprüfung von YUMI UFD erkennt man, dass es sich um handelt multiboot.

Die geskriptete Lösung

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

Beachten Sie, dass YUMI den Boot-Parameter an Arch übergibt (über Syslinux) archisolabel=MULTIBOOT. Derzeit wird Arch booten, auch wenn sdaes nicht beschriftet ist MULTIBOOT. Sie können das Skript trotzdem robuster machen, indem Sie Folgendes anhängen:

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

Weitere Untersuchung

Weitere Untersuchungen würden zeigen, dass YUMI oder Syslinux MBR nicht portierbar sind.

verwandte Informationen