我在一台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
所以我做了三件事。
1. 日志显示没有错误,但每次他们结束时,打开文件的数量是16384。我把这个更新为937730(只是一个任意的数字,从配置之一
2. 当我运行repo sync时,更新的GIT repo数量增加了,但还是会在某个时候停止(总共有700多个git repos),并出现 "太多打开的文件 "的错误信息。我更新了linux打开文件的限制,使其达到一个较大的数量,但还是会在某些时候停止(总共有700多个git repos),并出现 "太多打开文件 "的错误信息。(https:/askubuntu.comquestions1049058how-to-increase-max-open-files-limit-onubuntu-18-04。)
这个问题还是没有解决,虽然在客户端命令退出之前,会有更多的repo更新.原来是repo命令给服务器带来了过多的打开文件(一些6位数的打开文件号)。
3. 我没有使用'repo sync'来按顺序更新所有700多个repo,而是使用下面的shell脚本来分块更新repo。
repo sync **SPACE SEPARATED LIST OF 20 PROJECTS**
sleep 100
repo sync **SPACE SEPARATED LIST OF 20 PROJECTS**
sleep 100
这不是一个解决方案,但这暂时是可行的。谁能帮忙找一个更好的解决方案?