mounting root from NFS via ROOTDEVNAME
Rick Macklem
rmacklem at uoguelph.ca
Thu Jan 31 15:25:42 UTC 2013
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"
More information about the freebsd-current
mailing list