On Sat, Jul 07, 2007 at 04:31:21AM -0400, Matthew Szudzik wrote: > > Disk: sd0 geometry: 3935/64/32 [8060926 Sectors] > > Offset: 0 Signature: 0xAA55 > > Starting Ending LBA Info: > > #: id C H S - C H S [ start: size ] > > ------------------------------------------------------------------------ > > 0: 0B 0 1 32 - 3935 63 17 [ 63: 8060850 ] Win95 FAT-32 > > 1: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused > > 2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused > > 3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused > > Ah, I now understand. Windows is assuming that each track has 63 sectors, > and apparently requires that each partition fills an integer number of > tracks. The ending CHS values are chosen so that the maximum number of > 63-sector tracks are filled. > > So, to create the appropriate MBR partition for a drive, type the > following (I assume that the drive is device sd0): > > > # fdisk -i -e sd0 > fdisk: sysctl(machdep.bios.diskinfo): Device not configured > > ----------------------------------------------------- > ------ ATTENTION - UPDATING MASTER BOOT RECORD ------ > ----------------------------------------------------- > > Do you wish to write new MBR and partition table? [n] y > Enter 'help' for information > fdisk: 1> print > Disk: sd0 geometry: 3935/64/32 [8060926 Sectors] > Offset: 0 Signature: 0xAA55 > Starting Ending LBA Info: > #: id C H S - C H S [ start: size ] > ------------------------------------------------------------------------ > 0: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused > 1: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused > 2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused > *3: A6 0 1 1 - 3934 63 32 [ 32: 8058848 ] OpenBSD > > > Take careful note of the total number of sectors (8060926 in this case). > Let NUM be the number of sectors divided by 63, rounded down to the > nearest integer. Then, let SIZE be > 63*(NUM - 1) > In this example, NUM is 127951 and SIZE is 8060850. Continue as follows: > > > fdisk: 1> edit 3 > Starting Ending LBA Info: > #: id C H S - C H S [ start: size ] > ------------------------------------------------------------------------ > *3: A6 0 1 1 - 3934 63 32 [ 32: 8058848 ] OpenBSD > Partition id ('0' to disable) [0 - FF]: [A6] (? for help) 0 > Partition 3 is disabled. > fdisk:*1> edit 0 > Starting Ending LBA Info: > #: id C H S - C H S [ start: size ] > ------------------------------------------------------------------------ > 0: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused > Partition id ('0' to disable) [0 - FF]: [0] (? for help) 0B > Do you wish to edit in CHS mode? [n] n > offset: [0] 63 > > > At the next prompt, enter the number SIZE that we had previously > calculated. > > > size: [0] 8060850 > fdisk:*1> print > Disk: sd0 geometry: 3935/64/32 [8060926 Sectors] > Offset: 0 Signature: 0xAA55 > Starting Ending LBA Info: > #: id C H S - C H S [ start: size ] > ------------------------------------------------------------------------ > 0: 0B 0 1 32 - 3935 63 17 [ 63: 8060850 ] Win95 FAT-32 > 1: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused > 2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused > 3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused > fdisk:*1> quit > Writing current MBR to disk. > > > And notice that the 3935 that I could not explain is immediately accounted > for. The problem is solved!
Nice work! Notice that the 8060926 sectors the disk has in LBA mode is more than 3935 * 64 * 32 = 8058880, so there are 2046 more sectors in LBA mode than in CHS mode. Assuming 63 sectors per track instead and ignoring cylinder and head count gives a spill of 13 sectors. I would have guessed Windows used the classical fake geometry of 16383/16/63, and maybe it is: if it also does not need to place partitions on cylinder boundaries it all adds up. Maybe you can use the 'e' command in disklabel to set drive parameters to 63 sectors/track, 16 tracks/cylinder, 1008 sectors/cylinder, 7997 cylinders and 8060926 sectors. That would make the last disk sector have CHS address 7996/15/13, 7996/15/14-63 being nonexistent, and the last sector of the last whole track would be CHS 7996/14/63. Partition in 7997/16/63 geometry: Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------ 0: 0B 0 1 1 - 7996 14 63 [ 63: 8060850 ] Win95 FAT-32 That was a lot of guessing from me. Does it make sense? -- / Raimo Niskanen, Erlang/OTP, Ericsson AB