
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 sda
Fat32 (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 mkisofs
in 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
--directory
ist das Verzeichnis, in dem syslinux.cfg
sich 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 sda
es 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.