Subject: apple partition map questions
To: None <port-macppc@netbsd.org>
From: Neil Ludban <nludban@columbus.rr.com>
List: port-macppc
Date: 09/22/2002 22:53:12
Hello,

I've been trying for some time now to turn my bondi-blue iMac into
a dedicated NetBSD workstation, bootable from the hard drive.  This
has turned out to be quite an adventure, with my lack of prior Mac
experience, no MacOS CDs, and ethernet and CD each failing to boot
about 80% of the time :(

What I'm attempting now is to convert the drive to using an Apple
partition map, the theory being that I would then be able to format
the HFS partition and copy in ofwboot.xcf using hfsutils.  Note
the free space at the start of the disk, partition h:

===
#     size   offset   fstype [fsize bsize cpg/sgs]
a:  524475   524475   4.2BSD   1024  8192    16   # (Cyl.  925 - 1849)
b:  524475  1048950     swap                      # (Cyl. 1850 - 2774)
c: 8418816        0   unused      0     0         # (Cyl.    0 - 14847)
e: 3072006  1573425   4.2BSD   1024  8192    16   # (Cyl. 2775 - 8192)
f: 3773385  4645431   4.2BSD   1024  8192    16   # (Cyl. 8193 - 14847)
h:  524475        0   unused      0     0         # (Cyl.    0 - 924)
===

I've hacked together a small Python program that takes the above as
input and produces the equivalent APM (in ascii and hex):

===
Total disk size = 8418816 sectors.
Apple Partition Map:
Block Zero {
        sbBlkCount      8418816
}
Partition[0] {
        MapBlkCnt       6
        PyPartStart     1
        PartBlkCnt      16
        PartName        Apple
        PartType        Apple_partition_map
        DataCnt         16
}
Partition[1] {
        MapBlkCnt       6
        PyPartStart     17
        PartBlkCnt      524458
        PartName        MacOS
        PartType        Apple_HFS
        DataCnt         524458
}
Partition[2] {
        MapBlkCnt       6
        PyPartStart     524475
        PartBlkCnt      524475
        PartName        A/UX Root
        PartType        Apple_UNIX_SVR2
        DataCnt         524475
}
Partition[3] {
        MapBlkCnt       6
        PyPartStart     1048950
        PartBlkCnt      524475
        PartName        Swap
        PartType        Apple_UNIX_SVR2
        DataCnt         524475
}
Partition[4] {
        MapBlkCnt       6
        PyPartStart     1573425
        PartBlkCnt      3072006
        PartName        A/UX User
        PartType        Apple_UNIX_SVR2
        DataCnt         3072006
}
Partition[5] {
        MapBlkCnt       6
        PyPartStart     4645431
        PartBlkCnt      3773385
        PartName        A/UX Home
        PartType        Apple_UNIX_SVR2
        DataCnt         3773385
}


0000  45 52 02 00 00 80 76 00  00 00 00 00 00 00 00 00  |ER....v.........|
0010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0200  50 4d 00 00 00 00 00 06  00 00 00 01 00 00 00 10  |PM..............|
0210  41 70 70 6c 65 00 00 00  00 00 00 00 00 00 00 00  |Apple...........|
0220  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0230  41 70 70 6c 65 5f 70 61  72 74 69 74 69 6f 6e 5f  |Apple_partition_|
0240  6d 61 70 00 00 00 00 00  00 00 00 00 00 00 00 00  |map.............|
0250  00 00 00 00 00 00 00 10  00 00 00 00 00 00 00 00  |................|
0260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0400  50 4d 00 00 00 00 00 06  00 00 00 11 00 08 00 aa  |PM..............|
0410  4d 61 63 4f 53 00 00 00  00 00 00 00 00 00 00 00  |MacOS...........|
0420  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0430  41 70 70 6c 65 5f 48 46  53 00 00 00 00 00 00 00  |Apple_HFS.......|
0440  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0450  00 00 00 00 00 08 00 aa  00 00 00 00 00 00 00 00  |................|
0460  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0600  50 4d 00 00 00 00 00 06  00 08 00 bb 00 08 00 bb  |PM..............|
0610  41 2f 55 58 20 52 6f 6f  74 00 00 00 00 00 00 00  |A/UX Root.......|
0620  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0630  41 70 70 6c 65 5f 55 4e  49 58 5f 53 56 52 32 00  |Apple_UNIX_SVR2.|
0640  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0650  00 00 00 00 00 08 00 bb  00 00 00 00 00 00 00 00  |................|
0660  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0800  50 4d 00 00 00 00 00 06  00 10 01 76 00 08 00 bb  |PM.........v....|
0810  53 77 61 70 00 00 00 00  00 00 00 00 00 00 00 00  |Swap............|
0820  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0830  41 70 70 6c 65 5f 55 4e  49 58 5f 53 56 52 32 00  |Apple_UNIX_SVR2.|
0840  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0850  00 00 00 00 00 08 00 bb  00 00 00 00 00 00 00 00  |................|
0860  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0a00  50 4d 00 00 00 00 00 06  00 18 02 31 00 2e e0 06  |PM.........1....|
0a10  41 2f 55 58 20 55 73 65  72 00 00 00 00 00 00 00  |A/UX User.......|
0a20  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0a30  41 70 70 6c 65 5f 55 4e  49 58 5f 53 56 52 32 00  |Apple_UNIX_SVR2.|
0a40  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0a50  00 00 00 00 00 2e e0 06  00 00 00 00 00 00 00 00  |................|
0a60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0c00  50 4d 00 00 00 00 00 06  00 46 e2 37 00 39 93 c9  |PM.......F.7.9..|
0c10  41 2f 55 58 20 48 6f 6d  65 00 00 00 00 00 00 00  |A/UX Home.......|
0c20  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0c30  41 70 70 6c 65 5f 55 4e  49 58 5f 53 56 52 32 00  |Apple_UNIX_SVR2.|
0c40  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0c50  00 00 00 00 00 39 93 c9  00 00 00 00 00 00 00 00  |.....9..........|
0c60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
===

Questions so far:

0) It seems too easy... is this approach doomed to failure?
1) Are the special Apple partitions required? (FAQs say no, but I've
   not found any samples)
2) Are any flags missing, especially wrt being bootable?  (I followed
   libhfs' examples, need to look at pdisk too)
3) Does NetBSD expect any flags set?  (ISTR mention of block and
   fragment sizes, or maybe it was just a proposal)
4) Is NetBSD limited to root, swap, and usr partitions?
5) Is HFS also not caring about drive geometry?  Could a raw HFS
   partition (small (<1M) and bootable with ofwboot.xcf) just be
   copied onto a new drive and still work?
6) What's a safe way to overwrite the NetBSD disklabel with the APM,
   so the kernel doesn't get confused or panic?

Answers, pointers to source, documentation, or better places to
ask all much appreciated-

-Neil