群晖NAS使用NFS共享文件,关联Synology

群晖服务端配置

群晖版本: DSM 6.2.4

  1. 启动NFS服务
    控制面板 - 文件服务 - SMB/AFP/NFS - 启动NFS服务
  2. 设置共享文件的NFS共享
    控制面板 - 共享文件夹 - 选中目标文件夹 - 编辑 - NFS权限 Tab页
    服务器名称或IP地址: * (任意IP地址) 或者 192.168.1.1/24(子网地址)
    权限: 可读写
    Squash: 映射所有用户为admin
    安全性: sys
    勾选 启动异步
    勾选 允许来自非特权端口的连接(大于1024的端口)
    勾选 允许用户访问已装载的子文件夹

Ubuntu 20.04.4 LTS 客户端连接实例

  • 群晖文件服务 NFS 只勾选 启动NFS服务 未勾选 启用NFSv4.1支持

    • /etc/fstab 中设置挂载

      1
      2
        # /etc/fstab
        192.168.1.10:/volume1/server /mnt/nasdata nfs rw,hard,intr,rsize=8192,wsize=8192,timeo=10 0 0
      
    • 实际挂载的效果

      1
      2
      3
        $ nfsstat -m
        /mnt/nasdata from 192.168.1.10:/volume1/server
        Flags: rw,relatime,vers=3,rsize=8192,wsize=8192,namlen=255,hard,proto=tcp,timeo=10,retrans=2,sec=sys,mountaddr=192.168.1.10,mountvers=3,mountport=892,mountproto=udp,local_lock=none,addr=192.168.1.10
      
  • 群晖文件服务 NFS 只勾选 启动NFS服务 同时勾选 启用NFSv4.1支持

    • 执行mount手动挂载
      1
      2
      3
      4
      5
      6
      7
        # 默认挂载 NFSv4.1
        sudo mount -t nfs 192.168.1.10:/volume1/server /mnt/ds918_data
        # 或者 手动指定 v4.1,效果一样
        sudo mount -t nfs -o vers=4.1 192.168.1.10:/volume1/server /mnt/ds918_data
      
        # 也可以手动指定使用 NFSv4.0
        sudo mount -t nfs -o vers=4 192.168.1.10:/volume1/server /mnt/ds918_data
      
    • v4.1 实际挂载的效果
      1
      2
        /mnt/ds918_data from 192.168.1.10:/volume1/server
        Flags: rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.12,local_lock=none,addr=192.168.1.10
      
    • v4.0 实际挂载的效果

      1
      2
        /mnt/ds918_data from 192.168.1.10:/volume1/server
        Flags: rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.12,local_lock=none,addr=192.168.1.10
      

Linux 客户端设置

  1. 安装
    1
    2
     # ubuntu / Debian
     sudo apt install nfs-common
    
  2. /etc/fstab 配置
    1
     host.myserver.com:/home /mnt/home nfs rw,hard,intr,rsize=8192,wsize=8192,timeo=14 0 0
    

Arch Linux / Manjaro

手动挂载

这种方法,一般用在调试阶段,看看能不能正常连接,权限是否正常。

1
2
3
4
# 如果不是 NFSv4 就删掉 vers=4
mount -t nfs -o vers=4 servername:/srv/nfs/music /mountpoint/on/client

Created symlink /run/systemd/system/remote-fs.target.wants/rpc-statd.service → /usr/lib/systemd/system/rpc-statd.service.

/etc/fstab 自动挂载

这种方法,适合作为日常不定时访问的文件共享,但是,如果有系统服务依赖这个共享存储,就要使用 systemd 的 mount 和 automount 了。

  • 配合systemd的配置(推荐)

    1. 修改 /etc/fstab
      1
       servername:/home   /mountpoint/on/client  nfs  _netdev,noauto,x-systemd.automount,x-systemd.mount-timeout=10,timeo=14,x-systemd.idle-timeout=1min 0 0
      
    2. 重新加载配置
      1
      2
       sudo systemctl daemon-reload
       sudo systemctl restart remote-fs.target
      
  • 通用的配置,在没有systemd的时候,也可以用这种方法。

    1. 修改 /etc/fstab

      1
       servername:/music   /mountpoint/on/client   nfs   defaults,timeo=900,retrans=5,_netdev	0 0
      

systemd mount / automount 挂载

  1. 创建 mount unit 文件到目录 /etc/systemd/system

    mount unit 的名字必须要和目录对应上,比如,例子挂载到 /mnt/home , unit 名称就是 mnt-home.mount,否则报错:Where= setting does not match unit name. Refusing

    例如: /etc/systemd/system/mnt-home.mount

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     [Unit]
     Description=Mount home at boot
    
     [Mount]
     What=172.16.24.192:/home
     Where=/mnt/home
     Options=vers=4.1
     Type=nfs
     TimeoutSec=30
     ForceUnmount=true
    
     [Install]
     WantedBy=multi-user.target
    

    nfs 类型的mount,自动会有

    • After 依赖:remote-fs-pre.target, network.target and network-online.target
    • Before 依赖: remote-fs.target
      如果设置了 nofail mount option,就不会存在这个 Before 依赖。

    ForceUnmount=true 允许nfs server连不上的时候,可以强制 umount

  2. 开始mount: sudo systemctl start xxx.mount
  3. 开机自启动: sudo systemctl enable xxx.mount

  4. — 如果希望访问到,才去挂载,则需要再创建 automount unit —

  5. 延续上面例子的automount

    /etc/systemd/system/mnt-home.automount

    1
    2
    3
    4
    5
    6
    7
    8
    9
     [Unit]
     Description=Automount home
    
     [Automount]
     Where=/mnt/home
     TimeoutIdleSec="5min 20s"
    
     [Install]
     WantedBy=multi-user.target
    

    TimeoutIdleSec="5min 20s" 表示,5分20秒内无操作,自动umount

  6. Disable/stop the mnt-home.mount unit, and enable/start mnt-home.automount