From mboxrd@z Thu Jan 1 00:00:00 1970 From: erik quanstrom Date: Sat, 7 Jan 2012 14:04:51 -0500 To: 9fans@9fans.net Message-ID: <1c3ba45416e47236eedd6ca05863d751@chula.quanstro.net> In-Reply-To: <20120107182908.GA3674@polynum.com> References: <20120107182908.GA3674@polynum.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: Re: [9fans] BUG: disk/fdisk.c: corrupts MBR Topicbox-Message-UUID: 5639d4e8-ead7-11e9-9d60-3106f5b1d025 On Sat Jan 7 13:30:33 EST 2012, tlaronde@polynum.com wrote: > Hello, > > Since I'm playing with the installation, I have been hit once again > with disk/fdisk corrupting the MBR and rendering other systems > unbootable. > > The explanation is arithmetic truncation. disk/fdisk.c does this: > > p->start = lba/sec2cyl; > > and, if modifications are done (for example creating a Plan9 partition, > of marking a primary partition active), when written back, the entries > are "restored" by: > > *endlba = (vlong)p->start*sec2cyl; > > Of course, if the values were not integer multiples of sec2cyl, the > entry point for the PBS is corrupt. (For example, on *BSD, the principle > is the same as for Plan9: a "primary" partition is a sequence of > adjacent bytes, furthermore subdivided; but one special subdivision > [a] is at the same offset (at start) and holds the bootcode and a > disklabel describing the subdivision; if the MBR is corrupt, neither > boot nor disklabel so user can conclude: everything lost). And the first > travel in the flying saucer will also be the last... can you just set sec2cyl=1? - erik