############################################################
# http://www.alaska.net/~erbenson/doc/mac-fdisk-basics.txt #
############################################################
This explains the basics of creating partitions with mac-fdisk in a
step by step manner. Note if you need to share the disk with MacOS
you will need to first create the MacOS partitions with the MacOS
utility Drive setup. When creating the MacOS partitions you should
first create with Drive setup a placeholder HFS partition as big as
the total space ALL of your planned GNU/Linux partitions will take.
For example, if you plan to have 4 1GB Linux partitions you would make
the HFS placeholder partition 4GB. You will delete this partition
with mac-fdisk and create the Linux partitions in the space it leaves
behind. The MacOS partition[s] should be last on the disk.
For Newworld systems you *must* have an 800K partition with type
Apple_Bootstrap appearing *before* any MacOS partitions.
DO NOT try and create Linux partitions with Apple's Drive setup!
If you are not going to keep MacOS and intend to have a GNU/Linux only
disk/system you should use the `i' command to mac-fdisk to clear out
the partition table and make a new empty one, however mac-fdisk
occasionally miscalculates the number of blocks the disk has. When
you run the `i' command it will prompt you for the number of blocks
the disk has, make sure this number is correct before accepting it.
NOTE: the mac-fdisk in Debian woody has been fixed, and no longer has
this problem. If you are using mac-fdisk with Debian woody
boot-floppies you need not find the number of blocks yourself as
described below.
To find out the number of blocks the disk has do the following (you
can skip this if using Debian woody mac-fdisk):
# cat /proc/partitions
find the device you are partitioning, for example `hda' you should see
something like this:
...
3 0 20044080 hda
...
take the number next to `hda' and double it, in this example you would
get 40088160 that is the number of 512 byte blocks /dev/hda has, this
is the number mac-fdisk should give as the default when you use the
`i' command, if not type it in yourself.
If you are sharing the disk with MacOS you should have already created
two HFS partitions, the first just a placeholder to reserve the space
for all your Linux partitions. The second for MacOS. Note if you
want to also install MacOSX, you should use Drive setup to create a
3rd partition type Apple_UFS, or MacOSX. The MacOSX installer uses
this as a placeholder partition, it will delete it and create 2
bootstrap partitions and then recreate the Apple_UFS partition. It is
important that you not create the Apple_UFS partition before the
GNU/Linux placeholder otherwise the MacOSX bootstrap partition will be
ahead of the Linux bootstrap partition. Using HFS+ for MacOSX is not
recommended as MacOS will debless the OSX partition rendering it
unbootable. GNU/Linux also has read-only support for UFS unlike HFS+.
First you need to find and delete the placeholder partition:
when you enter mac-fdisk you get the following prompt:
Command (? for help):
the first command you should give is the `p' print command:
Command (? for help): p
/dev/sdb
# type name length base ( size ) system
/dev/sdb1 Apple_partition_map Apple 63 @ 1 ( 31.5k) Partition map
/dev/sdb2 Apple_Driver43 Macintosh 54 @ 64 ( 27.0k) Driver 4.3
/dev/sdb3 Apple_Driver43 Macintosh 74 @ 118 ( 37.0k) Driver 4.3
/dev/sdb4 Apple_Driver_IOKit Macintosh 512 @ 192 (256.0k) Unknown
/dev/sdb5 Apple_Patches Patch Partition 512 @ 704 (256.0k) Unknown
/dev/sdb6 Apple_HFS untitled 194557 @ 1216 ( 95.0M) HFS
/dev/sdb7 Apple_HFS untitled 2 333025 @ 195773 (162.6M) HFS
/dev/sdb8 Apple_Free Extra 10 @ 528798 ( 5.0k) Free space
Block size=512, Number of Blocks=528807
DeviceType=0x0, DeviceId=0x0
Drivers-
1: @ 64 for 22, type=0x1
2: @ 118 for 36, type=0xffff
In this case the placeholder partition is 95MB (absurd but this is
just a demonstration)
Note that partitions 2-5 are MacOS cruft, they are only required if
you are keeping MacOS, they are completly unnecessary if you delete
MacOS. It is reccommended that you remove all of these driver
partitions if you do not plan to keep MacOS, do this with the `i'
command.
to delete this partition we use the `d' command and use the partition
number, in this case 6:
Command (? for help): d
Partition number: 6
Command (? for help): p
/dev/sdb
# type name length base ( size ) system
/dev/sdb1 Apple_partition_map Apple 63 @ 1 ( 31.5k) Partition map
/dev/sdb2 Apple_Driver43 Macintosh 54 @ 64 ( 27.0k) Driver 4.3
/dev/sdb3 Apple_Driver43 Macintosh 74 @ 118 ( 37.0k) Driver 4.3
/dev/sdb4 Apple_Driver_IOKit Macintosh 512 @ 192 (256.0k) Unknown
/dev/sdb5 Apple_Patches Patch Partition 512 @ 704 (256.0k) Unknown
/dev/sdb6 Apple_Free Extra 194557 @ 1216 ( 95.0M) Free space
/dev/sdb7 Apple_HFS untitled 2 333025 @ 195773 (162.6M) HFS
/dev/sdb8 Apple_Free Extra 10 @ 528798 ( 5.0k) Free space
as you can see there is now just a free space hole.
create the bootstrap partition:
If your using the mac-fdisk in Debian woody you can do this using the
`b' command which will automatically create the partition with the
correct type and size:
Command (? for help): b
First block: 6P
Command (? for help): p
/dev/sdb
# type name length base ( size ) system
/dev/sdb1 Apple_partition_map Apple 63 @ 1 ( 31.5k) Partition map
/dev/sdb2 Apple_Driver43 Macintosh 54 @ 64 ( 27.0k) Driver 4.3
/dev/sdb3 Apple_Driver43 Macintosh 74 @ 118 ( 37.0k) Driver 4.3
/dev/sdb4 Apple_Driver_IOKit Macintosh 512 @ 192 (256.0k) Unknown
/dev/sdb5 Apple_Patches Patch Partition 512 @ 704 (256.0k) Unknown
/dev/sdb6 Apple_Bootstrap bootstrap 1600 @ 1216 (800.0k) Unknown
/dev/sdb7 Apple_Free Extra 192957 @ 2816 ( 94.2M) Free space
/dev/sdb8 Apple_HFS untitled 2 333025 @ 195773 (162.6M) HFS
/dev/sdb9 Apple_Free Extra 10 @ 528798 ( 5.0k) Free space
Otherwise you will have to create it manually, note that the `C'
command is NOT the same as the `c' command:
Command (? for help): C
First block: 6P
Length in blocks: 800K
Name of partition: bootstrap
Type of partition: Apple_Bootstrap
Command (? for help): p
/dev/sdb
# type name length base ( size ) system
/dev/sdb1 Apple_partition_map Apple 63 @ 1 ( 31.5k) Partition map
/dev/sdb2 Apple_Driver43 Macintosh 54 @ 64 ( 27.0k) Driver 4.3
/dev/sdb3 Apple_Driver43 Macintosh 74 @ 118 ( 37.0k) Driver 4.3
/dev/sdb4 Apple_Driver_IOKit Macintosh 512 @ 192 (256.0k) Unknown
/dev/sdb5 Apple_Patches Patch Partition 512 @ 704 (256.0k) Unknown
/dev/sdb6 Apple_Bootstrap bootstrap 1600 @ 1216 (800.0k) Unknown
/dev/sdb7 Apple_Free Extra 192957 @ 2816 ( 94.2M) Free space
/dev/sdb8 Apple_HFS untitled 2 333025 @ 195773 (162.6M) HFS
/dev/sdb9 Apple_Free Extra 10 @ 528798 ( 5.0k) Free space
For `First block:' we used the first Apple_Free partition, partition 6
hence `6P' you can use this syntax to avoid having to calculate the
block offsets yourself. Also note that the Apple_Free partition is
now partition 7 and is 1600 blocks smaller, this will occur each time
you create new partitions in that space until there is no more space
left and this Apple_Free partition will simply be gone.
Now create the rest of your GNU/Linux partitions, this will show only
one partition.
Command (? for help): c
First block: 7P
Length in blocks: 7P
Name of partition: /
Command (? for help): p
/dev/sdb
# type name length base ( size ) system
/dev/sdb1 Apple_partition_map Apple 63 @ 1 ( 31.5k) Partition map
/dev/sdb2 Apple_Driver43 Macintosh 54 @ 64 ( 27.0k) Driver 4.3
/dev/sdb3 Apple_Driver43 Macintosh 74 @ 118 ( 37.0k) Driver 4.3
/dev/sdb4 Apple_Driver_IOKit Macintosh 512 @ 192 (256.0k) Unknown
/dev/sdb5 Apple_Patches Patch Partition 512 @ 704 (256.0k) Unknown
/dev/sdb6 Apple_Bootstrap bootstrap 1600 @ 1216 (800.0k) Unknown
/dev/sdb7 Apple_UNIX_SVR2 / 192957 @ 2816 ( 94.2M) Linux native
/dev/sdb8 Apple_HFS untitled 2 333025 @ 195773 (162.6M) HFS
/dev/sdb9 Apple_Free Extra 10 @ 528798 ( 5.0k) Free space
In this example we used the `c' command instead of `C' the difference
is `c' does not ask for a partition type, which we needed to enter to
get the special Apple_Bootstrap partition. Also note that we used the
7P syntax for the `Length of Blocks:' this means use all the space the
selected Apple_Free partition has. For other partitions you would
want to use xyzM for number of MegaBytes similar to the above 800K for
800 KiloBytes used for the bootstrap partition.
The partition name does not matter except for the swap partition,
where it should be `swap'. I find it useful to use the mountpoint
path as a partition name.
once your are satisfied with your partitioning enter the `w' command
to save changes:
Command (? for help): w
Writing the map destroys what was there before. Is that okay? [n/y]: y
The partition table has been altered!
SCSI device sdb: hdwr sector= 512 bytes. Sectors= 528808 [258 MB] [0.3 GB]
sdb: sdb1 sdb2 sdb3 sdb4 sdb5 sdb6 sdb7 sdb8 sdb9
SCSI device sdb: hdwr sector= 512 bytes. Sectors= 528808 [258 MB] [0.3 GB]
sdb: sdb1 sdb2 sdb3 sdb4 sdb5 sdb6 sdb7 sdb8 sdb9
Command (? for help):
now quit mac-fdisk with the `q' command:
Command (? for help): q
If you are not going to keep MacOS then you should clear the partition
table like so:
Command (? for help): i
map already exists
do you want to reinit? [n/y]: y
size of 'device' is 528808 blocks:
new size of 'device' is 528808 blocks
Command (? for help): p
/dev/sda
# type name length base ( size ) system
/dev/sda1 Apple_partition_map Apple 63 @ 1 ( 31.5k) Partition map
/dev/sda2 Apple_Free Extra 528744 @ 64 (258.2M) Free space
Block size=512, Number of Blocks=528808
DeviceType=0x0, DeviceId=0x0
Command (? for help):
Note if mac-fdisk's idea of the `size of 'device'' is wrong then enter
the correct value as described above.
Clearing the partition table has the advantage of getting rid of all
the MacOS cruft partitions created by Drive setup, those partitions
are only required when sharing the disk with MacOS.
create your partitions as shown in the previous example.
---- REORDERING PARTITIONS ----
MacOSX uses Apple_UFS partitions created by Drive setup as a
placeholder, it deletes them and create two bootstrap partitions of
its own then recreates the Apple_UFS partition. You should always
create the GNU/Linux placeholder before any MacOS or MacOSX partitions
but in case you didn't here is how to fix things.
Reordering partitions is useful if you accidently created your
bootstrap partition after your MacOS partitions, and its too late to
repartition.
the fix fortunatly is pretty simple, once you boot back into a
GNU/Linux system run mac-fdisk (aka pdisk) and use the `p' command to
print the partition table. Find the new number of your Bootstrap
partition and then use the `r' command to move it back where it
belongs, here is an example:
[root@socrates /root]# mac-fdisk /dev/sda
Command (? for help): p
/dev/sda
# type name length base ( size ) system
/dev/sda1 Apple_partition_map Apple 63 @ 1 ( 31.5k) Partition map
/dev/sda2 Apple_Boot MacOSX_Bootstrap 16384 @ 64 ( 8.0M) Unknown
/dev/sda3 Apple_Second MacOSX_Second_stage 2048 @ 16448 ( 1.0M) Unknown
/dev/sda4 Apple_HFS MacOS9 102400 @ 18496 ( 50.0M) HFS
/dev/sda5 Apple_UFS MacOSX 112640 @ 120896 ( 55.0M) Unknown
/dev/sda6 Apple_Bootstrap bootstrap 1600 @ 233536 (800.0k) Unknown
/dev/sda7 Apple_UNIX_SVR2 GNU/Linux 293672 @ 235136 (143.4M) Linux native
Block size=512, Number of Blocks=528808
DeviceType=0x0, DeviceId=0x0
Command (? for help): r
Partition number: 6
New number: 2
Command (? for help): p
/dev/sda
# type name length base ( size ) system
/dev/sda1 Apple_partition_map Apple 63 @ 1 ( 31.5k) Partition map
/dev/sda2 Apple_Bootstrap bootstrap 1600 @ 233536 (800.0k) Unknown
/dev/sda3 Apple_Boot MacOSX_Bootstrap 16384 @ 64 ( 8.0M) Unknown
/dev/sda4 Apple_Second MacOSX_Second_stage 2048 @ 16448 ( 1.0M) Unknown
/dev/sda5 Apple_HFS MacOS9 102400 @ 18496 ( 50.0M) HFS
/dev/sda6 Apple_UFS MacOSX 112640 @ 120896 ( 55.0M) Unknown
/dev/sda7 Apple_UNIX_SVR2 GNU/Linux 293672 @ 235136 (143.4M) Linux native
Block size=512, Number of Blocks=528808
DeviceType=0x0, DeviceId=0x0
Command (? for help): w
Writing the map destroys what was there before. Is that okay? [n/y]: y
The partition table has been altered!
SCSI device sda: hdwr sector= 512 bytes. Sectors= 528808 [258 MB] [0.3 GB]
sda: sda1 sda2 sda3 sda4 sda5 sda6 sda7
SCSI device sda: hdwr sector= 512 bytes. Sectors= 528808 [258 MB] [0.3 GB]
sda: sda1 sda2 sda3 sda4 sda5 sda6 sda7
Command (? for help): q
[root@socrates /root]#
That should take care of the problem. You may also have to fix your
/etc/fstab if your GNU/Linux partitions moved, however that is beyond
the spoke of this document.