首页 > 解决方案 > 更新大量文件时,Samba 共享文件夹变得无响应(使用 repo sync 命令)

问题描述

我有一个基于 Linux (Ubuntu) 机器的代码库,它与使用 samba 的其他机器共享。从 MacOS (10.15.5) 访问代码库并使用“repo sync”时,命令会在一些 git repos 突然更新后停止,并显示以下消息

fatal: Unable to read directory. Resource temporarily unavailable!

我不确定为什么会这样。在我重新挂载 samba 共享文件夹之前没有任何效果

日志不显示任何错误。关于可能导致这种情况的任何线索?

这是 samba 的相关配置

## Samba Version is 4.7.6-Ubuntu
[Global]
min protocol = SMB2
log level = 2
syslog = true
max log size = 1000

; Disabled this for debugging
; vfs objects = catia fruit streams_xattr

; fruit:metadata = stream
; fruit:model = MacSamba

; fruit:posix_rename = yes
; fruit:veto_appledouble = no
; fruit:wipe_intentionally_left_blank_rfork = yes
; fruit:delete_empty_adfiles = yes


[Extension_Project]
    path = /******
    valid users = *****

    guest ok = no
    read only = no
    writable = yes
    browseable = yes

标签: ubuntu-18.04macos-catalinasambarepo

解决方案


所以我做了三件事:

1.日志显示没有错误,但每次打开文件数为 16384 时它们都结束。我将其更新为 937730(只是其中一个配置中的任意数字)

2.当我运行 repo sync 时,GIT repo 更新的数量更好,但它仍然会在某个时候停止(总共有 700 多个 git repos),并显示错误消息“打开的文件太多”。我将 linux 打开文件限制更新为一些较大的数字。(https://askubuntu.com/questions/1049058/how-to-increase-max-open-files-limit-on-ubuntu-18-04

该问题仍未解决,尽管在客户端退出命令之前会更新更多的 repo。原来 repo 命令用 waaaaay 太多打开的文件(一些 6 位数的打开文件号)使服务器超载。

3.我没有运行将顺序更新所有 700 多个 repos 的“repo sync”,而是使用下面的 shell 脚本以块的形式更新 repos

repo sync **SPACE SEPARATED LIST OF 20 PROJECTS**
sleep 100

repo sync **SPACE SEPARATED LIST OF 20 PROJECTS**
sleep 100

这不是一个解决方案,但目前可行。有人可以帮助找到更好的解决方案吗?


推荐阅读