热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux树莓派和n1,树莓派斐讯N1搭建NFS

什么是NFS?1台Linux主机的磁盘可以通过网络挂载到其他Linux主机上,实现云盘效果。NFS是一套软件和协议,同时也是一种文件系统&

什么是NFS?

1台Linux主机的磁盘可以通过网络挂载到其他Linux主机上,实现云盘效果。

NFS是一套软件和协议,同时也是一种文件系统,可以直接把远程的磁盘挂载到本地使用。

我用NFS做什么?

我有1个斐讯N1盒子,但是内置的emmc存储空间很小,而且寿命很差。

我还有1个树莓派,它上面还插着1块SSD硬盘。

因此,我想把树莓派的SSD硬盘通过NFS挂载到斐讯N1上,这样斐讯N1也就有一块大磁盘可以用了,多省钱。

怎么搭建NFS呢?

非常简单,跟随我开始吧。

安装nfs

因为我的斐讯N1和树莓派其实都是Debian发行版,所以我实际参考了Debian的官方手册:https://wiki.debian.org/NFSServerSetup。

注意,在服务端以及客户端,都需要安装完全一样的nfs相关软件:

Shell

sudo apt install nfs-kernel-server portmap

1

sudoaptinstallnfs-kernel-serverportmap

nfs-kernel-server:NFS服务端,它会启动多个随机的监听端口用于各种用途。

portmap:古老的软件,nfs会把自己的监听端口注册给portmap,然后portmap对外提供查询服务,告知客户端NFS监听的实际端口。

启动nfs

在客户端和服务端都要启动!

Shell

sudo systemctl enable portmap

sudo systemctl start portmap

sudo systemctl enable nfs-server

sudo systemctl start nfs-server

1

2

3

4

5

sudosystemctlenableportmap

sudosystemctlstartportmap

sudosystemctlenablenfs-server

sudosystemctlstartnfs-server

导出目录(在服务端)

我现在登录树莓派了!

在服务端,需要配置共享哪些磁盘给客户端。

树莓派上,我计划把/home/pi/data共享出去,这个目录实际挂载的是一块SSD盘:

Shell

pi@raspberrypi:~ $ pwd

/home/pi

pi@raspberrypi:~ $ ll

total 4

drwxr-xr-x 7 pi pi 4096 Nov 20 17:52 data

1

2

3

4

5

pi@raspberrypi:~$pwd

/home/pi

pi@raspberrypi:~$ll

total4

drwxr-xr-x7pipi4096Nov2017:52data

编辑/etc/exports,将这块盘共享出去:

/home/pi/data *(rw,sync,all_squash,anonuid=1000,anongid=1000,no_subtree_check)

/home/pi/data:你要共享出去的目录

*:允许哪些客户端挂载,*表示任意客户端,也支持配置IP网段等限制方式。

(rw,sync,all_squash,anonuid=1000,anongid=1000,no_subtree_check):一些选项,下面逐一说明,

rw:允许客户端读写

sync:客户端写入后数据强制同步到服务端,可靠一些,但是写入会慢一些。

all_squash:无论客户端是什么登录用户,其创建/修改的文件后,文件的用户/组都设置为anonuid以及anongid。

anonuid:翻译过来是匿名uid,实际就是配置all_squash用的,所有修改的文件uid都是1000,而1000其实是服务端pi用户的linux user id。

anongid:匿名gid,所有修改文件的gid都是1000,实际就是服务端pi用户组的group id。

no_subtree_check:客户端访问时,服务端不检查共享目录的父级目录权限;否则一个/root/xxx的共享目录,对于客户端的uid=3用户来说是没有权限访问的,因为父目录/root对于a来说是没有权限的。

其实最难理解的就是squash以及anonuid/anongid的设定,其实NFS并不会认证用户,而是直接基于服务端和客户端的uid/gid做权限管理的。

NFS官方是建议服务端和客户端使用相同的用户名/组,对应相同的uid和gid,这样权限方面就比较一致。

那么,我上述的配置其实就是想实现:

客户端创建与修改的文件,在NFS上均以树莓派的pi用户作为属主,仅此而已。

为了生效,在服务端执行如下命令即可:

sudo exportfs -a

也可以查看服务端导出了哪些路径:

Shell

pi@raspberrypi:~ $ sudo exportfs -s

/home/pi/data *(rw,wdelay,root_squash,all_squash,no_subtree_check,anonuid=1000,anongid=1000,sec=sys,rw,secure,root_squash,all_squash)

1

2

pi@raspberrypi:~$sudoexportfs-s

/home/pi/data*(rw,wdelay,root_squash,all_squash,no_subtree_check,anonuid=1000,anongid=1000,sec=sys,rw,secure,root_squash,all_squash)

挂载NFS(在客户端)

登录斐讯N1了!

首先查看树莓派上导出了哪些路径:

Shell

root@aml:~# showmount -e 192.168.2.101

Export list for 192.168.2.101:

/home/pi/data *

1

2

3

root@aml:~# showmount -e 192.168.2.101

Exportlistfor192.168.2.101:

/home/pi/data*

之前说过NFS也是一种文件系统,无非是一种网络文件系统,所以mount -t nfs指定类型挂载到本地即可:

Shell

mount -t nfs 192.168.2.101:/home/pi/data /root/data

1

mount-tnfs192.168.2.101:/home/pi/data/root/data

看一下这块盘,其uid和gid都是1000,其实就是树莓派pi用户的uid和gid:

Shell

root@aml:~# ll data/

total 192

drwxr-xr-x 3 1000 1000 4096 Nov 20 21:27 dnsmasq_dig

-rw-r--r-- 1 1000 1000 159012 Nov 18 21:14 gfwlist.conf

-rw-r--r-- 1 1000 1000 900 Nov 18 21:18 gfwlist.py

drwxr-xr-x 3 1000 1000 4096 Nov 21 03:00 ilovegfw

drwx------ 2 1000 1000 16384 Nov 18 16:17 lost+found

drwxr-xr-x 3 1000 1000 4096 Nov 19 18:45 transmission-daemon

drwxr-xr-x 4 1000 1000 4096 Nov 18 16:34 yuerblog

1

2

3

4

5

6

7

8

9

root@aml:~# ll data/

total192

drwxr-xr-x3100010004096Nov2021:27dnsmasq_dig

-rw-r--r--110001000159012Nov1821:14gfwlist.conf

-rw-r--r--110001000900Nov1821:18gfwlist.py

drwxr-xr-x3100010004096Nov2103:00ilovegfw

drwx------21000100016384Nov1816:17lost+found

drwxr-xr-x3100010004096Nov1918:45transmission-daemon

drwxr-xr-x4100010004096Nov1816:34yuerblog

因为我在斐讯N1上是root用户,自然对任意uid都有权限访问,所以根本不关心是1000还是2000啦。

因为之前我的配置原因,我现在用root(其uid=0)创建一个文件,你会发现文件的uid还是1000,这就是all_squash以及anonuid/anongid的作用了:

Shell

root@aml:~/data# touch a

root@aml:~/data# ll

total 192

-rw-r--r-- 1 1000 1000 0 Nov 21 13:59 a

drwxr-xr-x 3 1000 1000 4096 Nov 20 21:27 dnsmasq_dig

-rw-r--r-- 1 1000 1000 159012 Nov 18 21:14 gfwlist.conf

-rw-r--r-- 1 1000 1000 900 Nov 18 21:18 gfwlist.py

drwxr-xr-x 3 1000 1000 4096 Nov 21 03:00 ilovegfw

drwx------ 2 1000 1000 16384 Nov 18 16:17 lost+found

drwxr-xr-x 3 1000 1000 4096 Nov 19 18:45 transmission-daemon

drwxr-xr-x 4 1000 1000 4096 Nov 18 16:34 yuerblog

1

2

3

4

5

6

7

8

9

10

11

root@aml:~/data# touch a

root@aml:~/data# ll

total192

-rw-r--r--1100010000Nov2113:59a

drwxr-xr-x3100010004096Nov2021:27dnsmasq_dig

-rw-r--r--110001000159012Nov1821:14gfwlist.conf

-rw-r--r--110001000900Nov1821:18gfwlist.py

drwxr-xr-x3100010004096Nov2103:00ilovegfw

drwx------21000100016384Nov1816:17lost+found

drwxr-xr-x3100010004096Nov1918:45transmission-daemon

drwxr-xr-x4100010004096Nov1816:34yuerblog

在服务端(树莓派)那一边看的话,是这样的:

Shell

pi@raspberrypi:~/data $ ll

total 192

-rw-r--r-- 1 pi pi 0 Nov 21 13:59 a

drwxr-xr-x 3 pi pi 4096 Nov 20 21:27 dnsmasq_dig

-rw-r--r-- 1 pi pi 159012 Nov 18 21:14 gfwlist.conf

-rw-r--r-- 1 pi pi 900 Nov 18 21:18 gfwlist.py

drwxr-xr-x 3 pi pi 4096 Nov 21 03:00 ilovegfw

drwx------ 2 pi pi 16384 Nov 18 16:17 lost+found

drwxr-xr-x 3 pi pi 4096 Nov 19 18:45 transmission-daemon

drwxr-xr-x 4 pi pi 4096 Nov 18 16:34 yuerblog

1

2

3

4

5

6

7

8

9

10

pi@raspberrypi:~/data$ll

total192

-rw-r--r--1pipi0Nov2113:59a

drwxr-xr-x3pipi4096Nov2021:27dnsmasq_dig

-rw-r--r--1pipi159012Nov1821:14gfwlist.conf

-rw-r--r--1pipi900Nov1821:18gfwlist.py

drwxr-xr-x3pipi4096Nov2103:00ilovegfw

drwx------2pipi16384Nov1816:17lost+found

drwxr-xr-x3pipi4096Nov1918:45transmission-daemon

drwxr-xr-x4pipi4096Nov1816:34yuerblog

开机自动挂载

编辑/etc/fstab文件:

192.168.2.101:/home/pi/data /root/data nfs defaults 0 1

然后验证一下fstab文件是否可以全部成功挂载:

mount -a

没错就完事了,重启试试自动挂载吧。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~

c68972f84f7c4f47f59a1f69f0608e10.png



推荐阅读
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文提供了在 Kali Linux 2020.01 x64 版本上安装 Docker 的详细步骤,包括环境准备、使用清华大学镜像源、配置 APT 仓库以及安装过程中的常见问题处理。 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • cJinja:C++编写的轻量级HTML模板引擎
    本文介绍了cJinja,这是一个用C++编写的轻量级HTML模板解析库。它利用ejson来处理模板中的数据替换(即上下文),其语法与Django Jinja非常相似,功能强大且易于学习。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 解决MacOS Catalina升级后VMware Fusion黑屏问题的详细指南
    本文深入探讨了如何在MacOS Catalina升级后解决VMware Fusion黑屏的问题。通过详细的步骤和代码示例,帮助用户快速恢复虚拟机的正常运行,并提供了额外的安全建议。适用于希望提升工作效率或学习新技术的读者。 ... [详细]
  • 本文详细介绍了Linux内核中misc设备驱动框架的实现原理及应用方法,包括misc设备的基本概念、驱动框架的初始化过程、数据结构分析以及设备的注册与注销流程。 ... [详细]
  • 本文介绍如何在Linux系统中卸载预装的OpenJDK,安装指定版本的JDK 1.8,并配置防火墙以确保系统安全性和软件兼容性。 ... [详细]
  • WinSCP: 跨Windows与Linux系统的高效文件传输解决方案
    本文详细介绍了一款名为WinSCP的开源图形化SFTP客户端,该工具支持SSH协议,适用于Windows操作系统,能够实现与Linux系统之间的文件传输。对于从事嵌入式开发的技术人员来说,掌握WinSCP的使用方法将极大提高工作效率。 ... [详细]
author-avatar
ren123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有