FTP服务

linux基础,命令,软件安装,学习各种软件,服务的搭建,企业都会用,解决相应的问题。

FTP(File Transfer Protocol,文件传输协议)是一种用于在计算机网络上进行文件传输的标准协议。

它允许用户在网络上共享文件,使得用户可以通过网络从一个计算机向另一个计算机传输文件。

FTP 使用客户端-服务器架构,其中客户端负责发起文件传输请求,服务器负责响应请求并进行文件传输。

以下是 FTP 服务的一些详解:

  1. 工作原理: FTP 使用基于客户端-服务器模型的工作原理。客户端通过FTP客户端软件与服务器建立连接,并向服务器发送命令请求文件传输或其他操作。服务器收到请求后,根据客户端的请求执行相应的操作,并向客户端发送响应和数据。
  2. 端口: FTP 使用两个端口进行通信:21 端口用于建立控制连接,用于发送命令和接收响应;20 端口用于建立数据连接,用于传输文件数据。在主动模式下,客户端使用 20 端口向服务器发送数据连接请求;在被动模式下,服务器使用随机端口向客户端发送数据连接请求。
  3. 认证方式: FTP 提供了多种认证方式,包括明文认证、基于口令的认证、匿名登录等。在明文认证中,客户端向服务器发送用户名和密码,以明文形式传输;在基于口令的认证中,客户端通过加密的方式传输密码;在匿名登录中,客户端可以以匿名用户的身份登录服务器,通常只能访问公共资源。
  4. 安全性: 由于 FTP 在传输过程中使用明文传输,因此存在安全风险,如密码被窃听、文件被篡改等。为了提高安全性,可以使用 FTPS(FTP Secure)或 SFTP(SSH File Transfer Protocol)等加密协议来保护文件传输的安全性。
  5. 功能特性: FTP 提供了丰富的功能特性,包括上传文件、下载文件、创建目录、删除文件、列出目录内容等。此外,FTP 还支持断点续传、文件权限管理、文件压缩、文件加密等功能。

总的来说,FTP 是一个功能强大的文件传输协议,广泛应用于网络文件传输和共享领域。通过 FTP,用户可以方便地在计算机网络上进行文件传输和共享,实现了高效的文件管理和数据交换。

部署案例

部署 FTP(File Transfer Protocol)服务是在网络上实现文件传输的一种常见方式。以下是一个简单的 FTP 服务部署案例,以 vsftpd 为例:

  1. 安装 vsftpd:

    首先,在你的 Linux 系统上安装 vsftpd 服务:

    esudo apt update
    sudo apt install vsftpd -y
    
  2. 配置 vsftpd:

    编辑 vsftpd 的配置文件 /etc/vsftpd.conf,根据需要进行配置。以下是一个简单的配置示例:

    
    sudo nano /etc/vsftpd.conf
    # 定义你要共享什么目录,以及共享权限如何
    

    ```

    禁止匿名用户访问

    anonymous_enable=NO

    允许本地用户登录

    local_enable=YES

    允许写入操作

    write_enable=YES

    设置数据传输端口范围

    pasv_min_port=40000 pasv_max_port=40100

设置用户根目录

local_root=/home/ftp


   在这个示例中,我们禁止了匿名用户访问,允许本地用户登录,启用了写入操作,并设置了被动模式数据传输端口范围为 40000 至 40100,并将用户根目录设置为 `/home/ftp`。

3. **创建 FTP 用户和目录:**

   创建一个用于 FTP 登录的用户,并为其分配一个 FTP 根目录:

sudo adduser -m yuftp

sudo mkdir /ftp-data sudo chown -R yuftp:yuftp /home/ftp


4. **启动 vsftpd 服务:**

   启动 vsftpd 服务并设置为开机自启:

sudo systemctl start vsftpd sudo systemctl enable vsftpd


5. **防火墙配置:**

   如果启用了防火墙,确保开放 FTP 的数据传输端口范围:

sudo ufw allow 40000:40100/tcp


6. **测试 FTP 连接:**

   使用 FTP 客户端连接到你的服务器,并使用创建的 FTP 用户进行登录测试。你可以使用常见的 FTP 客户端软件,如 FileZilla、WinSCP 等。

通过这个简单的部署案例,你可以在你的 Linux 服务器上搭建一个基本的 FTP 服务,使你能够方便地进行文件传输和共享。

## FTP客户端常见操作

FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议。通过FTP,用户可以上传和下载文件到远程主机,进行文件和目录的管理。以下是FTP客户端常见的操作:

1. **连接到FTP服务器:** 使用FTP客户端程序连接到FTP服务器。通常使用`ftp`命令或图形化FTP客户端来实现。例如,在命令行中可以输入以下命令连接到FTP服务器:

ftp ftp.example.com


   这将连接到名为ftp.example.com的FTP服务器。

2. **登录到FTP服务器:** 成功连接到FTP服务器后,需要进行身份验证。通常需要提供用户名和密码。在命令行中,输入用户名和密码以登录:

Name: your_username Password: your_password


3. **列出远程目录内容:** 登录成功后,可以列出远程FTP服务器上的文件和目录。使用`ls`命令可以列出当前目录的内容,使用`dir`命令可以列出更详细的内容:

ftp> ls ftp> dir


4. **下载文件:** 使用`get`命令可以从远程FTP服务器下载文件到本地计算机。例如,要下载名为`file.txt`的文件:

ftp> get file.txt


5. **上传文件:** 使用`put`命令可以将本地文件上传到远程FTP服务器。例如,要上传名为`file.txt`的文件:

ftp> put file.txt


6. **切换目录:** 使用`cd`命令可以切换到远程FTP服务器上的不同目录。例如,要切换到名为`directory`的目录:

ftp> cd directory


7. **创建目录:** 使用`mkdir`命令可以在远程FTP服务器上创建新目录。例如,要创建名为`new_directory`的目录:

ftp> mkdir new_directory


8. **删除文件:** 使用`delete`命令可以删除远程FTP服务器上的文件。例如,要删除名为`file.txt`的文件:

ftp> delete file.txt


9. **删除目录:** 使用`rmdir`命令可以删除远程FTP服务器上的目录。注意,只有当目录为空时才能成功删除。例如,要删除名为`directory`的目录:

ftp> rmdir directory


10. **退出FTP会话:** 使用`quit`命令可以安全地关闭FTP连接并退出FTP客户端:
ftp> quit
```

这些是FTP客户端常见的操作,通过这些操作,用户可以方便地在本地计算机和远程FTP服务器之间传输文件和管理目录。

SAMBA服务

windows > windows

windows > linux

linux > linux
linux安装samba软件,共享某目录,用windows去挂载访问

Samba 是一个开源的实现 SMB/CIFS(Server Message Block/Common Internet File System)协议的软件套件,允许 Linux/Unix 系统上的计算机与 Windows 系统上的计算机进行文件和打印机共享。

通过 Samba,Linux/Unix 系统可以作为 SMB/CIFS 服务器提供文件共享服务,同时也可以作为 SMB/CIFS 客户端访问 Windows 系统上的共享资源。

部署 Samba 服务器通常涉及以下步骤:

  1. 安装 Samba 软件包: 在 Linux/Unix 系统上安装 Samba 软件包。具体安装方法取决于所使用的 Linux 发行版,可以使用系统自带的包管理工具(如apt、yum、zypper等)进行安装。
  2. 配置 Samba: 编辑 Samba 的配置文件(通常是 /etc/samba/smb.conf),配置共享资源、权限、认证方式等参数。在配置文件中指定共享目录、允许访问的用户、读写权限等信息。
  3. 创建共享目录: 在系统中创建要共享的目录,并设置相应的权限。确保 Samba 用户有权限访问这些目录。
  4. 设置 Samba 用户: 如果需要,可以使用 smbpasswd 命令创建 Samba 用户,并设置密码。这些用户将用于认证访问 Samba 共享资源。
  5. 启动 Samba 服务: 使用适当的命令(如 systemctl start smbd)启动 Samba 服务,使其开始监听并提供共享服务。
  6. 测试访问: 在 Windows 或其他支持 SMB/CIFS 协议的系统上,尝试访问 Samba 服务器上的共享资源,确保共享功能正常工作。
  7. 优化配置(可选): 根据实际需求对 Samba 的配置进行优化和调整,例如调整性能参数、添加额外的共享资源、配置安全选项等。

这是一个基本的 Samba 服务器部署案例,具体步骤可能会因环境和需求的不同而有所变化。在部署 Samba 服务器之前,请务必详细阅读 Samba 的文档和相关指南,以确保正确配置和安全性。

部署案例

以下是一个简单的 Samba 部署案例,假设你要在 Ubuntu 系统上搭建一个 Samba 文件共享服务:

  1. 安装 Samba 软件包: 在 Ubuntu 系统上安装 Samba 软件包。打开终端并运行以下命令:

    sudo apt update
    sudo apt install samba -y
    
  2. 创建共享目录: 创建一个用于共享的目录。在这个案例中,我们将创建一个名为 shared 的共享目录:

    
    sudo mkdir /srv/shared
    
  3. 设置共享权限: 设置共享目录的权限,以确保 Samba 用户可以访问它:

    
    sudo chmod 777 /srv/shared
    
  4. 配置 Samba: 编辑 Samba 配置文件 /etc/samba/smb.conf。你可以使用任何文本编辑器进行编辑,例如 nano:

    
    sudo nano /etc/samba/smb.conf
    

    在文件的末尾添加以下内容:

    ``` [smb_share]

    comment=yuchao share dir
    path = /mysamba/
    guest ok=no
    public = no
    writable = yes
    

   这个配置定义了一个名为 `shared` 的共享,允许匿名访问,读写权限为所有用户。

5. **设置 Samba 用户密码:** 如果需要访问共享资源的用户需要密码验证,可以设置 Samba 用户密码。首先,创建一个 Samba 用户:

adduser yusmb

root@yu1-ubuntu:~# pdbedit -a -u yusmb

mkdir /mysamba chmod 777 /mysamba chown -R yusmb.yusmb /mysamba/


   然后按照提示输入密码。

6. **重启 Samba 服务:** 重新启动 Samba 服务以使更改生效:

sudo systemctl restart smbd


现在,你的 Samba 文件共享服务已经准备就绪。你可以从 Windows 或其他支持 SMB 协议的系统上访问共享目录,输入 Samba 用户名和密码(如果设置了密码),即可访问共享文件夹。

## samba客户端操作

作为 Samba 客户端,你可以使用以下命令和操作来访问远程 Samba 服务器上的共享资源:

1. **浏览共享资源:** 可以使用文件管理器(如Windows资源管理器或Linux的Nautilus)来浏览远程 Samba 服务器上的共享资源。在文件管理器中,输入 Samba 服务器的 IP 地址或主机名(如 `\\server_ip` 或 `\\server_hostname`)即可访问共享资源。

2. **挂载共享目录:** 如果你想在本地文件系统中挂载远程 Samba 共享目录,可以使用 `mount` 命令。例如:

sudo mount -t cifs //server_ip/shared_folder /mnt/local_folder -o username=samba_user,password=samba_password


   这会将远程 Samba 共享目录 `shared_folder` 挂载到本地目录 `/mnt/local_folder` 中。

3. **使用 smbclient 工具:** `smbclient` 是一个命令行工具,可以在 Linux/Unix 系统上访问和操作 Samba 服务器上的共享资源。例如,你可以使用以下命令登录到远程 Samba 服务器并列出共享资源:

apt install smbclient -y

smbclient //server_ip/shared_folder -U samba_user


   这会提示你输入 Samba 用户的密码,并登录到指定的共享目录。

4. **使用 smbget 工具:** `smbget` 是一个命令行工具,用于从远程 Samba 服务器下载文件。例如:

smbget smb://server_ip/shared_folder/file.txt -U samba_user


   这会下载远程 Samba 服务器上的 `file.txt` 文件到当前目录中。

5. **使用图形化 Samba 客户端:** 有一些图形化的 Samba 客户端工具,它们提供了更直观的界面来管理 Samba 共享资源。你可以搜索并安装这些工具,例如 `smb4k`。

通过这些方式,你可以作为 Samba 客户端访问和操作远程 Samba 服务器上的共享资源。



# NFS服务

NFS(Network File System)是一种允许在网络上共享文件系统的协议。

它允许不同的计算机系统之间通过网络透明地共享文件和目录,就像它们是本地文件一样。

NFS 协议允许客户端在网络上访问远程文件系统,使得用户可以像访问本地文件系统一样访问远程文件系统中的文件和目录。

以下是 NFS 服务的一些关键特性和详解:

1. **透明性:** NFS 提供了透明的访问远程文件系统的机制,对于客户端来说,远程文件系统上的文件和目录就像是本地的一样,用户可以使用相同的文件系统操作命令来访问和管理远程文件系统中的文件。`/nfs-data`
2. **网络共享:** NFS 允许将文件系统共享到网络上,使得不同的计算机系统之间可以通过网络进行文件的共享和访问。通过 NFS,多台计算机可以同时访问远程文件系统上的文件和目录。
3. **性能:** NFS 协议设计用于提供高性能的文件访问,使得客户端可以高效地访问远程文件系统中的文件和目录。NFS 提供了对文件缓存、异步访问、数据压缩等特性的支持,以优化文件访问性能。
4. **安全性:** NFS 提供了一些安全性机制,如基于 IP 地址的访问控制、用户身份验证、数据加密等,以确保远程文件系统的安全性和数据的保密性。
5. **可扩展性:** NFS 提供了良好的可扩展性,允许灵活地配置和管理远程文件系统。通过适当的配置和调优,可以实现高可用性、高性能的 NFS 文件共享服务。
6. **跨平台支持:** NFS 是一个跨平台的文件共享协议,可以在不同的操作系统和硬件平台上运行。它提供了对不同操作系统的良好兼容性,使得不同平台上的计算机可以共享和访问远程文件系统。

NFS 服务通常由 NFS 服务器和 NFS 客户端组成。NFS 服务器负责提供文件系统共享服务,而 NFS 客户端负责访问远程文件系统。通过 NFS 协议,客户端可以在网络上透明地访问远程文件系统中的文件和目录,从而实现文件共享和协作。

已知samba主要用于linux与windows之间共享文件夹

那用于Linux之间进行文件共享则是用NFS服务(Network FileSystem)

目的在于让不同的机器,不同的操作系统可以彼此分享各自的文件数据。

> NFS服务可以将远程Linux系统上的文件共享资源挂载到本地机器的目录上。

NFS很像Windows系统的网络共享、安全功能、网络驱动器映射,这也和Linux系统的samba服务类似。

一般情况下,Windows网络共享服务或samba服务用语办公局域网共享,而中小型网站集群架构后端通常用NFS数据共享,如果大型网络集群,还会用更复杂的文件系统,如GlusterFS、FastDFS等。

NFS系统已有30年发展历史,代表了一个稳定的网络文件系统,具备可扩展,高性能等特点。

由于网络速度的加快和延迟的减少,NFS系统一直是通过网络提供文件系统的不错的选择,特别是在中小型互联网企业用的广泛。

# NFS在企业的应用架构

在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、静态文件,通常网站用户上传的文件也都会放在NFS共享里,例如BBS产品(论坛)产生的图片、附件、头像等,然后前端所有的节点访问静态资源时都会读取NFS存储上的资源。

阿里云等公有云平台的NAS就是云版的NFS服务应用。

像这个奔驰官网,需要展示大量的图片,动态图,html网页文件,这些都是存储在服务器上的。



![image-20240324174501681](../pic-all/image-20240324174501681.png)

## 企业生产集群为什么需要共享存储

企业生产集群需要共享存储主要基于以下几个方面的考虑:

1. **数据共享和一致性:** 在企业生产环境中,往往需要多个计算节点之间共享数据,以支持多个应用程序的协作和协同工作。共享存储可以提供统一的数据视图,确保不同节点之间访问的数据是一致的,避免数据不一致性问题。
2. **高可用性和容错性:** 共享存储通常具有高可用性和容错性的特点,能够提供冗余和故障转移机制,保证数据的持久性和可靠性。在集群环境中,共享存储可以作为集群资源的一部分,为应用程序提供高可用的数据访问服务。
3. **集中式管理和资源利用率:** 共享存储使得数据集中存储和管理成为可能,减少了数据分散存储带来的管理复杂性。同时,共享存储可以更有效地利用存储资源,避免资源的浪费和碎片化。
4. **灵活性和可扩展性:** 共享存储可以提供灵活的存储资源分配和动态扩展功能,根据业务需求随时增加或减少存储容量。这样可以更好地适应企业业务的变化和发展,保证系统的灵活性和可扩展性。
5. **性能优化:** 共享存储通常具有优化的存储性能和高速的数据传输速率,能够满足企业生产环境中对于数据访问速度和性能的要求。共享存储还可以提供一些高级功能,如缓存、快照、数据压缩等,进一步优化存储性能和效率。

综上所述,共享存储在企业生产集群中扮演着重要的角色,为企业提供了高可用、高性能、灵活性和可扩展性的存储解决方案,支持企业应用程序的正常运行和数据管理。



![image-20240324174514750](../pic-all/image-20240324174514750.png)

先看一下如果没有共享存储的问题

A用户上传图片到web01服务器,然后用户B访该图片,结果B的请求被负载均衡分发到了Web02,但是由于没有配置共享存储,web02没有该图片,导致用户B看不到该资源,用户心理很不爽呀。

那么如果配置了共享存储,无论A用户上传的图片是发给了web01还是其他,最终都会存储到共享存储上,用户B再访问该图片的时候,无论请求被负载均衡发给了web01、web02、web03最终都会去共享存储上寻找资源,这样也就能够访问到资源了。

这个共享存储对于中小企业,也就是使用服务器配置NFS网络文件共享系统实现。

![image-20240324174523845](../pic-all/image-20240324174523845.png)



## NFS工作原理

NFS(Network File System)是一种允许在网络上共享文件系统的协议,它允许不同的计算机系统之间通过网络透明地共享文件和目录。下面是 NFS 工作原理的简要概述:

1. **服务器端设置共享目录:** 首先,在 NFS 服务器端,管理员需要将要共享的目录(称为共享目录)配置为 NFS 共享。这通常通过编辑 NFS 服务器的配置文件 `/etc/exports` 来完成。在配置文件中指定共享目录的路径、允许访问的主机或网络、读写权限等信息。
2. **客户端请求挂载共享目录:** 当客户端需要访问共享目录时,它会发出挂载(mount)请求。客户端向 NFS 服务器发送挂载请求,并指定要挂载的共享目录的路径。
3. **服务器响应挂载请求:** NFS 服务器收到客户端的挂载请求后,会根据请求的共享目录路径和权限检查配置文件,确定是否允许挂载,并返回相应的响应。
4. **客户端挂载共享目录:** 如果服务器允许挂载请求,客户端会将共享目录挂载到本地文件系统上。客户端使用 `mount` 命令指定 NFS 服务器的 IP 地址和共享目录路径来进行挂载。
5. **客户端访问共享目录:** 一旦共享目录成功挂载到客户端的本地文件系统上,客户端就可以像访问本地文件一样访问共享目录中的文件和目录。客户端可以使用常规的文件系统操作命令(如 ls、cp、mv 等)来操作共享目录中的文件和目录。
6. **文件传输:** 当客户端在共享目录中进行读写操作时,NFS 协议会负责在客户端和服务器之间传输文件数据。客户端发送读写请求到服务器,并接收服务器返回的文件数据。
7. **卸载共享目录:** 当客户端不再需要访问共享目录时,它可以使用 `umount` 命令将共享目录从本地文件系统上卸载。卸载后,客户端将无法再访问共享目录中的文件和目录。

总的来说,NFS 工作原理简单明了,通过在服务器端设置共享目录并在客户端挂载共享目录,实现了在网络上透明地共享文件和目录。客户端可以像访问本地文件一样访问共享目录中的文件和目录,从而实现了文件系统的共享和协作。

## NFS底层协议原理

NFS(Network File System)是一个基于远程文件访问的协议,允许在网络上共享文件系统。它的底层协议是基于 RPC(Remote Procedure Call)的,通过 RPC 机制来实现客户端和服务器之间的通信。

以下是 NFS 的工作原理和底层协议原理:

1. **客户端请求:** 当客户端需要访问远程文件系统时,它会向 NFS 服务器发送一个 RPC 请求。这个请求包含了要执行的操作(如读、写、创建文件等)以及相关的参数(如文件路径、偏移量、数据大小等)。
2. **NFS 服务器响应:** NFS 服务器接收到客户端发送的 RPC 请求后,会解析请求并执行相应的文件系统操作。一旦操作完成,服务器会将操作的结果封装在 RPC 响应中,并发送回客户端。
3. **RPC(远程过程调用):** RPC 是 NFS 的底层通信机制,用于在客户端和服务器之间进行远程过程调用。客户端和服务器之间通过网络传输 RPC 请求和响应消息。RPC 使用端口映射协议(Portmapper)来管理端口号和服务之间的映射关系。
4. **NFS 协议:** NFS 协议定义了客户端和服务器之间进行文件系统访问的规范和约定。它定义了一组操作(如读、写、创建、删除等)以及相应的参数和返回值,用于实现对远程文件系统的操作。
5. **文件系统抽象:** NFS 在客户端和服务器之间建立了一个文件系统的抽象,使得客户端可以像访问本地文件系统一样访问远程文件系统中的文件和目录。客户端通过 NFS 协议发送文件系统操作请求,服务器执行相应的操作并返回结果,使得客户端可以透明地访问远程文件系统中的文件。

总的来说,NFS 的工作原理是基于 RPC 机制实现的,通过在客户端和服务器之间传输 RPC 请求和响应消息来实现远程文件访问。客户端发送文件系统操作请求,服务器执行相应的操作并返回结果,从而实现对远程文件系统的访问和管理。

## nfs部署案例

下面是一个简单的 NFS 部署案例,假设你要在 Ubuntu 系统上搭建一个 NFS 服务器,并在另一台 Ubuntu 客户端上挂载远程共享目录:

1. **在 NFS 服务器上安装 NFS 服务器软件包:**

sudo apt update sudo apt install nfs-kernel-server -y


2. **创建要共享的目录:**

sudo mkdir /test-nfs


3. **配置 NFS 共享:**

   编辑 `/etc/exports` 文件以指定要共享的目录和允许访问的客户端。例如,将以下行添加到文件末尾:

/test-nfs client_ip(rw,sync)


   其中,`client_ip` 是允许访问共享目录的客户端的 IP 地址,`rw` 表示读写权限,`sync` 表示同步写入,`no_subtree_check` 表示不进行子树检查。

4. **重新加载 NFS 服务:**

sudo exportfs -ra


5. **启动 NFS 服务器:**

sudo systemctl start nfs-server


6. **在 NFS 客户端上安装 NFS 客户端软件包:**`很多用nfs同学,客户端想mount挂载nfs报错`

sudo apt update

客户端想识别nfs协议的网络文件系统,必须要装nfs工具包组

sudo apt install nfs-common -y


7. **在 NFS 客户端上创建挂载点:**

sudo mkdir /mnt/nfs_share


8. **挂载远程共享目录:**

sudo mount -t nfs server_ip:/srv/nfs_share /mnt/nfs_share


   其中,`server_ip` 是 NFS 服务器的 IP 地址。

9. **验证挂载:**

df -h


   这将显示已挂载的文件系统,你应该能够看到远程 NFS 共享目录 `/mnt/nfs_share`。

现在,你已经在 NFS 服务器上设置了共享目录,并在另一台 Ubuntu 客户端上挂载了远程共享目录。你可以在客户端上进行文件操作,对共享目录中的文件进行读写等操作。

## /etc/exports详解

`/etc/exports` 文件是 NFS 服务器上的配置文件,用于指定要共享的文件系统和共享的参数。在这个文件中,可以定义共享的目录、允许访问的主机、权限设置等。

以下是 `/etc/exports` 文件的一般格式和说明:

1. **文件格式:** `/etc/exports` 文件的每一行定义了一个共享的目录和相应的参数。每行由共享目录的路径、允许访问的主机列表、共享参数组成,使用空格或制表符分隔。
2. **共享目录路径:** 在每一行的开头指定要共享的目录的路径。这是 NFS 服务器上的本地文件系统路径,可以是绝对路径或相对路径。
3. **允许访问的主机列表:** 在目录路径之后,可以列出允许访问该共享目录的主机列表。可以使用 IP 地址、主机名或网络地址进行指定。使用通配符 `*` 表示允许所有主机访问。
4. **共享参数:** 在主机列表之后,可以指定共享的参数。常见的参数包括 `rw`(读写权限)、`ro`(只读权限)、`sync`(同步写入)、`async`(异步写入)等。详细的参数列表和说明可以参考 `/etc/exports` 文件中的注释或 NFS 文档。

下面是一个简单的 `/etc/exports` 文件的示例:

/etc/exports

/home/data 192.168.1.0/24(rw,sync) /media/share *(rw,async)


在这个示例中:

- `/home/data` 目录被共享给 `192.168.1.0/24` 网络中的所有主机,具有读写权限,并且写入操作是同步的。
- `/media/share` 目录被共享给所有主机,具有读写权限,并且写入操作是异步的。

在修改完 `/etc/exports` 文件后,需要重新加载 NFS 服务以使更改生效,可以使用命令 `exportfs -ra` 或重新启动 NFS 服务。

## nfs进程

root@yuchao-linux-2024:~# ps -ef |grep rpc _rpc 3050184 1 0 17:47 ? 00:00:00 /sbin/rpcbind -f -w root 3050631 2 0 17:47 ? 00:00:00 [rpciod] root 3050771 1 0 17:47 ? 00:00:00 /usr/sbin/rpc.idmapd statd 3050773 1 0 17:47 ? 00:00:00 /sbin/rpc.statd root 3050781 1 0 17:47 ? 00:00:00 /usr/sbin/rpc.mountd root 3051283 3038854 0 17:48 pts/3 00:00:00 grep --color=auto rpc root@yuchao-linux-2024:~# ps -ef |grep nfs root 3050780 1 0 17:47 ? 00:00:00 /usr/sbin/nfsdcld root 3050786 2 0 17:47 ? 00:00:00 [nfsd] root 3050787 2 0 17:47 ? 00:00:00 [nfsd] root 3050788 2 0 17:47 ? 00:00:00 [nfsd] root 3050789 2 0 17:47 ? 00:00:00 [nfsd] root 3050790 2 0 17:47 ? 00:00:00 [nfsd] root 3050791 2 0 17:47 ? 00:00:00 [nfsd] root 3050792 2 0 17:47 ? 00:00:00 [nfsd] root 3050793 2 0 17:47 ? 00:00:00 [nfsd] root 3051292 3038854 0 17:48 pts/3 00:00:00 grep --color=auto nfs root@yuchao-linux-2024:~#


在这个输出中,你看到了一些与 RPC 和 NFS 相关的进程。让我简要解释一下这些进程的作用:

1. **rpcbind**:这是 RPC 绑定守护进程,负责管理 RPC 端口映射。当客户端需要调用远程过程时,它会首先连接到 rpcbind 守护进程,获取相应的端口号。在你的系统中,`/sbin/rpcbind` 是 rpcbind 守护进程的路径。
2. **rpciod**:这是 RPC 异步 I/O 守护进程,用于处理异步的 RPC 请求和响应。在你的系统中,`[rpciod]` 表示有一个 rpciod 进程正在运行。
3. **rpc.idmapd**:这是 NFSv4 ID 映射守护进程,负责处理 NFSv4 客户端和服务器之间的用户和组 ID 映射。在你的系统中,`/usr/sbin/rpc.idmapd` 是 rpc.idmapd 守护进程的路径。
4. **rpc.statd**:这是 NFSv4 状态守护进程,负责处理 NFSv4 客户端和服务器之间的状态信息。在你的系统中,`/sbin/rpc.statd` 是 rpc.statd 守护进程的路径。
5. **rpc.mountd**:这是 NFS mount 守护进程,负责处理 NFS 客户端的挂载请求。在你的系统中,`/usr/sbin/rpc.mountd` 是 rpc.mountd 守护进程的路径。
6. **nfsdcld**:这是 NFSv4 客户端状态守护进程,负责管理和维护 NFSv4 客户端的状态信息。在你的系统中,`/usr/sbin/nfsdcld` 是 nfsdcld 守护进程的路径。
7. **nfsd**:这些是 NFS 服务器守护进程,用于处理 NFS 客户端的请求。在你的系统中,`[nfsd]` 表示有多个 nfsd 进程正在运行,用于处理客户端的并发请求。

这些进程是 NFS 服务器和客户端正常运行所必需的。通过查看这些进程,你可以了解到系统中 NFS 相关的进程是否正常运行。



# NFS挂载实战

NFS(Network File System)是一种用于在不同计算机系统之间共享文件的协议。在实际应用中,你可以将一个存储设备上的文件系统通过NFS共享给其他计算机使用,这样其他计算机就可以像访问本地文件一样访问这些文件。以下是一个简单的NFS挂载实战示例:

假设你有两台计算机:Server(服务器)和Client(客户端),它们都运行着Linux操作系统。你希望在Server上共享一个目录,并在Client上将该目录挂载到一个本地目录上。

### 在Server上设置NFS共享

1. 安装NFS服务器软件:

sudo apt update sudo apt install nfs-kernel-server


2. 配置NFS共享:

   编辑 `/etc/exports` 文件并添加要共享的目录,比如:

/path/to/shared/directory client_ip(rw,sync,no_root_squash)


   其中 `/path/to/shared/directory` 是要共享的目录路径,`client_ip` 是Client的IP地址,`rw` 表示读写权限,`sync` 表示同步写入,`no_root_squash` 表示不映射root用户。

3. 重启NFS服务器以使更改生效:

sudo systemctl restart nfs-kernel-server


### 在Client上挂载NFS共享

1. 安装NFS客户端软件:

sudo apt update sudo apt install nfs-common


2. 创建一个本地目录,用于挂载NFS共享:

sudo mkdir /mnt/nfs_share


3. 挂载NFS共享到本地目录:

sudo mount server_ip:/path/to/shared/directory /mnt/nfs_share


   其中 `server_ip` 是Server的IP地址,`/path/to/shared/directory` 是要共享的目录路径。

4. 验证挂载是否成功:

df -h


   你应该能够在输出中看到挂载的NFS共享。

### 自动挂载NFS共享

你还可以配置Client,使其在启动时自动挂载NFS共享。编辑 `/etc/fstab` 文件,并添加以下行:

server_ip:/path/to/shared/directory /mnt/nfs_share nfs defaults 0 0


保存并退出。现在,每当Client启动时,它都会尝试自动挂载NFS共享到指定的目录。

这只是一个简单的NFS挂载实战示例,实际应用中可能需要根据你的特定需求进行更多的配置和调整。

## NFS挂载参数

NFS挂载时可以使用多种参数来控制挂载行为和性能。以下是一些常用的NFS挂载参数及其说明:

1. **ro/rw**:指定挂载的权限。`ro` 表示只读,`rw` 表示读写。
2. **sync/async**:控制写入数据的同步方式。`sync` 表示同步写入,即写操作需要等待数据写入磁盘后才返回成功;`async` 表示异步写入,即写操作会立即返回成功,数据会稍后写入磁盘。
3. **noexec/exec**:控制是否允许在文件系统上执行可执行文件。`noexec` 表示禁止执行,`exec` 表示允许执行。
4. **noatime/atime**:控制文件访问时间的更新。`noatime` 表示不更新访问时间,`atime` 表示更新访问时间。
5. **nodiratime/diratime**:类似于`noatime/atime`,但只影响目录的访问时间。
6. **noac/ac**:控制NFS客户端的文件属性缓存。`noac` 表示不使用属性缓存,`ac` 表示使用属性缓存。
7. **no_root_squash/root_squash**:控制root用户的权限映射。`no_root_squash` 表示不映射root用户,`root_squash` 表示映射root用户为匿名用户。
8. **anonuid/anongid**:指定匿名用户的UID(用户ID)和GID(组ID)。
9. **hard/soft**:控制NFS客户端对服务器故障的处理方式。`hard` 表示硬挂载,客户端会持续尝试重连直到服务器恢复;`soft` 表示软挂载,客户端会在一段时间后放弃并返回错误。
10. **intr/nointr**:控制中断处理方式。`intr` 表示允许中断挂载操作,`nointr` 表示不允许中断挂载操作。

这些参数可以通过在挂载命令中使用 `-o` 选项来指定,例如:

mount -o rw,async,noexec server_ip:/path/to/shared/directory /mnt/nfs_share


此外,还可以将这些参数添加到 `/etc/fstab` 文件中,以便在系统启动时自动挂载NFS共享。

## all_squash,anonuid,anongid案例

当你在NFS服务器上配置共享时,可以使用一些挂载参数来定义客户端如何访问共享的文件系统。其中,`all_squash`、`anonuid` 和 `anongid` 是常用的参数之一,它们用于指定在匿名访问时使用的用户和组。下面是一个示例配置:

假设你想要将 `/shared_directory` 目录共享给客户端,同时将所有客户端访问都映射到特定的用户和组。

在NFS服务器上的 `/etc/exports` 文件中配置:

/shared_directory client_ip(rw,sync,all_squash,anonuid=1010,anongid=1010)


- `/shared_directory`: 要共享的目录路径。
- `client_ip`: 允许访问共享的客户端IP地址。
- `rw`: 读写权限。
- `sync`: 同步写入。
- `all_squash`: 将所有客户端的权限映射到匿名用户。
- `anonuid=1000`: 将所有匿名访问映射到UID为1000的用户。
- `anongid=1000`: 将所有匿名访问映射到GID为1000的组。

这个配置将所有客户端访问共享的文件都映射到UID为1000的用户和GID为1000的组。你可以根据需要调整`anonuid` 和 `anongid` 的值以匹配你系统中的实际用户和组。

完成配置后,记得重启NFS服务器以使更改生效。

useradd -u 1010 nfs-user

sudo systemctl restart nfs-kernel-server ```

这样,当客户端连接并访问共享目录时,它们将被映射到指定的用户和组,而不是使用其自身的用户和组。

NFS故障案例

以下是一些可能导致NFS故障的常见情况:

  1. 网络问题:NFS是一种基于网络的文件系统,因此网络问题可能导致NFS通信失败。这可能包括网络连接中断、网络拥塞或路由问题等。
  2. NFS服务器问题:NFS服务器可能遇到各种问题,例如硬件故障、软件错误或配置问题。这可能导致NFS服务无法正常运行或响应客户端请求。
  3. 权限问题:NFS服务器可能会配置访问控制规则,如果权限配置不正确,可能会导致客户端无法正确访问文件或目录。
  4. 客户端配置问题:客户端也可能存在配置问题,例如未正确挂载NFS共享、挂载点不存在或权限不正确等。
  5. 文件系统问题:NFS服务器上的文件系统问题,如磁盘空间耗尽、文件系统损坏或inode用尽等,可能导致NFS服务不可用。

解决NFS故障通常需要系统管理员进行详细的故障排除,包括检查日志文件、网络连接、服务器和客户端配置等。如果您有特定的故障情况或更多细节,可以提供给我,我将尽力提供更具体的建议。

案例

在一个由Linux服务器和多个客户端组成的网络环境中,NFS共享突然无法访问。服务器和客户端之间的网络连接正常,但是客户端无法挂载或访问NFS共享。

测试步骤:

  1. 检查NFS服务器状态:
    • 使用命令 systemctl status nfs-server 检查NFS服务器是否正在运行。确保NFS服务没有崩溃或停止。
  2. 检查NFS共享配置:
    • 检查NFS服务器上 /etc/exports 文件中的共享配置。确保需要共享的目录已正确配置,并且权限设置正确。
  3. 检查NFS服务器日志:
    • 检查NFS服务器上 /var/log/syslog/var/log/messages 等日志文件,查找任何与NFS相关的错误或警告信息。
  4. 检查NFS客户端挂载:
    • 在客户端上执行 showmount -e <NFS服务器IP> 命令,检查NFS服务器上共享的目录是否正确显示。
    • 尝试手动挂载NFS共享到客户端上,例如:sudo mount -t nfs <NFS服务器IP>:<共享目录> <挂载点>
  5. 检查NFS客户端日志:
    • 在客户端上检查 /var/log/syslog/var/log/messages 等日志文件,查找任何与NFS挂载或访问相关的错误。
  6. 检查NFS服务器和客户端之间的网络连接:
    • 使用 ping 命令测试NFS服务器和客户端之间的网络连接是否正常。
    • 使用 traceroutemtr 命令检查网络路径是否畅通,排除网络问题。
  7. 尝试重启NFS服务:
    • 在NFS服务器上尝试重启NFS服务,例如:sudo systemctl restart nfs-server
  8. 尝试重启NFS客户端:
    • 在受影响的客户端上尝试重启NFS相关服务或系统,确保客户端重新连接到NFS服务器。

预期结果:

  • NFS服务器应该正常运行,并且配置的共享目录应该能够被客户端正确挂载和访问。
  • 在日志中不应该出现NFS相关的错误或警告信息。
  • 客户端应该能够成功挂载NFS共享,并且可以正常访问共享的文件和目录。

解决方案:

根据测试结果采取相应的措施,例如修复NFS服务器配置、解决权限问题、排除网络问题等。

Copyright © www.yuchaoit.cn 2024 all right reserved,powered by Gitbook作者:猿来教育 2024-05-11 17:53:31

results matching ""

    No results matching ""