NFS, Network File System wordt gebruikt om bestanden tussen linux/unix systemen te delen. Met NFS kunnen gebruikers bestanden op andere computers gebruiken alsof ze lokaal aanwezig zijn.
NFS heeft veel praktische toepassingen. Een paar voorbeelden:
NFS bestaat uit een server (aanbieder) en één of meer clients (gebruikers). De client gebruikt de gegevens die zijn opgeslagen op de server. Dit werkt enkel als enkele processen goed werken.
Deze diensten (deamons) moeten op de server draaien:
We gebruiken twee systemen. Een NFS server (laptop) en NFS client (main). De NFS server heeft als IP-adres 192.168.1.3.
Hoewel NFS in de Linux kernel is ingebakken, moet je toch het pakket nfs-kernel-server met allerlei hulpmiddelen installeren:
dany@laptop:~> sudo zypper install nfs-kernel-server root's password: Gegevens van installatiebron laden... Lezen van geïnstalleerde pakketten... Afhankelijkheden tussen pakketten oplossen... The following NEW package is going to be installed: nfs-kernel-server 1 new package to install. Totale downloadgrootte: 122,7 KiB. Reeds in de cache: 0 B. Na de operatie zal aanvullend 436,6 KiB worden gebruikt. Doorgaan? [j/n/? alle opties tonen] (j): package nfs-kernel-server-1.3.0-11.1.x86_64 wordt opgehaald (1/1), 122,7 KiB (436,6 KiB uitgepakt) Ophalen: nfs-kernel-server-1.3.0-11.1.x86_64.rpm ....................................................[gereed (172,1 KiB/s)] Controleren op conflicten tussen bestanden: .......................................................................[gereed] (1/1) Installeert: nfs-kernel-server-1.3.0-11.1 ...................................................................[gereed]
Activeer en start de rpcbind en nfs diensten met de volgende opdrachten:
dany@laptop:~> sudo systemctl enable rpcbind.service dany@laptop:~> sudo systemctl start rpcbind.service dany@laptop:~> sudo systemctl enable nfsserver.service dany@laptop:~> sudo systemctl start nfsserver.service
Creëer de map /var/nfs_share op de server en zorg dat gebruikers lees en schrijfrechten krijgen:
dany@laptop:~> sudo mkdir /var/nfs_share dany@laptop:~> sudo chmod 755 /var/nfs_share/
Deel (exporteer) de map op de server door het /etc/exports configuratiebestand aan te passen (bijvoorbeeld met de teksteditor joe):
sudo joe /etc/exports
Voeg de te delen map toe aan het configuratiebestand /etc/exports:
# See the exports(5) manpage for a description of the syntax of this file. # This file contains a list of all directories that are to be exported to # other computers via NFS (Network File System). # This file used by rpc.nfsd and rpc.mountd. See their manpages for details # on how make changes in this file effective. /var/nfs_share/ 192.168.1.0/24(rw,sync,no_root_squash,no_all_squash)
Sla de aanpassing op en sluit de teksteditor af.
Gebruikte opties voor de gedeelde map:
Na elke aanpassing van het /etc/export configuratiebestand moet je de NFS dienst op de hoogte brengen van de verandering door de volgende opdracht uit te voeren:
dany@laptop:~> sudo exportfs -a exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "192.168.1.0/24:/var/nfs_share/". Assuming default behaviour ('no_subtree_check'). NOTE: this default has changed since nfs-utils version 1.0.x
En het herstarten van de rpcbind en nfs diensten:
dany@laptop:~> sudo systemctl restart rpcbind.service dany@laptop:~> sudo systemctl restart nfsserver.service
Om de NFS gedeelde mappen aan de client computers aan te kunnen bieden, moet je NFS server poort van de firewall openen:
dany@laptop:~> sudo yast2 firewall services add zone=EXT service=service:nfs-kernel-server
Moderne Linux distributies zoals openSUSE Leap 42.1 installeren standaard NFS ondersteuning voor client computers.
Creëer een map (/mnt/nfs_share) om de gedeelde NFS map aan te koppelen:
dany@main:~> sudo mkdir /mnt/nfs_share root's password:
Geef deze map de nodige lees- en schrijfrechten:
dany@main:~> sudo chmod -R 777 /mnt/nfs_share/
Open de NFS client firewall poort om communicatie met de NFS server toe te laten:
dany@main:~> sudo yast2 firewall services add zone=EXT service=service:nfs-client
Koppel de NFS gedeelde map aan de door u aangemaakte map:
dany@main:~> sudo mount -t nfs 192.168.1.3:/var/nfs_share/ /mnt/nfs_share/
Controleer of de NFS gedeelde map gekoppeld is:
dany@main:~> sudo df -h Bestandssysteem Grootte Gebruikt Besch Geb% Aangekoppeld op devtmpfs 5,9G 0 5,9G 0% /dev tmpfs 5,9G 2,1M 5,9G 1% /dev/shm tmpfs 5,9G 2,4M 5,9G 1% /run tmpfs 5,9G 0 5,9G 0% /sys/fs/cgroup /dev/sdc2 324G 120G 204G 37% / ... /dev/sdc2 324G 120G 204G 37% /boot/grub2/i386-pc 192.168.1.3:/var/nfs_share 79G 12G 67G 15% /mnt/nfs_share
Of:
dany@main:~> sudo mount sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) devtmpfs on /dev type devtmpfs (rw,nosuid,size=6121508k,nr_inodes=1530377,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,mode=755) cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) ... cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) /dev/sdc2 on / type btrfs (rw,relatime,ssd,space_cache,subvolid=259,subvol=/@/.snapshots/1/snapshot) efivarfs on /sys/firmware/efi/efivars type efivarfs (rw,nosuid,nodev,noexec,relatime) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=30,pgrp=1,timeout=300,minproto=5,maxproto=5,direct) mqueue on /dev/mqueue type mqueue (rw,relatime) debugfs on /sys/kernel/debug type debugfs (rw,relatime) hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime) fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime) /dev/sda2 on /boot/efi type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro) /dev/sda4 on /windows/C type fuseblk (rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096) /dev/sdb2 on /media/NTFS type fuseblk (rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096) /dev/sdb3 on /usr/home/Documents type xfs (rw,relatime,attr2,inode64,noquota) /dev/sdc2 on /.snapshots type btrfs (rw,relatime,ssd,space_cache,subvolid=258,subvol=/@/.snapshots) ... /dev/sdc2 on /boot/grub2/i386-pc type btrfs (rw,relatime,ssd,space_cache,subvolid=260,subvol=/@/boot/grub2/i386-pc) /dev/sdb3 on /srv/www/htdocs type xfs (rw,relatime,attr2,inode64,noquota) vmware-vmblock on /run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other) gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=100) tracefs on /sys/kernel/debug/tracing type tracefs (rw,relatime) 192.168.1.3:/var/nfs_share on /mnt/nfs_share type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.4,local_lock=none,addr=192.168.1.3)
Om bij elke start van het systeem NFS gedeelde mappen automatisch te koppelen, moet je het /etc/fstab bestand aanpassen:
sudo joe /etc/fstab
en voeg je de volgende regel toe:
192.168.1.3:/var/nfs_share/ /mnt/nfs_share/ nfs rw,sync,hard,intr 0 0
Sla de aanpassing op, sluit de teksteditor en controleer of de aanpassing correct werkt:
sudo mount -a
Alles is OK als je geen (fout)meldingen krijgt. Herstart nooit een systeem met fouten in het /etc/fstab configuratiebestand, de kans is namelijk zeer groot dat uw systeem niet meer opstart. Klaar, de NFS gedeelde map is nu steeds voor de client beschikbaar.