Layout de uma imagem de disco e copiando arquivos para ela

2

Antes de perguntar aqui, tentei pesquisar no SU / SE e no Google sem sucesso. Essa é a coisa mais próxima que eu consegui.

Basicamente, estou tentando fazer o seguinte: - criar uma imagem de disco de cerca de 128 MB; - criar um GPT;
- criar uma partição FAT32 nos primeiros 32MB (eu chamarei UEFI); - criar uma partição FAT32 nos bytes restantes (vou chamá-lo SYSTEM); - crie o seguinte subdiretório na partição UEFI: / EFI / BOOT /; - copiar um arquivo no subdiretório; - copia outro ficheiro na partição SYSTEM.


Isso foi o que eu fiz até agora:

dd if=/dev/zero of=disk.img bs=1M count=128

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

Esta é minha saída:

Disk disk.img: 134MB  
Sector size (logical/physical): 512B/512B  
Partition Table: gpt  
Disk Flags:  

Number  Start   End     Size    File system  Name    Flags  
 1      1049kB  33,6MB  32,5MB               UEFI    msftdata
 2      33,6MB  134MB   101MB                SYSTEM  msftdata



A maneira alternativa é criar duas partições diferentes e depois mesclá-las:

dd if=/dev/zero of=uefi.img bs=1M count=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 if=/dev/zero of=system.img bs=1M count=100
mformat -i system.img -v UEFI -f 1440 -c 1 ::
mcopy -i system.img myawesomeOS ::



No primeiro modo, não consigo descobrir por que a coluna "Sistema de arquivos" está vazia (deveria dizer fat32) e como criar subdiretórios e copiar arquivos.
No último caminho eu não sou capaz de criar um sistema de arquivos FAT32 adequado para as duas imagens, se eu acrescentar -F para a formatação eu recebo

Too few clusters for this fat size. Please choose a 16-bit fat in your /etc/mtools.conf or .mtoolsrc file

Se eu conseguisse, ainda não sei como configurar o GPT e mesclar as duas imagens em um único arquivo.

Como posso conseguir isso? Qualquer ajuda ou sugestão é apreciada.

    
por robschia 22.01.2015 / 17:32

1 resposta

3

Depois de lutar por algumas horas, resolvi sozinho. Vou postar a solução aqui, apenas no caso:

# Creates an empty disk image of 256MB, creates its GPT, and then it makes
# two partitions: the first one of approximatively 60MB, the second one fills
# the remaining bytes. Both partitions are aligned.
dd if=/dev/zero of=disk.img bs=1M count=256
parted disk.img
mktable gpt
mkpart primary fat32 2048s 131071s
mkpart primary fat32 131072s 100%
align-check optimal 1
align-check optimal 2
name 1 UEFI
name 2 SYSTEM
quit

# Creates an empty disk image of 33MB.
dd if=/dev/zero of=uefi.img bs=1M count=33
# Formats the disk image as FAT32
mkfs.vfat uefi.img -F 32
# Creates the requested subdirectories.
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
# Copies the boot file.
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT

# Creates an empty disk image of 100MB.
dd if=/dev/zero of=system.img bs=1M count=100
# Formats the disk image as FAT32
mkfs.vfat system.img -F 32
# Copies the OS file.
mcopy -i system.img SYSTEM.EFI ::

# Enables the kernel module requested by kpartx, just in case.
sudo modprobe dm-mod
# Maps and mounts the two partitions in disk.img to /dev/mapper/loop0p1 and
# /dev/mapper/loop0p2
sudo kpartx -av disk.img
# Copies the UEFI partion into the disk image.
sudo dd if=uefi.img of=/dev/mapper/loop0p1 bs=1M
# Copies the SYSTEM partion into the disk image.
sudo dd if=system.img of=/dev/mapper/loop0p2 bs=1M
# Unmounts the two partitions
sudo kpartx -dv disk.img
    
por 22.01.2015 / 22:57