Linux NFS共享目录配置及开机自动挂载
在需要被挂载的服务器上安装nfs-kernel-server
1 | sudo apt install nfs-kernel-server |
/etc/exports
通过此文件配置共享目录,样例
1 | # /etc/exports: the access control list for filesystems which may be exported |
这里配置了/data/share为共享目录,允许从192.168.1.157进行读写操作,允许从其他任意IP进行只读操作。
把共享目录的owner改成 nobody:nogroup
1 | sudo chown nobody:nogroup /data/share |
设置共享目录的权限
1 | sudo chmod 777 /data/share |
重新加载配置文件
1 | sudo exportfs -a |
在需要挂载的服务器需要安装nfs-common
1 | apt install nfs-common |
挂载命令样例 ,把140上的/data/share共享目录挂载到本地/mnt/140share
1 | mount 192.168.1.140:/data/share /mnt/140share |
端口
使用到的端口,如果有防火墙需要设置
111/tcp+udp
2049/tcp
不同版本的NFS服务器也可能需要更多
1 | Data ONTAP: |
另外可能用到一个随机端口,在/etc/default/nfs-kernel-server中通过
1 | RPCMOUNTDOPTS="--port 33333" |
可以使之固定为33333。
更改设置后重启服务
1 | service nfs-kernel-server restart |
如果希望系统启动时自动加载文件系统
/etc/fstab
通过此文件配置系统启动时自动挂载
样例
1 | # <file system> <mount point> <type> <options> <dump> <pass> |
重新加载配置文件
1 | sudo mount -a |
配置中type是被挂载的路径的类型
常用的类型有:
nfs表示远程linux的共享路径
cifs表示远程windows的共享路径
ext4表示本地ext4路径
配置中options是挂载选项,在挂载windows目录时,通过以下方式指定用户名和密码
1 | defaults,auto,username=MZhDai,password=******,dir_mode=0777,file_mode=0777 |
另外挂载windows目录需要 mount.cifs 支持,如果没有可以通过以下命令安装
1 | sudo apt install cifs-utils |
挂载命令通过 -o指定选项
1 | sudo mount.cifs //192.168.1.107/f /mnt/107f -o user=MZhDai,pass=******,dir_mode=0777,file_mode=0777 |
还有常用的选项如
1 | ro :只读挂载 |
.cifs 可以省略,mount命令会自动识别需要挂载的路径类型
访问挂载的共享目录卡住
执行
1 | ls /mnt |
或
1 | df -h |
时卡住
可以使用
1 | strace ls /mnt |
或
1 | strace df -h |
查看命令执行的过程,看看最终卡在哪一步,比如卡在访问/mnt/abc
查看挂载参数
1 | cat /proc/mounts |
查看服务器支持的版本
1 | nfsstat -s |
卸载挂载点
1 | umount <挂载点> |
如果卡住试下强制卸载
1 | umount -f <挂载点> |
或
1 | umount -lf <挂载点> |
如果还是卸载失败可以看一下哪个进程在使用挂载点下的文件
1 | lsof|grep <挂载点> |
考虑杀死进程后再卸载
指定挂载使用的NFS协议版本
1 | mount.nfs XXX XXX -o nfsvers=3 |
一般是v4版本卡住,改用v3可以解决
OSError: [Errno 37] Unable to open file
增加nolock挂载参数
1 | mount.nfs XXX XXX -o nfsvers=3,nolock |