Subject: Re: 1.6 miniroot won't boot
To: None <eeh@netbsd.org>
From: Manuel Bouyer <bouyer@antioche.lip6.fr>
List: port-sparc64
Date: 06/10/2002 20:40:12
On Mon, Jun 10, 2002 at 08:08:27PM +0200, Manuel Bouyer wrote:
> On Mon, Jun 10, 2002 at 05:57:04PM -0000, eeh@netbsd.org wrote:
> > Hm.  Let me see if I fully understand what's going on:
> > 
> > 1) the bootblock fails on the miniroot (partition `b') but not
> > a normal root (partition `d').
> > 
> > 2) If you mount partition `b', run newfs, untar, installboot, etc.
> > you can boot from it.
> > 
> > 3) In both instances the disklabel has partition `b' labelled as
> > `swap'.
> 
> Yes. I also tried to change it to 4.2BSD
> 
> > 
> > O.K.  That definitely sounds like an incompatibility between
> > the bootblock and makefs.  I will need to look into this some
> > more to see what the difference is between something generated
> > by vnd/newfs and makefs.
> 
> I played with fsdb a bit. In the working case the root inode is:
> I=2 MODE=40755 SIZE=512
>         MTIME=Jun 10 11:49:26 2002 [948311000 nsec]
>         CTIME=Jun 10 11:49:26 2002 [948311000 nsec]
>         ATIME=Jun 10 11:47:34 2002 [546215000 nsec]
> OWNER=root GRP=wheel LINKCNT=16 FLAGS=0x0 BLKCNT=0x2 GEN=0x0
> fsdb (inum: 2)> blks
> I=2 1 block 
> Direct blocks:
> 0: 496 
> 
> In the miniroot it is:
> fsdb (inum: 2)> print
> current inode: directory
> I=2 MODE=40755 SIZE=512
>         MTIME=Jun 10 19:28:50 2002 [891687000 nsec]
>         CTIME=Jun 10 19:28:50 2002 [891687000 nsec]
>         ATIME=Jun 10 19:29:18 2002 [655562000 nsec]
> OWNER=root GRP=wheel LINKCNT=13 FLAGS=0x0 BLKCNT=0x4 GEN=0x0
> fsdb (inum: 2)> blks
> I=2 1 block 
> Direct blocks:
> 0: 81 
> 
> BLKCNT is different. BLKCNT is the di_blocks field in struct dinode.

OK, it's an issue with the block size/frag size of the miniroot.
The miniroot is built with bsize=16k,fsize=2k
I hacked the Makefiles to build the miniroot with the default bsize/fsize
(I had to bump it to 14M to have enouth inodes) and the resulting miniroot
boots.

The best is probably to teach bootblk to handle the bsize/fsize stored in
the superblock properly, but as a workaround changing Makefile.instfs
to use 8k/1k may be enouth (need to tweak other makefs options to have enouth
indodes, though).

--
Manuel Bouyer, LIP6, Universite Paris VI.           Manuel.Bouyer@lip6.fr
--