
#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` 了吗？如果运行这个命令有报错，请把错误信息发给我。**