> On Jan 24, 2021, at 4:50 PM, Robert Elz <k...@munnari.oz.au> wrote:
>
> Date: Sun, 24 Jan 2021 14:12:20 -0800
> From: John Nemeth <jnem...@cue.bc.ca>
> Message-ID: <202101242212.10omckhx022...@server.cornerstoneservice.ca>
>
> | The tools won't replicate this, nor should they, as it is a
> | seriously broken setup. To fix this setup, delete MBR parition 0.
>
> Actually, it would take more than that... The PMBR should cover the
> entire drive, the one shown only accounted for the (unused except for
> the partitioning headers) section before the start of the windows
> partition.
>
> This is even worse than when I looked at it before. If this works
> for anything at all (except perhaps ignoring the GPT partitions
> entirely, and simply allowing access via the MBR to the windows
> partition) then I suspect that indicates a bug somewhere. It shouldn't.
The drive I am trying to replicate manually is from an evbmips (octeon) system
that is working fine and was (more or less) created by NetBSD tools for a
release. The only difference from the original disk image created by the
NetBSD release is that I replaced a single ffs partition with two. Now I am
trying to create a similar drive layout manually rather than going through the
dance I did before: dd the image, boot to resize the root partition, boot
diskless, delete root partition, make new partitions, repopulate filesystems.
As far as I can tell, the NetBSD releases use the code included below to create
the disk image that I started with and am trying to replicate. See
src/distrib/utils/embedded/mkimage, the relevant portion of which is copied
below; in this case $gpt and $gpt_hybrid are both true. (One thing I still
don’t understand in this code is that ${image} does not occur as the last
argument to gpt.)
I’ll let others comment further on the wisdom of a hybrid GPT/MBR scheme or the
layout of the MBR, but the -H option was added post-9, presumably to support
applications like this. Further, this is the layout actually created by NetBSD
tools for working systems. If there is a better layout, I would like to know.
Thanks.
Cheers,
Brook
if $gpt; then
if $gpt_hybrid; then
gpt_flags="-H"
fi
initsecs=$((${init} * 1024))
bootsecs=$((${boot} * 1024))
ffsstart="$(getsectors ${ffsoffset})"
echo ${bar} Clearing existing partitions ${bar}
${GPT} ${gpt_flags} ${image} destroy || true
echo ${bar} Creating partitions ${bar}
${GPT} ${gpt_flags} ${image} create ${gpt_create_flags}
${GPT} ${gpt_flags} ${image} add -b ${initsecs} -s ${bootsecs} -l
${gpt_label_boot:-EFI} -t ${gpt_boot_type:-efi}
${GPT} ${gpt_flags} ${image} set -a required -i 1
${GPT} ${gpt_flags} ${image} add -a 4m -b ${ffsstart} -l
${gpt_label_ffs:-netbsd-root} -t ffs
${GPT} ${gpt_flags} ${image} show
if $gpt_hybrid; then
echo ${bar} Creating hybrid MBR ${bar}
${FDISK} -f -g -u -0 -a -s ${msdosid}/${initsecs}/${bootsecs}
-F ${image}
${FDISK} -f -g -u -3 -s 238/1/$((${initsecs} - 1)) -F ${image}
${FDISK} -F ${image}
fi
else
…
fi