服务器(linux)磁盘挂载nfs

简介: 笔者项目中此前有这么个需求,需要支持文件进行预览,文件的存储位置都在后端服务器上,想要支持预览是比较困难的(若是在前端服务器上则比较方便),因为无法做到跨服务器之间的静态文件预览,然后解决这个问题的思路就设定在了将后端服务器的文件所在位置挂载到前端服务器上,然后再使用nginx的反向代理,将文件地址代理出去,这样就可以实现文件预览功能了。方案确定以后就是技术选型了,最后确定使用了nfs来解决服务器之间的磁盘挂载,当然不止nfs可以实现,其他也可以。这里对nfs的使用做一次总结。

一、需求背景



笔者项目中此前有这么个需求,需要支持文件进行预览,文件的存储位置都在后端服务器上,想要支持预览是比较困难的(若是在前端服务器上则比较方便),因为无法做到跨服务器之间的静态文件预览,然后解决这个问题的思路就设定在了将后端服务器的文件所在位置挂载到前端服务器上,然后再使用nginx的反向代理,将文件地址代理出去,这样就可以实现文件预览功能了。方案确定以后就是技术选型了,最后确定使用了nfs来解决服务器之间的磁盘挂载,当然不止nfs可以实现,其他也可以。这里对nfs的使用做一次总结。


二、使用nfs实现多服务器之间磁盘挂载



1.nfs安装


# ubuntu 安装nfs
sudo apt-get install -y nfs-kernel-server
# centos 安装nfs
sudo yum install nfs-utils rpcbind


2.nfs使用


nfs使用不难,只需要很少量的配置即可,下面来展示下这个配置


2.1服务端配置


服务端负责把文件共享出去,我们相当于把某个文件夹暴露给某个ip或者暴露在公网环境下。


# 先安装nfs
# 编辑服务端配置文件
vim /etc/exports
# 添加共享信息:将本地的/data目录共享给192.168.150.166,并让该ip拥有对该目录的rw权限
/data 192.168.150.166(rw)
# 重启nfs
systemctl restart  nfs-server.service
# rpc如果没有启动的话,这里启动下就行,启动过则无需重启
systemctl start rpcbind.service
# 重载 /etc/exports
exportfs -rv


2.2客户端配置


客户端负责将本地的某个文件夹与服务端建立连接,这样就可以在本地操作远端服务器目录了。

# 先安装nfs
# 启动nfs
systemctl restart  nfs-server.service
systemctl restart rpcbind.service
# 与服务端建立连接:将本地的mnt挂载到 192.168.150.167:/data 目录下
mount  -t nfs 192.168.150.167:/data /mnt
# 查看挂载是否成功,挂载成功的话会能看到成功挂载的信息
df -h
# 客户端取消挂载:将本地的mnt挂载进行取消
umount /mnt


一个服务端是可以同时被n个客户端进行挂载的,所以服务端与客户端其实是1对n的关系。


3.nfs介绍


上面说了是啥,这里介绍下他的原理。原理都是网络上搜的,作为了解。


3.1nfs是什么


NFS是一种基于TCP/IP 传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源


NAS存储: NFS服务的实现依赖于RPC (Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。需要安装nfs-utils、 rpcbind 软件包来提供NFS共享服务,前者用于NFS共享发布和访问,后者用于RPC支持。手动加载NFS共享服务时,应该先启动rpcbind, 再启动nfs。

nfs端口:2049

RPC端口:111


704c5507df174eb08a22e967db84c7e6.png


3.2nfs特点


采用TCP/IP传输网络文件

安全性低

简单易操作

适合局域网环境


3.3共享时权限选项


常用的赋予权限类型,如下命令:

# 将本地的/data目录共享给192.168.150.166,该ip对于该目录及文件具有括号内的这些权限
/data 192.168.150.166(rw,sync,no_subtree_check,no_root_squash)


下面是权限的所有可选项:

ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID


3.4其他常用命令


# 服务端命令,查看服务端共享出去的文件信息
exportfs -v 
# 服务端命令,重新加载配置文件,通常这么使用:exportfs -rv
exportfs -r


三、实践中碰到的问题



1.挂载时报错:mount.nfs: Stale file handle


这个报错笔者这里是因为之前客户端挂载过别的服务器,但是服务端直接将挂载取消了,这里再从客户端进行别的挂载就报了这个错误,只需要执行以下命令即可解决该问题

# /mnt是之前挂载的目录
umount -lf /mnt


2.共享时报错:exportfs: does not support NFS export


解决办法:查看文件类型:cat /etc/fstab,若文件类型不是ext4则无法正常共享,若本来就是挂载的文件夹也是无法共享的。

相关文章
|
6月前
|
存储 数据挖掘 数据库
服务器数据恢复—服务器raid磁盘出现故障的数据恢复案例
一台服务器中有一组由三块SAS硬盘组建的raid阵列。服务器上部署的数据库存储在D分区,数据库备份存储在E分区。 服务器上一块硬盘指示灯显示红色。D分区不可识别。E分区虽然可以识别,但是E分区拷贝文件报错。 管理员重启服务器,先离线的硬盘上线开始同步数据,同步没有完成的情况下管理员将服务器强制关机,之后没有动过服务器。
|
5月前
|
存储 监控 Linux
Linux: 检测磁盘坏块 你得会吧!
Linux: 检测磁盘坏块 你得会吧!
312 19
Linux: 检测磁盘坏块 你得会吧!
|
4月前
|
Linux
在线对Linux进行磁盘扩容的技术指南。
综上所述,Linux磁盘扩容的过程,重要的不仅是技术,更是对每一步骤的深刻理解和投入的爱心。只要手握正确的工具,我们不仅能满足"孩子"的成长需求,还能享受其中的乐趣和成就。
245 10
|
6月前
|
弹性计算 Ubuntu 网络安全
ECS磁盘使用率异常升高,BPS,IOPS飙升
我刚开了一个2C4G的ECS,运行Ubuntu 20.04,常出现无响应、SSH断开等问题。原因是未配置swap,导致内存过高时磁盘写入频繁。解决办法在文章里。
479 72
|
5月前
|
监控 固态存储 Linux
如何判断Linux磁盘是SSD还是HDD?
总的来说,判断磁盘是SSD还是HDD并不复杂,只需要使用正确的命令和方法,就可以轻松得到结果。希望这些信息对你有所帮助,如果你还有其他问题,欢迎随时提问。
458 15
|
10月前
|
缓存 网络协议 测试技术
NFS挂载信息如何调整?
NFS挂载信息如何调整?
406 3
|
6月前
|
Linux
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
523 10
|
6月前
|
存储 人工智能 运维
阿里云操作系统控制台——解决服务器磁盘I/O故障
阿里云操作系统控制台——解决服务器磁盘I/O故障
186 12
|
6月前
|
弹性计算 固态存储 Linux
课时4:第4天:云服务器磁盘管理
欢迎收看玩转云服务器ECS系列课程,今天我们来学习第四课:云服务器磁盘的管理。这课有三个小节。 1. 磁盘有什么用 2. 磁盘分区与挂载 3. 扩容磁盘
101 1
|
6月前
|
存储 运维 数据挖掘
服务器数据恢复—Raid5磁盘阵列数据恢复案例
服务器数据恢复环境: 某公司一台存储上有一组由15块硬盘组建的raid5阵列。raid5阵列上层是一个xfs裸分区,起始位置是0扇区。 服务器故障: raid5阵列中有一块硬盘出现故障掉线,热备盘自动上线同步数据,数据同步还没有完成的情况下磁盘阵列中又有一块硬盘掉线,数据同步过程中断,阵列崩溃。