如何在Debian 9上安装NFS共享

什么是网络文件系统(NFS)

网络文件系统(NFS)是一种文件系统协议,允许类Unix系统的用户通过网络访问文件,就像使用本地存储一样。这对于跨Internet上的多个腾讯云CVM服务器或其他计算机共享文件很有用。例如,您可以通过NFS共享用户或系统配置文件的主目录。

但是,请注意NFS(版本3及更早版本)的一个限制是服务器和客户端必须限制为本地或受信任的专用网络,因为数据从一台计算机未加密传输到另一台计算机。NFS版本4解决了这个缺点,它依赖于Kerberos进行身份验证和加密。然而,设置用于NFS的Kerberos相当复杂,并且需要密钥分发中心,这超出了本教程的范围。

本教程将指导您完成两个腾讯云CVM服务器的设置; 一个是NFS服务器,另一个是客户端。在此示例中,两个腾讯云CVM服务器都位于同一数据中心,并将使用其专用IP地址进行通信,因此您的数据永远不会离开腾讯云CVM服务器的网络。警告:其他NFS设置可能会通过公共Internet发送流量。

注意 本教程是为非root用户编写的。需要提升权限的命令带有sudo前缀。

准备

  • 将两个Debian 9腾讯云CVM服务器部署在同一个数据中心。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 将腾讯云CVM服务器配置为使用私有IP。

NFS服务器设置

选择一个腾讯云CVM服务器作为您的NFS服务器。并按照以下说明进行配置。

  • 更新软件包来源:
sudo apt update
  • 安装NFS服务器包nfs-kernel-server
sudo apt install nfs-kernel-server
  • 安装Portmapper软件包portmap
sudo apt-get install portmap
  • 默认情况下,通过将以下行添加到hosts.deny文件中来阻止访问NFS使用的服务。
   rpcbind mountd nfsd statd lockd rquotad : ALL
  • 允许访问NFS用于客户端和localhost的服务。将以下行添加到您的hosts.allow文件中,替换example_IP为客户端腾讯云CVM服务器的私有IPv4地址。
    rpcbind mountd nfsd statd lockd rquotad : 127.0.0.1 : allow
    rpcbind mountd nfsd statd lockd rquotad : example_IP : allow
    rpcbind mountd nfsd statd lockd rquotad : ALL : deny
  • 在本地文件系统中创建一个目录,以用作NFS共享的root位置:
sudo mkdir /var/nfsroot
  • 为NFS共享的root分配适当的所有权:
sudo chown nobody:nogroup /var/nfsroot/
  • 将以下行添加到/etc/exports文件中,替换example_IP为客户端腾讯云CVM服务器的私有IPv4地址。确保/ 17和左括号之间没有空格,并且文件末尾有一个空行。
    /var/nfsroot     example_IP/17(rw,root_squash,subtree_check)
  • 使用以下命令更新导出的文件系统表:
sudo exportfs -ra
  • 在服务器腾讯云CVM服务器上重新启动NFS服务以使更改生效:
sudo systemctl restart nfs-kernel-server

完成!现在,您在其中一个腾讯云CVM服务器上已经有了一个基本NFS服务器,并配置为将/ var / nfsroot目录提供给第二个腾讯云CVM服务器。

NFS客户端设置

第二个腾讯云CVM服务器将是您的NFS客户端。请按照以下说明进行配置。

  • 更新软件包来源:
sudo apt update
  • 安装NFS客户端软件包nfs-common
sudo apt install nfs-common
  • 在客户端腾讯云CVM服务器的本地文件系统中创建一个目录,作为远程文件系统的挂载点:
sudo mkdir /mnt/remotenfs
  • 使用您喜欢的编辑器将以下行添加到客户端的fstab文件中,替换example_IP为服务器腾讯云CVM服务器的私有IPv4地址。
1   example_IP:/var/nfsroot /mnt/remotenfs nfs rw,async,hard,intr,noexec 0 0
  • 通过运行以下命令挂载文件系统:
sudo mount /mnt/remotenfs

你已经完成了!现在,从客户端腾讯云CVM服务器,您可以访问腾讯云CVM服务器 NFS服务器上托管的远程文件系统。您可以通过将更多客户端添加到服务器的/etc/exports文件来添加更多客户端,然后为每个客户端重复客户端设置。

高级配置

NFS提供各种挂载选项。在本教程中,我们使用了读写访问,异步文件传输和可中断硬等待的标准行为,但您可以使用以下选项在NFS共享上配置其他行为。

客户端选项

这些选项可以在fstab中指定,也可以使用带有-o开关的mount命令手动指定,后跟逗号分隔的挂载选项列表。

  • rw:读/写文件系统。
  • ro:只读文件系统。远程NFS客户端无法修改文件系统。
  • hard:如果服务器出现故障,使用存储在NFS上的文件的应用程序将始终等待。除非设置了选项intr,否则用户无法终止该过程。
  • soft:如果服务器出现故障,使用存储在NFS上的文件的应用程序将等待指定的时间(使用timeo选项),之后将抛出错误。
  • intr:允许用户中断等待NFS请求的进程。
  • timeo = <num>:用于soft选项。指定NFS请求的超时。
  • nolock:禁用文件锁。适用于较旧的NFS服务器。
  • noexec:禁用NFS共享上的二进制文件或脚本的执行。
  • nosuid:阻止用户获得NFS共享上文件的所有权。
  • rsize = <num>:设置读取块数据大小。在NFSv2和NFSv3上默认为8192,在NFSv4上默认为32768。
  • wsize = <num>:设置写入块数据大小。在NFSv2和NFSv3上默认为8192,在NFSv4上默认为32768。

服务器选项

可以在/etc/exports条目中指定这些选项:

  • rw:读/写文件系统。
  • ro:强制客户端仅以只读文件系统模式进行连接。
  • no_root_squash:客户端计算机上的root帐户将具有与服务器计算机上的root相同的权限级别。该选项有安全隐患; 除非你确定需要,否则不要使用它。另一方面,root_squash导致客户端上的root与服务器上的nobody具有相同的访问类型 - 从而阻止客户端上的root将不需要的文件传播到其他文件。
  • no_subtree_check:禁用部分卷导出的文件位置检查。此选项将加快全量导出的传输速度。
  • 同步:强制所有传输在同步模式下运行,因此所有客户端都将等待,直到其操作完成。这可以避免在服务器崩溃时数据损坏。

示例

在客户端的/ mnt / remotenfs中创建一个名为testfile.txt的测试文件::

sudo echo "Hello World" > /mnt/remotenfs/testfile.txt

如果一切按预期进行,则/mnt/remotenfs/testfile.txtnobody:nogroup拥有。 你可以使用以下命令查看

ls -l /mnt/remotenfs/testfile.txt

同样,如果您这样做,则应在服务器中显示相同的权限

ls -l /var/nfsroot/testfile.txt

现在让我们用服务器上的/ etc / exports中的no_root_squash替换root_squash,并更新导出共享表,如上面NFS Server Setup 中的替换example_IP为客户端腾讯云CVM服务器的私有IPv4地址步骤中所述。 最后,我们将通过在同一目录(/ mnt / remotenfs)中创建另一个测试文件(testfile2.txt)来重复上述操作:

sudo echo "Hi everyone" > /mnt/remotenfs/testfile2.txt

如果您在客户端或服务器上检查testfile2.txt的所有权,您将看到它现在由root:root拥有。 这些简单的例子说明了root_squashno_root_squash的用法和含义。 为了您的安全,请不要忘记删除后者并尽快在/ etc / exports中重新添加前者。

了解更多

想要了解更多关于NFS的内容请前往腾讯云+社区学习。


参考文献:《How to Mount NFS Shares on Debian 9》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

SQL Server数据库row_number() over() 来自动产生行号

本文我们主要介绍了SQL Server数据库用row_number() over() 来自动产生行号的一系列的操作,希望本次的介绍能够对您有所帮助。

96510
来自专栏L宝宝聊IT

Shell脚本应用(if语句的应用示例)

20460
来自专栏性能与架构

使用 twemproxy 构建 Redis 集群

twemproxy 简介 twemproxy(又称 nutcracker)是 Twtter 贡献的一个 轻量级 高性能 的 redis/memcached 代理...

34240
来自专栏北京马哥教育

原创投稿 | 如何实现nagios发送通知邮件

前言 上一篇已经介绍了nagios如何实现对主机及服务的监控,尽可能实现对系统运行状态的全面监控只是初级目标,nagios还可以借助smtp服务发送通知信息给指...

50060
来自专栏Java架构师历程

maven介绍

1 如果使用了spring,去spring的官网下载jar包;如果使用hibernate,去hibernate的官网下载Jar包;如果使用Log4j,去log4...

53050
来自专栏Java后端生活

Linux(十四)网络配置

24750
来自专栏Java帮帮-微信公众号-技术文章全总结

05.Git分支管理

05.Git分支管理 Git 分支管理 几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。...

38470
来自专栏Android知识点总结

SpringBoot-03-之热部署

14040
来自专栏河湾欢儿的专栏

webpack

npm install webpack -g npm init -y npm install webpack --save-dev

11610
来自专栏极客慕白的成长之路

CodeBlock最新版本离线安装使用教程

26830

扫码关注云+社区

领取腾讯云代金券