You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Ubuntu 22.04中挂载群晖DS1522+ NAS并保留权限与修改日期,同时实现用户临时目录自动管理

如何在Ubuntu 22.04中挂载群晖DS1522+ NAS并保留权限与修改日期,同时实现用户临时目录自动管理

一、最佳协议选择:NFS

既然NAS和服务器在同一交换机的局域网环境下,NFS(Network File System) 是绝对最优解——它性能拉满,能完美保留文件权限、修改时间,而且不需要在NAS上单独管理用户,直接复用Ubuntu服务器的UID/GID映射,完全匹配你的需求。

二、群晖NAS端NFS共享配置

先在NAS上完成共享文件夹的NFS权限设置:

  1. 打开群晖DSM,进入控制面板 > 文件服务 > NFS,勾选“启用NFS服务”,优先选择NFSv4(和Ubuntu 22.04兼容性最好),点击应用。
  2. 进入控制面板 > 共享文件夹,新建或选择你要用于扩展存储的文件夹(比如命名为nas_temp_pool),右键选择“编辑”。
  3. 切换到NFS权限标签,点击“新增”:
    • 在“客户端主机名或IP”填入Ubuntu服务器的局域网IP(比如192.168.1.100),也可以用子网掩码限制范围(比如192.168.1.0/24)。
    • 权限设置为“读写”。
    • 点击“高级设置”,勾选“允许来自非特权端口的连接”,用户映射选择“无”(这样服务器的UID/GID会直接映射到NAS文件权限,无需在NAS创建对应用户)。
  4. 保存设置,NAS端配置完成。

三、Ubuntu服务器端挂载NFS(开机自动挂载)

  1. 先安装NFS客户端工具:
    sudo apt update && sudo apt install nfs-common -y
    
  2. 创建挂载点目录:
    sudo mkdir -p /mnt/syno_nas
    
  3. 编辑/etc/fstab实现开机自动挂载:
    sudo nano /etc/fstab
    
    添加以下一行(替换成你的NAS IP、共享文件夹路径):
    192.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断开连接,进程会等待直到恢复,防止数据丢失。
  4. 测试挂载是否正常:
    sudo mount -a
    
    没有报错的话,用df -h就能看到NAS已经挂载成功了。

四、用户临时目录自动配置

要实现每个用户home目录下的nastemp软链接指向NAS上的专属目录,我们可以通过adduser.local脚本自动完成:

  1. 创建脚本文件:
    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"
    
  2. 给脚本添加执行权限:
    sudo chmod +x /usr/local/sbin/adduser.local
    
    这样以后用adduser命令新增用户时,脚本会自动创建NAS目录和nastemp软链接。对于已有的用户,你可以手动执行脚本(替换$USER为实际用户名):
    USER=user1 /usr/local/sbin/adduser.local
    

五、自动清理过期文件(Cron任务)

要自动删除6个月以上的文件,我们用Cron定期执行清理脚本:

  1. 创建清理脚本:
    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
    
  2. 添加执行权限:
    sudo chmod +x /usr/local/bin/clean_nas_temp.sh
    
  3. 设置Cron任务,比如每月1号凌晨0点执行:
    sudo crontab -e
    
    添加一行:
    0 0 1 * * /usr/local/bin/clean_nas_temp.sh
    
    如果你想每周执行一次,改成0 0 * * 0(每周日凌晨)即可。

六、验证环节

  1. 权限验证:用普通用户登录,在~/nastemp创建文件,查看ls -l的权限和修改时间是否和本地文件一致。
  2. 挂载验证:重启服务器,用df -h确认NAS是否自动挂载。
  3. 清理验证:可以手动创建一个旧文件(用touch -d "7 months ago" test.txt),然后手动执行清理脚本,看是否被删除。

备注:内容来源于stack exchange,提问作者Antonello

火山引擎 最新活动