Re: make NFSv3 default now on diskless

From: Rick Macklem <>
Date: Thu, 02 Jun 2022 20:03:05 UTC
John-Mark Gurney <> wrote:
> Rick Macklem wrote this message on Thu, Jun 02, 2022 at 14:44 +0000:
> > John-Mark Gurney <> wrote:
> > > I just booted FreeBSD-current diskless, using NFS root, and I ended
> > > up having issues because by default, NFS root is only v2.
> > >
> > > One of things that happened was disk space available was listed as
> > > -138G, or -144830429K.  I assume this is because the server is reporting
> > > TBs instead.
> > Yes. NFSv2 uses 32bit sizes.
> Should we make the NFS server clamp various sizes then?  instead of reporting
> negative numbers?  (Sorry if this is already done on newer versions of
> FreeBSD, my server is a bit old.)
My recollection (from long ago) is that, although the RFC defined them as 32bit signed,
some implementations choose to mid-interpret them as unsigned, so that 4G was supported
instead of 2G.

Having said that, I agree with you that you should just use NFSv3 now. (Many servers are
dropping NFSv2 support entirely.)

> > > If I mount via mount_nfs, the sizes are normal/correct because it mounts
> > > v3.
> > I believe most specify "nfsv3" in the "/" mount line of /etc/fstab on the
> > remote root fs. Then, when the system does a "mount -u" to make it
> > read/write it gets toggled to NFSv3.
> well, I tried doing a:
> mount -u -o nfsv3 /
It used to work when it was in /etc/fstab, when going from read-only to read-write,
from what I recall.

> on the system and this didn't work switch over to v3, it was still on
> v2..
> I haven't specified nfsv3 in /etc/fstab, but IMO, this should be the
> default..
Since NFSv3 is the default, it might not need to be explicit. I can't recall.

> Also, I'm right now booting single user mode, because I'm -mapall to
> a user, and lots of FreeBSD breaks when files aren't uid 0, and there
> doesn't appear to be a way to remap the uid to root (that I have found)..
Yep. It would take effect when going multi-user.

"-mapall=root", although that is not a recommended security setting.
Why don't you just allow the client to use whatever uid it  would normally
use instead of "-mapall"?

> > > The other issue that I ran into is that NFSv2 can't access >4GB files
> > > (or create them).
> > As above, NFSv2 uses 32bit sizes.
> >
> > > Anyone object to adding BOOTP_NFSV3 to GENERIC?
> > Well, that option only works when used with BOOTP_NFSROOT.
> > The GENERIC configs for amd64, arm64,... use the other way.
> > (Just to make it confusing, there are two different ways an NFS root
> >  fs is set up.)
> > See below.
> >
> > >  Or maybe making it a
> > > tunable that defaults to set, because it seems a bit crazy to default
> > > to v2 these days.
> > I don't think changing the default to NFSv3 will be a problem.
> > The reason it was NFSv2 was that,
> > for some non-FreeBSD NFS servers, the NFSv3 file handle is different
> > than the NFSv2 one.
> >
> > I added NFSv3 support to stand/libsa/nfs.c about 15years ago, so every
> > system should be running the newer NFS code in the loader and be able
> > to do NFSv3 booting.
> >
> > > This option was added in 432aad0e in 1997 so that the nfs_diskless
> > > structure didn't need to be filled out.  Does anything even
> > > populate/fill it out anymore?  I saw code in i386/i386/locore.s that
> > > does this, but it doesn't appear anywhere else.
> > Yes. For "options NFS_ROOT" (the other way), the loader uses
> > "stand/libsa/nfs.c" to acquire the remote file system's root file handle
> > and fills it in. (See nfs_setup_diskless() in sys/nfs/nfs_diskless.c.)
> > Looking at it, it appears to enable NFSv3 so long as it finds
> > "boot.nfsroot.nfshandlelen" set.
> Well, I'm not seeing that, and this system is booting via
> pxeboot+loader, so maybe something is broken?
If it's an up to date (within last 10+ years then, yes, it sounds like it
might be broken. However, I'm not a loader guy...

You can set it manually at the loader prompt to "28" and then see if it
boots are is running NFSv3.

I have no way of testing/debugging this. Maybe you can figure out why the
loader isn't setting "boot.nfsroot.nfshandlelen" to 28?

> > > There also appears to possibly be a way via mount options, but I can't
> > > see where it's documented to set them.
> > I think you just specify "nfsv3" as a mount option in the root fs
> > line in /etc/fstab on the root fs on the NFS server.
> See above, this doesn't appear to work, or doesn't work the way I think
> it should...
Well, maybe I just don't recall correctly.

> > I don't think changing the default to NFSv3 will be a problem.
> > The hassle is testing the various cases, to make sure nothing
> > breaks. I have no diskless setup to do testing and I don't even know
> > when installs/upgrades actually replace the loader?
> Well, this diskless was easier to setup than I expected, partly
> because I already had most of the infrastructure together (from
> netbooting another machine).  Put pxeboot on a tftp server, configure
> the dhcp server to send the correct options, extract base.txz to a
> directory, export it, and it worked.  I assume that I'm getting loader
> from that install since I don't specify it in the dhcp server.
I didn't think pxeboot used dhcp and I don't know how it figures out
where to find a file for booting?

> As for testing, we have the CI system for that, right? ;p
> /me needs to get back to work on the lab.
> I guess we'd need to list the configurations that we care about, the
> only ones I can think of, off the top of my head are pxeboot (which I'm
> testing now), and u-boot..
> For servers, are there any servers that
> are NFSv2 only that are in common use today?
You'd have to look pretty hard. FreeBSD had NFSv3 from day 1,
since it was in the CSRG stuff.
>  If you're running an
> ancient server that is NFSv2 only, I think you deserve to have to
> rebuild kernels or something instead of making 99% of the rest of us
> do it..
If you are running a NFSv2 only server, you are running a computer museum.
(As noted, many servers are dropping NFSv2 support entirely.)


  John-Mark Gurney                              Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."