Layout de uma imagem de disco e cópia de arquivos nela

Layout de uma imagem de disco e cópia de arquivos nela

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

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


Isto é o que eu fiz até agora:

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

parted disk.img
(parted) mktable gpt
(parted) mkpart primário fat32 2048s 65535s
(parted) mkpart primário fat32 65536s 100%
(parted) alinhamento-verificação ideal 1
(parted) alinhamento-verificação ideal 2
(parted) nome 1 UEFI
(parted ) nome 2 SISTEMA

Esta é a minha saída:

Disco disk.img: 134 MB  
Tamanho do setor (lógico/físico): 512B/512B  
Tabela de partição: gpt  
Sinalizadores de disco:  

Número Início Fim Tamanho Sistema de arquivos Nome Sinalizadores  
 1 1049kB 33,6MB 32,5MB UEFI msftdata
 2 33,6 MB 134 MB 101 MB SISTEMA msftdata



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

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



Da primeira maneira, não consigo entender por que a coluna "Sistema de arquivos" está vazia (deveria dizer fat32) e como criar subdiretórios e copiar arquivos.
Desta última forma, não consigo criar um sistema de arquivos FAT32 adequado para as duas imagens. Se eu acrescentar -F ao mformat, obtenho

Poucos clusters para esse tamanho de gordura. Escolha um fat de 16 bits em seu arquivo /etc/mtools.conf ou .mtoolsrc

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

Como posso conseguir isso? Qualquer ajuda ou dica é apreciada.

Responder1

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

# Cria uma imagem de disco vazia de 256MB, cria seu GPT e então faz
#duas partições: a primeira de aproximadamente 60MB, a segunda preenche
# os bytes restantes. Ambas as partições estão alinhadas.
dd if=/dev/zero of=disk.img bs=1M contagem=256
disco separado.img
mktable gpt
mkpart primário fat32 2048s 131071s
mkpart primário fat32 131072s 100%
alinhar-verificar ideal 1
alinhar-verificar ideal 2
nome 1 UEFI
nome 2 SISTEMA
desistir

# Cria uma imagem de disco vazia de 33 MB.
dd if=/dev/zero of=uefi.img bs=1M contagem=33
# Formata a imagem do disco como FAT32
mkfs.vfat uefi.img -F 32
# Cria os subdiretórios solicitados.
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
# Copia o arquivo de inicialização.
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT

# Cria uma imagem de disco vazia de 100 MB.
dd if=/dev/zero of=system.img bs=1M contagem=100
# Formata a imagem do disco como FAT32
mkfs.vfat sistema.img -F 32
# Copia o arquivo do sistema operacional.
mcopy -i sistema.img SYSTEM.EFI ::

# Habilita o módulo do kernel solicitado pelo kpartx, apenas por precaução.
sudo modprobe dm-mod
# Mapeia e monta as duas partições em disk.img para /dev/mapper/loop0p1 e
# /dev/mapper/loop0p2
sudo kpartx -av disco.img
# Copia a partição UEFI para a imagem do disco.
sudo dd if=uefi.img of=/dev/mapper/loop0p1 bs=1M
# Copia a partição SYSTEM na imagem do disco.
sudo dd if=system.img of=/dev/mapper/loop0p2 bs=1M
# Desmonta as duas partições
sudo kpartx -dv disco.img

informação relacionada