home       inleiding       sysadmin       services       links       bash       werk       nothing      

nfs

https://en.wikipedia.org/wiki/Network_File_System
 
https://tools.ietf.org/html/rfc1094
 
http://www.tldp.org/HOWTO/NFS-HOWTO/
 
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-14-04
 
http://www.tecmint.com/how-to-setup-nfs-server-in-linux/
 
CLIENT: nfs-common
SERVER: nfs-common + nfs-kernel-server
 
some tests:
 

  • Is the server listening ...
     
    $ sudo netstat -tupan | egrep 'rpc|Active|Proto'
    LISTEN      2511/rpc.mountd
    LISTEN      2208/rpc.statd  
    LISTEN      2511/rpc.mountd
    LISTEN      1974/rpcbind 

     

  • are there active connections ...
     
    $ sudo netstat -tn | egrep '2049|Active|Proto'
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      

    (no active connections yet cause no shares and no clients)
     

  • give some statistics
     
    $ nfsstat
    Server rpc stats:
    calls      badcalls   badclnt    badauth    xdrcall
    1          0          0          0          0       
    Server nfs v3:
    null         getattr      setattr      lookup       access       readlink     
    1       100% 0         0% 0         0% 0         0% 0         0% 0         0%
    read         write        create       mkdir        symlink      mknod        
    0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
    remove       rmdir        rename       link         readdir      readdirplus  
    0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
    fsstat       fsinfo       pathconf     commit       
    0         0% 0         0% 0         0% 0         0%
     
    Client rpc stats:
    calls      retrans    authrefrsh
    0          0          0  

     

  • test shares
     
    create directories like /shares/pluto and /shares/mars
    and put something inside
     
  • exports file (here are your shares)
     
    vim /etc/exports
    # /etc/exports: the access control list for filesystems which may be exported
    #               to NFS clients.  See exports(5).
    #
    # Example for NFSv4:
    # /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
    # /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
    #
    /shares         (insecure,no_root_squash,rw)

     

  • restart the server:
     
    $ sudo /etc/init.d/nfs-kernel-server restart
    $ sudo /etc/init.d/idmapd restart
     
  • client
     
    installeer nfs-common
    use mount or fstab
    # mount -t nfs4 ....
     
     
  1. testomgeving
     
    We beginnen met het opzetten van een testomgeving:

    • 1 ubuntu server 14.04 met 2 netwerkkaarten: 1 kaart op NAT via DHCP // 1 kaart op intnet op 172.16.0.1/24 (of een andere private range)
    • 1 linux-mint-client 17 op intnet
       
      Het is nuttig de linux-mint-client eerst via NAT aan te sluiten en de software nfs-common te installeren, daarna de client een statisch adres te geven als in http://linux800.be/inleiding/basic-services/static-net-config.
       
      Daarna configureer ik de client op intnet via ip-adres 172.16.0.2/24
       
  2. de server zijde
     
    Ik vind het leuker te werken op een server via ssh dan via de virtualbox terminal. Indien de vbox-machine op NAT is ingesteld lukt dit echter niet. We kunnen echter in de advanced config van de virtualbox NAT netwerkkaart, port forwarding inschakelen:
     
    vbox-port-forwarding

     
    Nu kan ik een verbinding maken met de server via:
     
    $ ssh localhost -p 2222 -l user
     
    Het netwerk is als volgt geconfigureerd:

    # The loopback network interface
    auto lo
    iface lo inet loopback
     
    # The primary network interface
    auto eth0
    iface eth0 inet dhcp
     
    auto eth1
    iface eth1 inet static
    address 172.16.0.1
    netmask 24

     
    We installeren nfs-kernel-server

    $ sudo apt-get install nfs-kernel-server
    Reading package lists... Done
    Building dependency tree        
    Reading state information... Done
    The following extra packages will be installed:
    keyutils libgssglue1 libnfsidmap2 libtirpc1 nfs-common rpcbind
    Suggested packages:
    open-iscsi watchdog
    The following NEW packages will be installed:
    keyutils libgssglue1 libnfsidmap2 libtirpc1 nfs-common nfs-kernel-server
    rpcbind
    0 upgraded, 7 newly installed, 0 to remove and 3 not upgraded.
    Need to get 460 kB of archives.
    After this operation, 2,049 kB of additional disk space will be used.
    Do you want to continue? [Y/n] y

     
    Ik maak een testdirectory met te sharen files:

    $ sudo mkdir -p /srv/solarsystem/mars
    $ sudo mkdir /srv/solarsystem/pluto
    $ cd /srv/solarsystem/mars/
    $ sudo touch deimos phobos
    $ cd ../pluto
    $ sudo touch charon stix nix kerberos

     
    Ik stel de /etc/exports file in:

    # /etc/exports: the access control list for filesystems which may be exported
    #       to NFS clients.  See exports(5).
    #
    # Example for NFSv2 and NFSv3:
    # /srv/homes       hostname1(rw,sync,no_subtree_check) 
    #
    # Example for NFSv4:
    # /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
    # /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
    /srv/solarsystem   172.16.0.2(rw,sync,no_subtree_check)

    Wijzigingen in de /etc/exports file moeten worden ingeladen met een service reload:
     
    $ sudo service nfs-kernel-server reload
    Re-exporting directories for NFS kernel daemon... [ OK ]
     

  3. de client zijde
     
    We brengen het netwerk van de client in orde: we zetten avahi-daemon en network-manager uit.
     
    /etc/network/interfaces ziet er aangepast zo uit:
    # interfaces(5) file used by ifup(8) and ifdown(8)
    auto lo
    iface lo inet loopback
     
    auto eth0
    iface eth0 inet static
    address 172.16.0.2
    netmask 24
    # gateway 172.16.0.1
    # dns-nameservers 10.28.100.20

    Als je er in slaagt in de test-omgeving de nfs-server om te schakelen als nat-router kun je de out-commented gateway en dns ook toevoegen.
     
    Om nfs te testen maken we een mountpoint en voeren we een mount-commando uit:
     
    sudo mount -t nfs 172.16.0.1:/srv/solarsystem /mnt/solarsystem/
     
    Dit werkt: we kunnen met ls in de directory structuur, en met touch kunnen we aanpassingen maken:

    stien@nfscl-173 ~ $ ls /mnt/solarsystem/ -R
    /mnt/solarsystem/:
    earth  mars  pluto  venus
    /mnt/solarsystem/earth:
    moon
    /mnt/solarsystem/mars:
    deimos  phobos
    /mnt/solarsystem/pluto:
    charon  kerberos  nix  stix
    /mnt/solarsystem/venus:
     
    stien@nfscl-173 ~ $ mkdir /mnt/solarsystem/mercury
    stien@nfscl-173 ~ $ ls -l /mnt/solarsystem/
    total 20
    drwxr-xr-x 2 stien stien 4096 Jun  3 10:13 earth
    drwxrwxrwx 2 root   root 4096 Jun  3 09:56 mars
    drwxr-xr-x 2 stien stien 4096 Jun  3 11:09 mercury
    drwxrwxrwx 2 root   root 4096 Jun  3 09:56 pluto
    drwxrwxr-x 2 ludo   ludo 4096 Jun  3 10:18 venus

     
    Nu we zeker zijn dat onze mount werkt kunne we deze toevoegen aan de /etc/fstab

    # <file system> <mount point>   <type>  <options>       <dump>  <pass>
    # / was on /dev/sda1 during installation
    UUID=990f7a23-5364-4fde-8edf-83e213ae88af /               ext4    errors=remount-ro 0       1
    # swap was on /dev/sda5 during installation
    UUID=22e1d7e4-af54-4f42-a24c-4dd1aad01a0c none            swap    sw              0       0
    # onze NFS share
    172.16.0.1:/srv/solarsystem /mnt/solarsystem/ nfs defaults  0   0

    Ik herstart mijn test-client-machine ...
    ... en alles werkt:
     
    $ mount
    ...
    172.16.0.1:/srv/solarsystem on /mnt/solarsystem type nfs (rw,vers=4,addr=172.16.0.1,clientaddr=172.16.0.2)
    ...