V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
zx900930
V2EX  ›  NAS

一个 LXC 容器内 smb 共享断线重连问题的解决方案

  •  
  •   zx900930 · 2023-03-17 00:37:51 +08:00 · 1976 次点击
    这是一个创建于 622 天前的主题,其中的信息可能已经有所发展或是发生改变。

    系统 PVE, 给 jellyfin 的 LXC 容器里用 fstab 挂载了 smb 共享.

    问题是经常断连, 出现 Resource temporarily unavailable 的问题.

    排查后发现是 pve 用 snapshot 模式备份的时候, 会 freeze 那个提供 smb 共享的 vm, 此时 LXC 无法访问 smb 共享, 等到备份完成后, 也不会自动重连.

    而且最近又因为 ISP 突然断网导致同样的症状出现, 为了不用每次都手动 umount mount, 决定解决这个问题.

    试过几个解决方案

    1. x-systemd.automount, 这个方案在 LXC 容器内行不通, lxc 也明确说了 won't fix.
    2. 用脚本检测连接状态并重新挂载, 确实可行, 但是有时候会出现 Resource busy 的问题, 断线判断逻辑也不好写, 经常 false positive 然后主动断开重连导致看到一半突然中断.
    3. 宿主机用 automount 挂载, 然后 bind mount 到 LXC 容器里. 这个非常奇怪, LXC 容器的读写并不会 trigger 宿主机的 automount, 导致 idle timeout 过后它判断没有读写自己就取消挂载了.

    最后采用的办法就是 systemd 自己写 mount file 比如要挂载 //10.10.10.1/media 到 /media 下 先写 unit file:

    nano /etc/systemd/system/media.mount
    
    [Unit]
    Description=samba mount media
    Requires=network-online.target
    After=network-online.service
    
    [Mount]
    What=//10.10.10.1/media
    Where=/media
    Options=vers=3.1.1,credentials=/home/.smbcred,file_mode=0777,dir_mode=0777,iocharset=utf8
    Type=cifs
    
    [Install]
    WantedBy=multi-user.target
    

    ver 可以不用写, 默认是 3.0 我这里写 3.1.1 是因为 smb 服务器用的最新的 winserver 2022, 想用几个新的功能. 用户名密码我放到 /home/.smbcred 里给了 600 权限. 共享文件权限直接给了 777, 反正都是影音文件不是很重要, 大家可以根据自己的需要去调整.

    还有如果你要挂载到 /mnt/abc_def 之类的目录下, unit file 名称里路径的 /要用-代替, 比如 /etc/systemd/system/mnt-abc_def.mount

    然后启用并且运行这个服务就可以了

    systemctl enable media.mount
    systemctl start media.mount
    

    测试过无论是 snapshot 备份, 还是直接关闭 smb 服务器再重开, 或者断开网络连接再重新连接, 挂载的 smb 共享文件夹都可以正常断线重连了.

    VM 里用 fstab 挂载不会出现这个问题, 只有 LXC 容器会出现这个问题, 可能是跟一些安全机制有关吧.

    1 条回复    2023-03-17 06:04:36 +08:00
    ltkun
        1
    ltkun  
       2023-03-17 06:04:36 +08:00 via Android
    备份没那么勤快 lxc 一般直接 bind mount 宿主机的目录 设置为不备份
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3342 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:30 · PVG 19:30 · LAX 03:30 · JFK 06:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.