Einrichten eines NFS-Servers und -Clients auf CentOS 7.2
In diesem Handbuch wird erklärt, wie Sie unter CentOS 7 einen NFS-Server und einen NFS-Client einrichten. NFS steht für Network File System; über NFS kann ein Client auf eine entfernte Freigabe auf einem NFS-Server zugreifen (lesen, schreiben), als wäre sie auf der lokalen Festplatte. Ich werde einen CentOS 7.2 Minimal-Server als Basis für die Installation verwenden.
1 Vorbemerkung
Ich benutze hier zwei CentOS-Systeme:
- NFS-Server: server.example.com, IP-Adresse: 192.168.1.100
- NFS-Client: client.example.com, IP-Adresse: 192.168.1.101
Ich werde in diesem Tutorial den Nano-Editor verwenden, um Konfigurationsdateien zu bearbeiten. Nano kann auf diese Weise installiert werden.
yum -y install nano
2 Konfigurieren der Firewall
Ich empfehle, eine Firewall installieren zu lassen. Wenn Sie noch keine Firewall installiert haben und eine Firewall verwenden möchten, dann installieren Sie diese mit diesen Befehlen:
yum -y install firewalld
Starten Sie die Firewall und lassen Sie sie beim Booten starten.
systemctl start firewalld.service systemctl enable firewalld.service
Öffnen Sie anschließend die SSH- und NFS-Ports, um sicherzustellen, dass Sie sich über SSH für Admin-Zwecke und über NFS von unserem NFS-Client aus mit dem Server verbinden können.
firewall-cmd --permanent --zone=public --add-service=ssh firewall-cmd --permanent --zone=public --add-service=nfs firewall-cmd --reload
3 Installation von NFS
Server:
Auf dem NFS-Server, den wir betreiben:
yum -y install nfs-utils
Aktivieren und starten Sie dann den nfs-Serverdienst.
systemctl enable nfs-server.service systemctl start nfs-server.service
Kunde:
Auf dem Client können wir NFS wie folgt installieren (dies ist eigentlich dasselbe wie auf dem Server):
yum install nfs-utils
4 Verzeichnisse auf dem Server exportieren
Server:
Ich möchte die Verzeichnisse /home und /var/nfs dem Client zugänglich machen; deshalb müssen wir sie auf dem Server „exportieren“.
Wenn ein Client auf eine NFS-Freigabe zugreift, geschieht dies normalerweise als Benutzer nfsnobody. Normalerweise gehört das /home-Verzeichnis nicht nfsnobody (und ich empfehle nicht, seinen Besitzer in nfsnobody zu ändern!), und weil wir auf /home lesen und schreiben wollen, sagen wir NFS, dass Zugriffe als root erfolgen sollen (wenn unsere /home-Freigabe schreibgeschützt war, wäre das nicht nötig). Das Verzeichnis /var/nfs existiert nicht, so dass wir es erstellen und seinen Besitzer auf den Benutzer und die Gruppe nfsnobody ändern können.
mkdir /var/nfs chown nfsnobody:nfsnobody /var/nfs chmod 755 /var/nfs
Jetzt müssen wir /etc/exports ändern, wo wir unsere NFS-Freigaben „exportieren“. Wir spezifizieren /home und /var/nfs als NFS-Freigaben und sagen NFS, dass es Zugriff auf /home als root machen soll (um mehr über /etc/exports, sein Format und die verfügbaren Optionen zu erfahren, werfen Sie einen Blick auf
man 5 exports
)
nano /etc/exports
/home 192.168.1.101(rw,sync,no_root_squash,no_subtree_check) /var/nfs 192.168.1.101(rw,sync,no_subtree_check)
(Die Option no_root_squash bewirkt, dass /home als root aufgerufen wird.)
Wann immer wir /etc/exports ändern, müssen wir laufen:
exportfs -a
um die Änderungen wirksam zu machen.
5 Mounten der NFS-Freigaben auf dem Client
Kunde:
Zuerst erstellen wir die Verzeichnisse, in die wir die NFS-Freigaben einbinden wollen, z.B:
mkdir -p /mnt/nfs/home mkdir -p /mnt/nfs/var/nfs
Danach können wir sie wie folgt montieren:
mount 192.168.1.100:/home /mnt/nfs/home mount 192.168.1.100:/var/nfs /mnt/nfs/var/nfs
Sie sollten nun die beiden NFS-Freigaben in den Ausgaben von
df -h
[root@client ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 28G 1.7G 26G 7% / devtmpfs 909M 0 909M 0% /dev tmpfs 919M 0 919M 0% /dev/shm tmpfs 919M 8.6M 910M 1% /run tmpfs 919M 0 919M 0% /sys/fs/cgroup /dev/sda1 497M 208M 290M 42% /boot tmpfs 184M 0 184M 0% /run/user/0 192.168.1.100:/home 28G 1.2G 27G 5% /mnt/nfs/home 192.168.1.100:/var/nfs 28G 1.2G 27G 5% /mnt/nfs/var/nfs
und
mount
[root@client ~]# mount sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930320k,nr_inodes=232580,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,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/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu) cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) configfs on /sys/kernel/config type configfs (rw,relatime) /dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota) selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=25,pgrp=1,timeout=300,minproto=5,maxproto=5,direct) mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel) debugfs on /sys/kernel/debug type debugfs (rw,relatime) hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) nfsd on /proc/fs/nfsd type nfsd (rw,relatime) /dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700) 192.168.1.100:/home on /mnt/nfs/home type nfs4 (rw,relatime,vers=4.0,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.101,local_lock=none,addr=192.168.1.100) 192.168.1.100:/var/nfs on /mnt/nfs/var/nfs type nfs4 (rw,relatime,vers=4.0,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.101,local_lock=none,addr=192.168.1.100)
6 Prüfung
Auf dem Client können Sie nun versuchen, Testdateien auf den NFS-Freigaben zu erstellen:
Kunde:
touch /mnt/nfs/home/test.txt touch /mnt/nfs/var/nfs/test.txt
Gehen Sie nun auf den Server und prüfen Sie, ob Sie beide Testdateien sehen können:
Server:
ls -l /home/
[root@server1 ~]# ls -l /home/ total 0 drwx------. 2 administrator administrator 59 Jun 21 16:13 administrator -rw-r--r--. 1 root root 0 Jun 29 13:07 test.txt
ls -l /var/nfs
[root@server1 ~]# ls -l /var/nfs total 0 -rw-r--r--. 1 nfsnobody nfsnobody 0 Jun 29 13:07 test.txt
(Bitte beachten Sie die verschiedenen Eigentümer der Testdateien: auf die /home NFS-Freigabe wird als root zugegriffen, daher ist /home/test.txt im Besitz von root; auf die /var/nfs-Freigabe wird als nobody/65534 zugegriffen, daher ist /var/nfs/nfs/test.txt im Besitz von 65534.)
7 NFS-Freigaben beim Booten einbinden
Anstatt die NFS-Freigaben manuell auf dem Client zu mounten, können Sie /etc/fstab so ändern, dass die NFS-Freigaben beim Booten des Clients automatisch gemountet werden.
Kunde:
Öffnen Sie /etc/fstab und fügen Sie die folgenden Zeilen hinzu:
nano /etc/fstab
[...] 192.168.1.100:/home /mnt/nfs/home nfs rw,sync,hard,intr 0 0 192.168.1.100:/var/nfs /mnt/nfs/var/nfs nfs rw,sync,hard,intr 0 0
Anstelle von rw,sync,hard,intr können Sie verschiedene Aktivierungsoptionen verwenden. Um mehr über die verfügbaren Optionen zu erfahren, werfen Sie einen Blick auf
man nfs
Um zu testen, ob Ihre modifizierte /etc/fstab funktioniert, starten Sie den Client neu:
reboot
Nach dem Neustart sollten Sie die beiden NFS-Freigaben in den Ausgaben von
df -h
[root@client ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 28G 1.7G 26G 7% / devtmpfs 909M 0 909M 0% /dev tmpfs 919M 0 919M 0% /dev/shm tmpfs 919M 8.6M 910M 1% /run tmpfs 919M 0 919M 0% /sys/fs/cgroup /dev/sda1 497M 208M 290M 42% /boot tmpfs 184M 0 184M 0% /run/user/0 192.168.1.100:/home 28G 1.2G 27G 5% /mnt/nfs/home 192.168.1.100:/var/nfs 28G 1.2G 27G 5% /mnt/nfs/var/nfs
und
mount
[root@client ~]# mount sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930320k,nr_inodes=232580,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,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/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu) cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) configfs on /sys/kernel/config type configfs (rw,relatime) /dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota) selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=25,pgrp=1,timeout=300,minproto=5,maxproto=5,direct) mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel) debugfs on /sys/kernel/debug type debugfs (rw,relatime) hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) nfsd on /proc/fs/nfsd type nfsd (rw,relatime) /dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700) 192.168.1.100:/home on /mnt/nfs/home type nfs4 (rw,relatime,vers=4.0,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.101,local_lock=none,addr=192.168.1.100) 192.168.1.100:/var/nfs on /mnt/nfs/var/nfs type nfs4 (rw,relatime,vers=4.0,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.101,local_lock=none,addr=192.168.1.100)
8 Links
- Linux NFS: http://nfs.sourceforge.net/
- CentOS: http://www.centos.org/