Layouten eines Disk-Images und Kopieren von Dateien hinein

Layouten eines Disk-Images und Kopieren von Dateien hinein

Bevor ich hier gefragt habe, habe ich erfolglos versucht, auf SU/SE und Google zu suchen.Das ist das Nächstliegende, was ich gefunden habe.

Im Wesentlichen versuche ich Folgendes zu tun:
- ein Disk-Image von etwa 128 MB zu erstellen;
- eine GPT zu erstellen;
- eine FAT32-Partition in den ersten 32 MB zu erstellen (ich nenne sie UEFI);
- eine FAT32-Partition in den verbleibenden Bytes zu erstellen (ich nenne sie SYSTEM);
- das folgende Unterverzeichnis in der UEFI-Partition zu erstellen: /EFI/BOOT/;
- eine Datei in das Unterverzeichnis zu kopieren;
- eine weitere Datei in die SYSTEM-Partition zu kopieren.


Das habe ich bisher getan:

dd wenn=/dev/zero von=disk.img bs=1M Anzahl=128

parted disk.img
(parted) mktable gpt
(parted) mkpart primär fat32 2048s 65535s
(parted) mkpart primär fat32 65536s 100%
(parted) align-check optimal 1
(parted) align-check optimal 2
(parted) Name 1 UEFI
(parted) Name 2 SYSTEM

Dies ist meine Ausgabe:

Datenträger disk.img: 134 MB  
Sektorgröße (logisch/physisch): 512B/512B  
Partitionstabelle: gpt  
Datenträger-Flags:  

Nummer Start Ende Größe Dateisystem Name Flags  
 1 1049kB 33,6MB 32,5MB UEFI msftdata
 2 33,6 MB 134 MB 101 MB SYSTEM msftdata



Alternativ können Sie auch zwei unterschiedliche Partitionen erstellen und diese später zusammenführen:

dd wenn=/dev/zero von=uefi.img bs=1M Anzahl=32
mformat -i uefi.img -v UEFI -f 1440 -c 1 ::
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT
dd wenn=/dev/zero von=system.img bs=1M Anzahl=100
mformat -i system.img -v UEFI -f 1440 -c 1 ::
mcopy -i system.img myawesomeOS ::



Bei der ersten Methode kann ich nicht herausfinden, warum die Spalte „Dateisystem“ leer ist (dort sollte fat32 stehen) und wie man Unterverzeichnisse erstellt und Dateien kopiert.
Bei der zweiten Methode kann ich kein richtiges FAT32-Dateisystem für die beiden Bilder erstellen. Wenn ich -F an mformat anhänge, erhalte ich

Zu wenige Cluster für diese FAT-Größe. Bitte wählen Sie eine 16-Bit-FAT-Version in Ihrer /etc/mtools.conf- oder .mtoolsrc-Datei.

Selbst wenn ich es schaffen würde, wüsste ich immer noch nicht, wie ich GPT einrichte und die beiden Bilder in einer einzigen Datei zusammenführe.

Wie kann ich das erreichen? Jede Hilfe oder jeder Hinweis ist willkommen.

Antwort1

Nachdem ich ein paar Stunden gekämpft hatte, konnte ich es selbst lösen. Ich werde die Lösung hier posten, nur für den Fall:

# Erstellt ein leeres Disk-Image von 256 MB, erstellt sein GPT und erstellt dann
# zwei Partitionen: die erste ist ca. 60MB groß, die zweite füllt
# die restlichen Bytes. Beide Partitionen sind ausgerichtet.
dd wenn=/dev/zero von=disk.img bs=1M Anzahl=256
geteilte Festplatte.img
mktable gpt
mkpart primär fat32 2048s 131071s
mkpart primär fat32 131072s 100%
Ausrichtungsprüfung optimal 1
Ausrichtungsprüfung optimal 2
Name 1 UEFI
Name 2 SYSTEM
aufhören

# Erstellt ein leeres Disk-Image von 33 MB.
dd wenn=/dev/zero von=uefi.img bs=1M Anzahl=33
# Formatiert das Disk-Image als FAT32
mkfs.vfat uefi.img -F 32
# Erstellt die angeforderten Unterverzeichnisse.
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
# Kopiert die Boot-Datei.
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT

# Erstellt ein leeres Disk-Image von 100 MB.
dd wenn=/dev/zero von=system.img bs=1M Anzahl=100
# Formatiert das Disk-Image als FAT32
mkfs.vfat system.img -F 32
# Kopiert die OS-Datei.
mcopy -i system.img SYSTEM.EFI ::

# Aktiviert vorsichtshalber das von kpartx angeforderte Kernelmodul.
sudo modprobe dm-mod
# Ordnet die beiden Partitionen in disk.img zu und mountet sie in /dev/mapper/loop0p1 und
# /dev/mapper/loop0p2
sudo kpartx -av disk.img
# Kopiert die UEFI-Partition in das Disk-Image.
sudo dd if=uefi.img of=/dev/mapper/loop0p1 bs=1M
# Kopiert die SYSTEM-Partition in das Disk-Image.
sudo dd if=system.img von=/dev/mapper/loop0p2 bs=1M
# Deinstalliert die beiden Partitionen
sudo kpartx -dv disk.img

verwandte Informationen