Я использую довольно простой скрипт на python (также пробовал скрипт nodejs), подобный приведенному ниже, чтобы найти все файлы в каталоге и его подкаталогах, а также их размер и время изменения. Поэтому скрипт использует stat syscall для получения информации о пути: тип (обычный файл, каталог и т.д.), Размер, время изменения.

Если я запускаю скрипт в локальной папке на Windows 10 и Ubuntu, все работает нормально. Если я запускаю скрипт в Ubuntu в папке, которая является смонтированным общим ресурсом samba, все тоже работает нормально.

Однако, если я запускаю сценарий в Windows 10 в папке, которая находится на смонтированном общем ресурсе samba, все начинает становиться странным (хотя первые несколько раз он также работал там). Я получаю сообщения об ошибках вроде следующего:

C:\Users\Biggie\Scripts>python test.py
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    childs = listdir(next)
WindowsError: [Error 267] The directory name is invalid: 'y:\\some\\path\\file.jpg\\*.*'

Это происходит потому, что в результате вызова stat указывается, что путь является каталогом, хотя это обычный файл jpg. Если я запускаю интерактивную оболочку python или nodejs и вызываю stat для указанного файла, на этот раз возвращаемое значение выглядит нормально (правильный тип, размер и т.д.). Похоже, что клиент Samba в Windows 10 не работает, когда слишком мало статовых вызовов отправляется за короткий промежуток времени.

Это известная проблема? Для меня это похоже на роковую ошибку. Есть ли способ обойти эту проблему, используя некоторые настройки Windows 10?

В моем случае скрипт на самом деле является базой для приложения резервного копирования ... которое будет совершенно неправильно, если размеры и типы файлов возвращаются неправильно.

Примечание. Я протестировал 2 клиента Windows под управлением Windows 10. 3 протестированных сервера samba работают под управлением Ubuntu с использованием стандартных конфигураций smbd в Ubuntu (помимо общих определений). Я также пытался заставить SMB2 (server max protoctol), но это ничего не изменило. Интересно, что в Window 7 не выдается никаких ошибок.

Приложение: скрипт Python. Сценарий nodejs (не перечисленный здесь) делает почти то же самое:

from os import listdir, stat
from os.path import join
from stat import *

files = []
todo = ['y:\\'] # y:\\ is a mounted samba share

while len(todo) > 0:
    next = todo.pop(0)
    childs = listdir(next)
    for child in childs:
        childPath = join(next, child)
        childStat = stat(childPath)
        mode = childStat.st_mode
        if S_ISREG(mode):
            files.append(childStat)
        elif S_ISDIR(mode):
            todo.append(childPath)

print len(files) # Will not be called because error is thrown before on Windows 10

0