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