如何在Ubuntu 22.04中挂载群晖DS1522+ NAS并保留权限与修改日期,同时实现用户临时目录自动管理
如何在Ubuntu 22.04中挂载群晖DS1522+ NAS并保留权限与修改日期,同时实现用户临时目录自动管理
一、最佳协议选择:NFS
既然NAS和服务器在同一交换机的局域网环境下,NFS(Network File System) 是绝对最优解——它性能拉满,能完美保留文件权限、修改时间,而且不需要在NAS上单独管理用户,直接复用Ubuntu服务器的UID/GID映射,完全匹配你的需求。
二、群晖NAS端NFS共享配置
先在NAS上完成共享文件夹的NFS权限设置:
- 打开群晖DSM,进入控制面板 > 文件服务 > NFS,勾选“启用NFS服务”,优先选择NFSv4(和Ubuntu 22.04兼容性最好),点击应用。
- 进入控制面板 > 共享文件夹,新建或选择你要用于扩展存储的文件夹(比如命名为
nas_temp_pool),右键选择“编辑”。 - 切换到NFS权限标签,点击“新增”:
- 在“客户端主机名或IP”填入Ubuntu服务器的局域网IP(比如
192.168.1.100),也可以用子网掩码限制范围(比如192.168.1.0/24)。 - 权限设置为“读写”。
- 点击“高级设置”,勾选“允许来自非特权端口的连接”,用户映射选择“无”(这样服务器的UID/GID会直接映射到NAS文件权限,无需在NAS创建对应用户)。
- 在“客户端主机名或IP”填入Ubuntu服务器的局域网IP(比如
- 保存设置,NAS端配置完成。
三、Ubuntu服务器端挂载NFS(开机自动挂载)
- 先安装NFS客户端工具:
sudo apt update && sudo apt install nfs-common -y - 创建挂载点目录:
sudo mkdir -p /mnt/syno_nas - 编辑
/etc/fstab实现开机自动挂载:
添加以下一行(替换成你的NAS IP、共享文件夹路径):sudo nano /etc/fstab192.168.1.xxx:/volume1/nas_temp_pool /mnt/syno_nas nfs defaults,_netdev,vers=4,hard,intr 0 0- 参数解释:
_netdev:告诉系统这是网络存储,等网络启动后再挂载,避免开机报错。vers=4:使用NFSv4协议,性能和兼容性更优。hard:如果NAS断开连接,进程会等待直到恢复,防止数据丢失。
- 参数解释:
- 测试挂载是否正常:
没有报错的话,用sudo mount -adf -h就能看到NAS已经挂载成功了。
四、用户临时目录自动配置
要实现每个用户home目录下的nastemp软链接指向NAS上的专属目录,我们可以通过adduser.local脚本自动完成:
- 创建脚本文件:
写入以下内容:sudo nano /usr/local/sbin/adduser.local#!/bin/bash # 新增用户时自动在NAS创建专属目录并生成软链接 NAS_MOUNT="/mnt/syno_nas" USER_NAS_DIR="$NAS_MOUNT/$USER" USER_LINK="/home/$USER/nastemp" # 创建NAS上的用户目录并设置权限(和服务器用户一致) mkdir -p "$USER_NAS_DIR" chown "$USER:$USER" "$USER_NAS_DIR" # 创建软链接 ln -s "$USER_NAS_DIR" "$USER_LINK" # 修正软链接的所有者显示 chown -h "$USER:$USER" "$USER_LINK" - 给脚本添加执行权限:
这样以后用sudo chmod +x /usr/local/sbin/adduser.localadduser命令新增用户时,脚本会自动创建NAS目录和nastemp软链接。对于已有的用户,你可以手动执行脚本(替换$USER为实际用户名):USER=user1 /usr/local/sbin/adduser.local
五、自动清理过期文件(Cron任务)
要自动删除6个月以上的文件,我们用Cron定期执行清理脚本:
- 创建清理脚本:
写入以下内容:sudo nano /usr/local/bin/clean_nas_temp.sh#!/bin/bash NAS_MOUNT="/mnt/syno_nas" # 删除超过180天(6个月)的文件 find "$NAS_MOUNT"/* -type f -mtime +180 -delete # 清理空目录(可选) find "$NAS_MOUNT"/* -type d -empty -delete - 添加执行权限:
sudo chmod +x /usr/local/bin/clean_nas_temp.sh - 设置Cron任务,比如每月1号凌晨0点执行:
添加一行:sudo crontab -e
如果你想每周执行一次,改成0 0 1 * * /usr/local/bin/clean_nas_temp.sh0 0 * * 0(每周日凌晨)即可。
六、验证环节
- 权限验证:用普通用户登录,在
~/nastemp创建文件,查看ls -l的权限和修改时间是否和本地文件一致。 - 挂载验证:重启服务器,用
df -h确认NAS是否自动挂载。 - 清理验证:可以手动创建一个旧文件(用
touch -d "7 months ago" test.txt),然后手动执行清理脚本,看是否被删除。
备注:内容来源于stack exchange,提问作者Antonello




