Re: make NFSv3 default now on diskless

From: John-Mark Gurney <>
Date: Thu, 02 Jun 2022 18:35:22 UTC
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.)

> > 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 /

on the system and this didn't work switch over to v3, it was still on

I haven't specified nfsv3 in /etc/fstab, but IMO, this should be the

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)..

> > 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?

> > 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...

> 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.

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?  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..

  John-Mark Gurney				Voice: +1 415 225 5579

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