Files
nexus/Technical/Home Office/🟠如何在Ubuntu Server上通过NFS挂载Synology NAS上的共享文件夹.md

174 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 1. 先卸载当前的挂载(如果当前还挂着的话)
author: shenwei
tags: [nas, nfs, synology, unbuntu]
---
#unbuntu #nfs #synology #nas
```table-of-contents
```
## Synology NAS配置
### 1. NAS 端新增 NFS 规则的具体步骤
1. **登录 DSM 控制面板**:打开浏览器,登录你的群晖 NAS 管理界面。
2. **进入共享文件夹设置**:点击 **“控制面板” (Control Panel)** -> **“共享文件夹” (Shared Folder)**。
3. **定位目标文件夹**:在列表中选中你的备份文件夹 `backup`(即位于 `volume2` 下的那个)。
4. **打开编辑界面**:点击上方的 **“编辑” (Edit)** 按钮。
5. **切换至 NFS 权限页签**:在弹出的窗口中,点击最右侧的 **“NFS 权限” (NFS Permissions)** 选项卡。
6. **新增规则**:点击左下角的 **“新增” (Create)**,在弹出的窗口中填入你提到的参数:
- **主机名或 IP**:输入你的 Ubuntu 服务器静态 IP例如 `192.168.3.47`)。如果想让工作室同网段设备都能访问,也可以填 `192.168.3.0/24`。
- **权限**:选择 **“可读写” (Read/Write)**。
- **Squash (最重要)**:选择 **“映射所有用户为 admin” (Map all users to admin)**。
> **技术要点**:这会将 Ubuntu 端 root 发起的备份请求,在 NAS 端统一以 `admin` 身份执行,从而绕过复杂的 Linux 权限校验。
- **安全性**:选择 **“sys”**。
- **额外勾选**:勾选下方所有的复选框,包括 **“允许来自非特权端口的连接”** 和 **“允许用户访问已挂载的子文件夹”**。
![[IMG-20251229190624379.png]]
---
### 2. 获取准确的挂载路径
保存设置后请留意“NFS 权限”页签**左下角**显示的一行小字,标明了 **“挂载路径:”**。
- 通常路径为:`/volume2/backup`。
- 请务必记住这个完整路径,稍后在 Ubuntu 命令中需要用到。
## Ubuntu Server配置
在 Linux 世界中,备份服务器到 NAS 的标准做法是使用 **NFS**。
**NFS 的优势:**
1. **原生权限支持**Samba 会丢失 Linux 的文件所有权信息,导致恢复 Docker 卷时权限报错。NFS 则能完美保留。
2. **无协议协商陷阱**:没有像 `vers=3.0` 这种复杂的方言Dialect冲突。
3. **性能更强**:在处理大量小文件(如 Docker 配置NFS 效率远高于 Samba。
#### NFS 挂载 3 步走:
1. **NAS 端配置** (参考以上)
2. **Ubuntu 挂载**
Bash
``` bash
# 安装客户端
sudo apt install nfs-common -y
# 执行挂载 (注意NFS 使用冒号连接路径)
sudo mount -t nfs 192.168.3.17:/volume2/backup /mnt/nas_backup
```
3. **验证**
Bash
``` bash
df -h | grep nas_backup
root@shenwei-HP-ZBook-01:/mnt/nas_backup# df -h | grep nas_backup
192.168.3.17:/volume2/backup 3.5T 1.9T 1.7T 54% /mnt/nas_backup
```
### 3. 实现NFS永久挂载
在 Linux 系统中,手动执行的 `mount` 命令是**临时性**的,重启后内核会重置所有挂载状态。要实现开机自动挂载,必须将配置写入系统的文件系统表文件 `/etc/fstab`。
由于你使用的是 **NFS** 协议,且考虑到笔记本在启动时网络初始化可能略慢于磁盘挂载,我们需要加入一些特定的参数来确保稳定性。
#### 1. 准备凭据(可选但推荐)
NFS 通常基于 IP 授权,不需要账号密码。如果你之前确认过手动挂载 `sudo mount -t nfs 192.168.3.17:/volume2/backup /mnt/nas_backup` 成功且无需密码,可以跳过此步。
#### 2. 修改 /etc/fstab 实现永久挂载
1. **备份原文件**(作为资深管理者,备份配置是标准操作):
Bash
```
sudo cp /etc/fstab /etc/fstab.bak
```
2. **编辑文件**
Bash
```
sudo nano /etc/fstab
```
3. **在文件末尾添加以下一行**
Plaintext
```
192.168.3.17:/volume2/backup /mnt/nas_backup nfs defaults,timeo=900,retrans=5,_netdev 0 0
```
#### 参数详解:
- **`defaults`**: 使用默认的挂载参数rw, suid, dev, exec, auto, nouser, async
- **`timeo=900`**: 设置超时时间为 90 秒(单位是 1/10 秒)。
- **`retrans=5`**: 如果超时,尝试重连 5 次。
- **`_netdev`**: **关键参数**。告诉系统这是一个网络设备,务必等到网络服务完全启动后再尝试挂载,防止开机过程因找不到网络而卡死。
---
#### 3. 测试配置(非常重要)
**千万不要直接重启!** 如果 `/etc/fstab` 写错了,系统可能无法正常启动。
执行以下命令验证:
Bash
```
# 1. 先卸载当前的挂载(如果当前还挂着的话)
sudo umount /mnt/nas_backup
# 2. 模拟开机自动挂载
sudo mount -a
# 3. 检查是否挂载成功
df -h | grep nas_backup
```
**如果 `sudo mount -a` 没有报错,且 `df` 能看到 NAS 空间,那么以后重启服务器,挂载都会自动生效。**
---
#### 4. 进阶:针对 Rsync 脚本的安全保护
在你的 `rsync` 脚本(`/usr/local/bin/rsync_backup.sh`)开头,建议加入一个**挂载检查**。防止在 NAS 掉线或由于某种原因挂载失败时,`rsync` 把备份数据写到了本地硬盘的挂载点目录(会导致笔记本硬盘迅速爆满)。
在脚本的配置区下方加入这段逻辑:
Bash
```
# 检查挂载点是否是一个有效的挂载
if ! mountpoint -q /mnt/nas_backup; then
echo "错误NAS 未挂载,备份任务取消!" >> /var/log/rsync_backup.log
# 在这里可以加入发送通知给你的逻辑
exit 1
fi
```
---
#### 5. 常见问题:重启后仍然失效?
如果在执行了上述操作后重启依然不生效,通常是因为 Ubuntu 的 `nfs-common` 服务启动慢于 `mount -a` 的执行。
- **对策**:你可以启动 `Remote File Systems` 目标服务:
Bash
```
sudo systemctl enable remote-fs.target
```
**你现在已经修改并测试过 `sudo mount -a` 了吗?如果运行这个命令有报错,请把错误信息发给我。**