Date: Thu, 31 Jan 2013 10:25:41 -0500 (EST) From: Rick Macklem <rmacklem@uoguelph.ca> To: Lars Eggert <lars@netapp.com> Cc: Craig Rodrigues <rodrigc@crodrigues.org>, freebsd-current@freebsd.org Subject: Re: mounting root from NFS via ROOTDEVNAME Message-ID: <1435656219.2547176.1359645941027.JavaMail.root@erie.cs.uoguelph.ca> In-Reply-To: <D4D47BCFFE5A004F95D707546AC0D7E91F6B8297@SACEXCMBX01-PRD.hq.netapp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Lars Eggert wrote: > Hi, > > On Jan 30, 2013, at 22:43, Craig Rodrigues <rodrigc@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@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-current > To unsubscribe, send any mail to > "freebsd-current-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1435656219.2547176.1359645941027.JavaMail.root>