Boot linux over NFS

The following text describes on how to use NFS for the root filesystem. For the rest of this text 'client' means the diskless system, and 'server' means the NFS server.

Install nfs pakages.

$ sudo apt-get install nfs-kernel-server nfs-common

After insert your eMMC or SD card, copy the Root File System.

# The trusty folder is mounted your RFS by SD card.
$ sudo cp -rp /media/$USER/trusty /home/$USER/

Add following line in “/etc/exports”

/home/$USER/trusty        *(rw,sync,no_root_squash,no_subtree_check)

Restart NFS service.

$ sudo service nfs-kernel-server restart

Modify /home/$USER/trusty/etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface, commented out for NFS root
#auto eth0
#iface eth0 inet dhcp
iface eth0 inet manual

To use Ethernet and NFS on initramfs you need to change module to built-in.

The C1 Ethernet driver was already built-in.

-> File systems
  -> Network File Systems
     <*> NFS client support
     <*> NFS client support for NFS version 3


-> Device Drivers
  -> Network device support
    -> USB Network Adapters
       <*> Multi-purpose USB Networking Framework
       <*> SMSC LAN95XX based USB 2.0 10/100 ethernet devices
-> File systems
  -> Network File Systems
     <*> NFS client support
     <*> NFS client support for NFS version 3

Then, Update your ODROID's kernel.
Refer to the following links How to kernel update.

Append following line to the boot argument.

boot=nfs root=/dev/nfs ip=dhcp nfsroot=${rfspath} rw

You shuled modify boot.ini file or compile to a u-boot script.

e.g. ODROID-C1.

Modify “/media/boot/boot.ini”

setenv rfspath
setenv bootargs "boot=nfs root=/dev/nfs ip=dhcp nfsroot=${rfspath} rw rootwait ro ${condev} no_console_suspend vdaccfg=0xa000 logo=osd1,loaded,0x7900000,720p,full dmfc=3 cvbsmode=576cvbs hdmimode=${m} m_bpp=${m_bpp} vout=${vout_mode} ${disableuhs}"


$ sudo reboot

e.g. ODROID-U3.

Copy the existing boot script

$ cd /media/boot
$ cp boot.txt boot-nfs.txt

Modify boot-nfs.txt.

setenv initrd_high "0xffffffff"
setenv fdt_high "0xffffffff"
setenv rfspath
setenv bootcmd "fatload mmc 0:1 0x40008000 zImage; fatload mmc 0:1 0x42000000 uInitrd; bootm 0x40008000"
setenv bootargs "boot=nfs root=/dev/nfs ip=dhcp nfsroot=${rfspath} console=tty1 console=ttySAC1,115200n8 rootwait mem=2047M"

Install uboot-mkimage package.

$ sudo apt-get install uboot-mkimage

Compile to a u-boot script.

$ mkimage -T script -A arm -C none -n 'ODROID-U3.Boot NFS-mounted RFS' -d boot-nfs.txt boot-nfs.scr


$ mv boot.scr boot.scr.orig
$ cp boot-nfs.scr boot.scr


$ sudo reboot.

Nice to have a lot of disk space:

root@odroid:~# df -h                                                                                
Filesystem                      Size  Used Avail Use% Mounted on                             909G  177G  687G  21% /                                             
none                            4.0K     0  4.0K   0% /sys/fs/cgroup                                
udev                            420M  4.0K  420M   1% /dev                                          
tmpfs                           425M  4.0K  425M   1% /tmp                                          
tmpfs                            85M  2.6M   83M   3% /run                                          
none                            5.0M     0  5.0M   0% /run/lock                                     
none                            425M   76K  425M   1% /run/shm                                      
none                            100M   24K  100M   1% /run/user                                     
/dev/mmcblk0p1                  129M  7.4M  122M   6% /media/boot
  • troubleshooting/nfsboot.txt
  • Last modified: 2017/08/14 16:00
  • by luke.go