在微服务生产搭建中,作为文件服务器时,很大几率会用到nfs来作为共享磁盘的解决方案。思路是把一个机器单独作为存储盘,安装nfs服务端共享,其他多个机器作为客户端,安装nfs客户端,通过ip把nfs服务端共享的文件夹挂载到本地的某个文件夹上,这样就像是本地的磁盘一样使用。主要会用到nfs-kernel-server(服务端) nfs-common(客户端)这两个软件,mount(挂载) umount(卸载)这两个命令。
这里的本地的某个文件夹不必是空的,可以不为空,挂载之后,之前的文件会被盖住看不到,卸载之后,发现文件还在。
在家庭环境中,也可以用nfs共享一个磁盘出来,其他电脑挂载这个,但是这个挂载跟被共享的磁盘格式有关,比如共享出来的是linux常用的ext4的格式,那mac无法挂载,linux之间可以正常挂载,共享出来的是exfat格式,那mac和linux都无法挂载。有成功的朋友可以留言给我处理方法。------mac电脑就是麻烦,虽然命令行很像linux,但是还是和linux区别很大的。对于后端来说,linux简直无法取代。
下面记录一下配置方法,ubuntu为例:
步骤
假设我们有两台linux机器,一台作为服务端,一台作为客户端。
服务端配置
服务端机器上安装nfs-kernel-server
sudo apt install nfs-kernel-server
新建要分享的文件夹,并授权当前用户访问
cd /home/zhaohy
mkdir nfs-root
sudo chmod -R 777 nfs-root/
sudo chown $USER:$USER nfs-root/ -R
如果是要共享其他文件夹,也都是这样的方式。
编辑/etc/exports文件配置服务器共享文件目录
# /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) hostname2(ro,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)
/home/zhaohy/nfs-root *(insecure,rw,sync,no_root_squash)
/media/zhaohy/扩展磁盘2/nfs-root *(insecure,rw,sync,no_root_squash)
上面写了两个共享目录,可以配置多个,不管是本地磁盘还是外接存储磁盘或者移动硬盘都可以。
其中*代表任何主机都可以访问。
insecure代表允许客户端使用大于1024的端口连接
rw代表以读写方式共享
sync代表客户端写入的数据立即写入到磁盘里去(默认),对应的还有async:客户端写入的数据先保存到内存中再异步写入到磁盘里去。
no_root_squash:允许使用root用户,root_squash:把root用户映射为匿名用户(默认),all_squash:把所有用户映射为匿名用户。总觉得匿名用户不太安全。
启动nfs服务
systemctl restart rpcbind
sudo /etc/init.d/nfs-kernel-server start 或 sudo systemctl start nfs-server
另外的命令还有:
重启:
systemctl restart rpcbind
sudo /etc/init.d/nfs-kernel-server restart 或 sudo systemctl restart nfs-server
停止:
sudo /etc/init.d/nfs-kernel-server stop
查看状态:
sudo /etc/init.d/nfs-kernel-server status
客户端配置
在另一台linux机器上安装 nfs-common
sudo apt install nfs-common
挂载nfs服务端共享的磁盘
sudo mount -t nfs 192.168.0.120:/home/zhaohy/nfs-root /home/zhaohy/nfs-share -o nolock
这里的192.168.0.120:/home/zhaohy/nfs-root 是服务端ip指定的nfs共享文件目录。
理论上这样就能挂载成功了。
卸载命令是
sudo umount /home/zhaohy/nfs-share
如果是exfat格式的外接硬盘,nfs共享都失败了,应该是不支持这种格式,有兴趣的朋友可以自己把移动u盘格式化为exfat尝试一下,看看有没有什么解决方案。
ubuntu把移动硬盘格式化exfat的步骤为:
安装exfat-fuse
sudo apt install exfat-fuse
插入u盘,找到u盘的设备ID
sudo fdisk -l
比如我这里的ID是/dev/sdc4
给这个磁盘ID取个别名,比如这里取名usb
sudo mkfs.exfat -n usb /dev/sdc4
运行 fsck 检查,以确保格式化正确:
sudo fsck.exfat /dev/sdc4
参考:
http://www.yaotu.net/biancheng/61798.html
https://blog.csdn.net/m0_59474046/article/details/123802030
https://blog.csdn.net/hansome_hong/article/details/112341374