Package:linux-image 
Version:3.2.0-3-486_3.2.21-3_i386

This is my first attempt ever, to set up a diskless client using nfs on
the client, but the nfs will not mount.  Both the server and client use
the same linux-image.  I'm using dnsmasq to provide servers for dhcp and
tftp, with pxe managing all this. The linux-image kernel and initrd get
sent to the client and the client starts booting the OS.  All OK so far.
But at the point where the booting client tries to mount the nfs file
system from the server, it fails.  At this point I see on the screen of
the client a whole series of the same message "Retrying nfs mount
mount: Device or resource busy" Then after many such error messages, it
gives up and spawns an (initramfs) shell.

A clue to why this happens is found in /var/log/syslog.  It shows that 
there initially were 2 mount requests sent from the client.  The first
request apparently succeeds in mounting the nfs but the second request fails
(coincides with the "busy" error message in syslog) since the nfs is
already mounted on the client.  So then the server sends a unmount
request to the client.  If the normal boot process continued from here,
it would likely be OK.  But what happens instead is that another mount
request is sent to the server and the sequence of: mount request, busy
error, unmount request continues.  This (mount retry's) repeats many
time until it gives up.

So the problem is that instead of just sending one mount request to the
server, the client sends a second mount request about a second later and
then continues to retry mounting when the nfsroot is already mounted.
The result is a failure to boot.

Here's an excerpt from syslog on the server: (..21 is the client.
daveslinux is the server)

May 29 21:27:36 daveslinux dnsmasq-tftp[1484]: sent 
/var/lib/tftpboot/pxelinux.cfg/default to 192.168.0.21
May 29 21:27:40 daveslinux dnsmasq-tftp[1484]: sent 
/var/lib/tftpboot/boot/vmlinuz to 192.168.0.21
May 29 21:27:51 daveslinux dnsmasq-tftp[1484]: sent 
/var/lib/tftpboot/boot/initrd to 192.168.0.21
May 29 21:28:00 daveslinux dnsmasq-dhcp[1484]: DHCPDISCOVER(eth0) 
00:0b:db:1a:6a:95 
May 29 21:28:00 daveslinux dnsmasq-dhcp[1484]: DHCPOFFER(eth0) 192.168.0.21 
00:0b:db:1a:6a:95 
May 29 21:28:00 daveslinux dnsmasq-dhcp[1484]: DHCPREQUEST(eth0) 192.168.0.21 
00:0b:db:1a:6a:95 
May 29 21:28:00 daveslinux dnsmasq-dhcp[1484]: DHCPACK(eth0) 192.168.0.21 
00:0b:db:1a:6a:95 
May 29 21:28:01 daveslinux rpc.mountd[2014]: authenticated mount request from 
192.168.0.21:922 for /nfsroot (/nfsroot)
May 29 21:28:02 daveslinux rpc.mountd[2014]: authenticated mount request from 
192.168.0.21:924 for /nfsroot (/nfsroot)
May 29 21:28:02 daveslinux rpc.mountd[2014]: authenticated unmount request from 
192.168.0.21:924 for /nfsroot (/nfsroot)
May 29 21:28:03 daveslinux rpc.mountd[2014]: authenticated mount request from 
192.168.0.21:926 for /nfsroot (/nfsroot)
May 29 21:28:03 daveslinux rpc.mountd[2014]: authenticated unmount request from 
192.168.0.21:926 for /nfsroot (/nfsroot)

(These mount-unmount sequences repeat many more times.  Note the +2
increment of the 922 number (What is this? A sequence number?)

The reason I think that the first mount request succeeds is that the
nfsroot file system is found in /root of the client after it spawns the
(initramfs) shell.

-------------------------------------------------------------------------------
Here's a copy of the default file in .../pxelinux.cfg
DEFAULT daveslinux-kern

LABEL daveslinux-kern
        kernel boot/vmlinuz
        append "ip=dhcp boot=/dev/nfs nfsroot=192.168.0.42:/nfsroot 
initrd=boot/initrd nfsrootdebug rw"

LABEL bak
        kernel boot/vmlinuz
        append "ip=dhcp boot=/dev/nfs nfsroot=192.168.0.42:/nfsroot 
initrd=boot/initrd nfsrootdebug rw"
-------------------------------------------------------------------------------

There is also an ethernet problem with eth0 but I don't think it should
cause the above problem, but it might.  I've had to set my server nic to half
duplex since the kernel ADDCONF(NETDEV_CHANGE) can't set full duplex
(set via ethtool) in the client.  The nic card on the server is old and
doesn't support autoconfig, but it does support full duplex which I use
for other purposes.  So what seems to happen is that the client kernel
tries autonegotiation with the server nic and there is no response from
the server nic.  Then by default it sets half duplex.  This situation is
a "duplex mismatch" as described in Wikipedia.  So I avoid this mismatch
by setting half duplex for the server.  Now could collisions and
retransmission possibly result in the initial mount request getting thru
twice?  I also saw a message from the client during booting something to
the effect of IP-Config: no response after 2 sec., giving up but the
messages flash by so fast I can't read them well.

The server is i586 and the client is i686 both running the same OS which
should work on both.

                        David Lawyer


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to