Re: mounting root from NFS via ROOTDEVNAME

From: Rick Macklem <rmacklem_at_uoguelph.ca>
Date: Thu, 31 Jan 2013 10:25:41 -0500 (EST)
Lars Eggert wrote:
> Hi,
> 
> On Jan 30, 2013, at 22:43, Craig Rodrigues <rodrigc_at_crodrigues.org>
> wrote:
> > What you need to do is, before the FreeBSD kernel boots, your
> > loader needs to export some environment variables. This will trigger
> > the various behaviors in the FreeBSD mount code.
> 
> the loader can export some environment variables (this is how I get
> the serial console working.)
> 
> > So as I suggested before, you should continue with:
> >
> > (1) Have /usr/home/elars/dst/etc/fstab with:
> > # Options Dump Pass
> > 10.11.12.13:/usr/home/elars/dst/ / nfs ro 0 0
> 
> Done.
> 
> > (2) From your loader, you need to export this environment variable,
> > so
> > that the kernel can get it with getenv(). You need at least:
> >
> > vfs.root.mountfrom=nfs:10.11.12.13:/usr/home/elars/dst
> 
> Done.
> 
> > Now, there are some other environment variables you need to export
> > from the
> > loader.
> >
> > boot.netif.ip
> > boot.netif.netmask
> > boot.netif.gateway
> > boot.nfsroot.server
> > boot.nfsroot.path
> 
> Done. I also ripped out all the BOOTP* options from the kernel.
> 
Here is the complete list of environment variables from the comment
in sys/nfs/nfs_diskless.c:
* The loader is expected to export the following environment variables:
149 	*
150 	* boot.netif.name name of boot interface
151 	* boot.netif.ip IP address on boot interface
152 	* boot.netif.netmask netmask on boot interface
153 	* boot.netif.gateway default gateway (optional)
154 	* boot.netif.hwaddr hardware address of boot interface
155 	* boot.nfsroot.server IP address of root filesystem server
156 	* boot.nfsroot.path path of the root filesystem on server
157 	* boot.nfsroot.nfshandle NFS handle for root filesystem on server
158 	* boot.nfsroot.nfshandlelen and length of this handle (for NFSv3 only)
159 	* boot.nfsroot.options NFS options for the root filesystem 

Note that boot.nfsroot.nfshandle and boot.nfsroot.nfshandlelen are not
easy to get. pxeboot does a Mount RPC against the NFS server to get them.
(Probably the easiest way to find out what they are is to capture packets
 while doing a mount of the same path and then looking at the capture via
 wireshark.)

For this method to work, you have to specify "options NFS_BOOT", but not
the BOOTP* ones for the kernel.

> However, this still fails:
> 
> Trying to mount root from nfs:10.11.12.13:/usr/home/elars/dst []...
> mountroot: waiting for device 10.11.12.13:/usr/home/elars/dst ...
> Mounting from nfs:10.11.12.13:/usr/home/elars/dst failed with error
> 19.
> 
> Loader variables:
> vfs.root.mountfrom=nfs:10.11.12.13:/usr/home/elars/dst
> 
As far as I can see, the current code does not know how to turn this
into a root file handle via a Mount RPC. I think a non-trivial patch
to sys/nfs/bootp_subr.c would be required.

As such, the only other way to make it work is to use "options NFS_ROOT"
and specify the root file handle in the environment variables, as above.
(If I recall correctly, the root file handle is specified as a string of
 hex digits, but look in the code in sys/nfs/nfs_diskless.c to confirm
 this.)

rick

> Manual root filesystem specification:
> <fstype>:<device> [options]
> Mount <device> using filesystem <fstype>
> and with the specified (optional) option list.
> 
> eg. ufs:/dev/da0s1a
> zfs:tank
> cd9660:/dev/acd0 ro
> (which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /)
> 
> ? List valid disk boot devices
> . Yield 1 second (for background tasks)
> <empty line> Abort manual input
> 
> mountroot>
> 
> I did a tcpdump and no traffic shows up on the correct interface
> (em4). I guess I need to set yet another loader environment variable
> to indicate which interface I'd like to use. Looking at the source, I
> only see boot.netif.name, but setting that to em4 doesn't help either.
> 
> Any further ideas?
> 
> Thanks,
> Lars
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to
> "freebsd-current-unsubscribe_at_freebsd.org"
Received on Thu Jan 31 2013 - 14:25:42 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:34 UTC