Eu tenho uma biblioteca (referida aqui como "wic") que gera um arquivo drive.img
que contém várias partições, incluindo uma partição de inicialização com um exe UFI. Se eu dd if=drive.img of=/dev/sdb
, funciona perfeitamente.
Estou me referindo ao wic para criar outro script que criará as mesmas partições diretamente na unidade, em vez de um intermediário drive.img
.
No meu script, a partição de inicialização contém os arquivos / estrutura exatos que a biblioteca original produziu, bit por bit. Eu me referi ao wic para determinar os comandos exatos do parted
para chamar.
O problema é que o exe EFI não é detectado na inicialização usando meu script.
Eu notei algumas diferenças entre a unidade que eu crio e a que a wic faz (depois de dd if=drive.img of=/dev/sdb
) que pode ajudar a determinar o que estou fazendo errado.
parted
não reconhece o tipo de sistema de arquivos para a partição fat. /dev/sdb1
, ele usará um dispositivo de loopback. Saída:
sdb 8:64 1 15G 0 disk
├─sdb1 8:65 1 1.5G 0 part
├─sdb2 8:66 1 12G 0 part
└─sdb3 8:67 1 1.5G 0 part
loop0 7:3 0 16.6M 0 loop /media/pknopf/efi
loop1 7:4 0 16.6M 0 loop /media/pknopf/efi1
Quando eu monto esta partição depois de usar wic, a partição é montada corretamente, sem loopback.
Aqui está o meu script.
#!/usr/bin/env bash
DEVICE="/dev/sdb"
# This is a fat filesystem that contains grub EFI and grub.cfg.
BOOTIMG="/boot.img"
parted -s $DEVICE mklabel gpt
parted -a optimal $DEVICE mkpart primary fat16 0% 10%
parted -a optimal $DEVICE mkpart primary ext2 10% 90%
parted -a optimal $DEVICE mkpart primary ext2 90% 100%
sgdisk --partition-guid=1:3948166f-7d1b-4b75-ad77-5ed5ad5f8e37 $DEVICE
sgdisk --partition-guid=2:9d69c3d4-4175-4a46-baba-64f95bcea861 $DEVICE
sgdisk --partition-guid=3:79067919-3db0-4c63-b78e-b72ce880cd42 $DEVICE
parted $DEVICE name 1 msdos
parted $DEVICE name 2 medxplatform
parted $DEVICE name 3 data
sync
# Boot partition
parted $DEVICE set 1 esp on
# $BOOTIMG is a pre-made fat img using mkdosfs
dd if=$BOOTIMG of=${DEVICE}1
# Rootfs partition
mkfs.ext4 ${DEVICE}2 -F -L medxplatform
# Data partition
mkfs.ext4 ${DEVICE}3 -F -L data
EDITAR : Parece que parted
não vê o tipo de sistema de arquivos ao usar meu script, mas o vê ao usar wic.
Meu script:
Model: innostor USB 3.0 (scsi)
Disk /dev/sde: 16.1GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1611MB 1610MB msdos legacy_boot, msftdata
2 1611MB 14.5GB 12.9GB ext4 medxplatform
3 14.5GB 16.1GB 1610MB ext4 data
Wic:
Model: innostor USB 3.0 (scsi)
Disk /dev/sdf: 16.1GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 25.7MB 24.7MB fat16 msdos legacy_boot, msftdata
2 26.2MB 10.5GB 10.5GB ext4 medxplatform
3 10.5GB 11.6GB 1074MB ext4 data
Note, estou ciente de que os tamanhos das partições são diferentes, mas não acho que seja esse o problema.
Tags uefi boot-loader parted fat