Files
void-installer/tests/make-test-disk.sh

54 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# Create a fresh test disk image that mimics the XPS 17 layout:
# p1: 150 MiB EFI vfat (with a fake EFI/Microsoft/* tree)
# p2: 128 MiB MSR
# p3: 4 GiB NTFS placeholder ("Windows", must NOT be touched)
# p5: rest btrfs "Mint" (will be wiped by installer)
#
# No root required: uses sgdisk on the raw file + mtools for FAT32.
# The installer reformats p5; p3 carries only a partition-type flag (0700).
#
# Output: a sparse raw image (QEMU format=raw).
set -Eeuo pipefail
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
OUT="${1:-$PROJECT_DIR/out/test-disk.img}"
SIZE="${SIZE:-32G}"
mkdir -p "$(dirname "$OUT")"
command -v sgdisk >/dev/null || { echo "sgdisk missing (gptfdisk)"; exit 1; }
command -v mformat >/dev/null || { echo "mformat missing (mtools)"; exit 1; }
command -v mmd >/dev/null || { echo "mmd missing (mtools)"; exit 1; }
command -v mcopy >/dev/null || { echo "mcopy missing (mtools)"; exit 1; }
echo ">>> creating sparse raw disk ($SIZE) at $OUT"
rm -f "$OUT"
truncate -s "$SIZE" "$OUT"
echo ">>> partitioning"
sgdisk -Z "$OUT" >/dev/null 2>&1 || true
sgdisk \
-n 1:2048:+150M -t 1:ef00 -c 1:"EFI system partition" \
-n 2:0:+128M -t 2:0c01 -c 2:"Microsoft reserved partition" \
-n 3:0:+4G -t 3:0700 -c 3:"Basic data partition" \
-n 5:0:0 -t 5:8300 -c 5:"Mint" \
"$OUT" >/dev/null
# Derive partition-1 byte offset + sector count from GPT metadata.
P1_START=$(sgdisk -i 1 "$OUT" | awk '/First sector:/ {print $3}')
P1_LAST=$(sgdisk -i 1 "$OUT" | awk '/Last sector:/ {print $3}')
P1_SECTORS=$(( P1_LAST - P1_START + 1 ))
P1_OFFSET=$(( P1_START * 512 ))
echo ">>> formatting EFI partition 1 (FAT32) at byte offset $P1_OFFSET"
mformat -i "$OUT@@$P1_OFFSET" -F -T "$P1_SECTORS" -v ESP ::
echo ">>> faking Windows EFI loader on p1"
mmd -i "$OUT@@$P1_OFFSET" ::/EFI ::/EFI/Microsoft ::/EFI/Microsoft/Boot
printf 'FAKE WINDOWS BOOTMGR\n' \
| mcopy -i "$OUT@@$P1_OFFSET" - ::/EFI/Microsoft/Boot/bootmgfw.efi
echo ">>> done: $OUT"