Intelligente Lösungen
in neuer Dimension

VirtualBox: Von lokaler Datei starten

Aktuell arbeite ich an einer automatischen Installation von Ubuntu. Es ist sehr mühsam, dies mit physischen Rechnern oder USB-Sticks zu testen.

Ich versuche, das mit Virtualbox und lokalen Dateien nachzustellen.

Getestet unter Ubuntu-20.04 mit Virtualbox-6.1.32.

Vorbemerkungen und Voraussetzungen

Getestet habe ich den Ablauf auf einem Rechner mit diesen Versionen:

  • Ubuntu 20.04 (focal)
  • VirtualBox 6.1.32 ist installiert mit sudo apt install virtualbox

Festplattendatei anlegen

Bei mir bekommt die Festplattendatei den Namen “uhel.img” und hat eine Größe von 100GB!

1
2
$ NAME=uhel
$ dd if=/dev/zero "of=${NAME}.img" bs=1024k count=0 seek=100000

Ventoy einrichten auf Festplattendatei

Ich richte Ventoy auf der Festplattendatei so ein, dass ein Bereich von grob 90GB für andere Zwecke frei bleibt. Die Größe dieses Bereichs legt man mit der Option “-r 90000” fest! Dabei: 90000 = 90MB ~= 90GB.

1
2
3
4
5
6
7
8
$ sudo losetup --find --show "${NAME}.img"
/dev/loop9
$ LOOP=loop9
$ sudo .../Ventoy2Disk.sh -i -r 90000 "/dev/${LOOP}"
$ sudo losetup --detach "/dev/${LOOP}"
$ sudo losetup -l|grep "${LOOP}[^0-9]"
$ for d in "/dev/mapper/${LOOP}p"*; do test -e "${d}" && sudo dmsetup remove "${d}"; done
$ sudo losetup -l|grep "${LOOP}[^0-9]"

Wichtig: Nach Ausführung des letzten Kommandos muß die Ausgabe leer bleiben! Wenn dies nicht der Fall ist, dann ist beim Freigeben der Festplattendatei ein Fehler aufgetreten! Diesen unbedingt korrigieren, bevor Du weiterarbeitest!

Reservierten Bereich initialisieren

Im nachfolgenden Ablauf wird der reservierte Bereich als reguläre EXFAT-Plattenregion initialisiert. Du kannst ihn auch verschlüsseln mit “cryptsetup” etc!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$ NAME=uhel

$ fdisk "${NAME}.img"
...
Befehl (m für Hilfe): p
Festplatte uli.img: 97,67 GiB, 104857600000 Bytes, 204800000 Sektoren
...
Gerät      Boot   Anfang     Ende Sektoren Größe Kn Typ
uhel.img1           2048 20482047 20480000  9,8G  7 HPFS/NTFS/exFAT
uhel.img2       20482048 20547583    65536   32M ef EFI (FAT-12/16/32)

Befehl (m für Hilfe): n
Partitionstyp
   p   Primär (2 primär, 0 erweitert, 2 frei)
   e   Erweitert (Container für logische Partitionen)
Wählen (Vorgabe p): p
Partitionsnummer (3,4, Vorgabe 3): 3
Erster Sektor (20547584-204799999, Vorgabe 20547584): 
Letzter Sektor, +/-Sektoren oder +/-Größe{K,M,G,T,P} (20547584-204799999, Vorgabe 204799999): 

Eine neue Partition 3 des Typs „Linux“ und der Größe 87,9 GiB wurde erstellt.

Befehl (m für Hilfe): t
Partitionsnummer (1-3, Vorgabe 3): 3
Hexadezimalcode (geben Sie L ein, um alle Codes aufzulisten): 7

Partitionstyp von „Linux“ nach „HPFS/NTFS/exFAT“ geändert.

Befehl (m für Hilfe): p
Festplatte uli.img: 97,67 GiB, 104857600000 Bytes, 204800000 Sektoren
...
Gerät      Boot   Anfang      Ende  Sektoren Größe Kn Typ
uhel.img1           2048  20482047  20480000  9,8G  7 HPFS/NTFS/exFAT
uhel.img2       20482048  20547583     65536   32M ef EFI (FAT-12/16/32)
uhel.img3       20547584 204799999 184252416 87,9G  7 HPFS/NTFS/exFAT

Befehl (m für Hilfe): wq
Die Partitionstabelle wurde verändert.
Festplatten werden synchronisiert.

$ sudo losetup --find -P --show "${NAME}.img"
/dev/loop18

$ LOOP=loop18

$ sudo mkfs.exfat /dev/${LOOP}p3
mkexfatfs 1.3.0
Creating... done.
Flushing... done.
File system created successfully.

$ sudo losetup --detach "/dev/${LOOP}"
$ sudo losetup -l|grep "${LOOP}[^0-9]"
$ for d in "/dev/mapper/${LOOP}p"*; do test -e "${d}" && sudo dmsetup remove "${d}"; done
$ sudo losetup -l|grep "${LOOP}[^0-9]"

Wichtig: Nach Ausführung des letzten Kommandos muß die Ausgabe leer bleiben! Wenn dies nicht der Fall ist, dann ist beim Freigeben der Festplattendatei ein Fehler aufgetreten! Diesen unbedingt korrigieren, bevor Du weiterarbeitest!

Festplattendatei mit Daten befüllen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ NAME=uhel
$ LOOP=loop9

$ sudo losetup -l|grep "${LOOP}[^0-9]"
Es darf keine Ausgfabe erfolgen!

$ sudo losetup -l|grep "${NAME}"
Es darf keine Ausgfabe erfolgen!

$ sudo losetup --find -P --show "${NAME}.img"
/dev/loop9
$ LOOP=loop9
$ ls -l "/dev/${LOOP}"*
brw-rw---- 1 root disk   7, 9 Apr 13 07:35 /dev/loop9
brw-rw---- 1 root disk 259, 5 Apr 13 07:35 /dev/loop9p1
brw-rw---- 1 root disk 259, 6 Apr 13 07:35 /dev/loop9p2
$ sudo mount /dev/${LOOP}p1 /mnt

$ cp .../ubuntu-22.04-beta-live-server-amd64.iso /mnt

$ sudo umount /mnt

$ sudo losetup --detach "/dev/${LOOP}"
$ sudo losetup -l|grep "${LOOP}[^0-9]"
$ for d in "/dev/mapper/${LOOP}p"*; do test -e "${d}" && sudo dmsetup remove "${d}"; done
$ sudo losetup -l|grep "${LOOP}[^0-9]"

Wichtig: Nach Ausführung des letzten Kommandos muß die Ausgabe leer bleiben! Wenn dies nicht der Fall ist, dann ist beim Freigeben der Festplattendatei ein Fehler aufgetreten! Diesen unbedingt korrigieren, bevor Du weiterarbeitest!

Festplattendatei als Festplatte für VirtualBox

vboxmanage internalcommands createrawvmdk -filename ~/"${NAME}.vmdk" -rawdisk "$(pwd)/${NAME}.img"

VM konfigurieren

  • VirtualBox starten
  • VM auswählen
  • System – Erweitert – EFI aktivieren: Ja – OK
  • Massenspeicher – Controller: IDE – Festplatte hinzufügen – uhel.vmdk – OK

VM starten

  • GRUB-Menü wird angezeigt
  • UEFI Firmware Settings
  • Boot Manager
  • UEFI VBOX HARDDISK – oben rechts: Device Path …/Ata(Primary,Master)
  • Eingabe/Enter

Danach wird die VM vom USB-Medium gestartet!

Änderungen an der Festplattendatei

Die Festplattendatei sollte nicht “im laufenden Betrieb” geändert werden! Für Änderungen also:

  • VM stoppen
  • Virtuelles Medium löschen im Medien-Manager von Virtualbox
  • “uhel.vmdk” löschen

Wenn Du dies nicht befolgst, dann hast Du schnell einen inkonsistenten Zustand und Änderungen an der Festplattendatei bleiben innerhalb von Virtualbox unsichtbar!

Änderungen

  • 2022-04-18 – Reservierter Bereich, Tippfehler
  • 2022-04-13 – Erste Version