Nossa solução atual que simplesmente funciona: Desabilite o SMB 2.0 ( link )
Observe que copiei essa pergunta do SO porque entendi que o ServerFault é o melhor local para esse tipo de pergunta ( link )
Olá
Nós fomos confrontados com uma questão muito estranha que nos deixou loucos. Às vezes, os arquivos recém-criados em nosso PC com compartilhamento de arquivos estavam "ausentes" por algum período de tempo. Para reproduzir um problema, você deve ter pelo menos dois computadores, chamá-los de alpha
e beta
. Crie o compartilhamento de arquivos em beta
PC ( \beta\share\bug
) e execute este script do PowerShell em alpha
PC:
param(
$sharePath="\beta\share\bug"
)
$sharePC = ($sharePath -split '\')[2]
$session = New-PSSession -ComputerName $sharePC
$counter = 0
while ($true) {
$fileName = $sharePath + "\$counter.txt"
Invoke-Command -Session $session -ScriptBlock {
param(
$fileName
)
"" > $fileName
} -ArgumentList $fileName
if (Test-Path $fileName) {
Write-Host "File $fileName exists" -fore Green
} else {
Write-Host "!!! File $fileName does NOT exist!" -fore Red
}
$counter = $counter + 1
Start-Sleep 2
}
Depois de iniciar este script, você poderá ver essas mensagens:
File \beta\share\bug.txt exists
File \beta\share\bug.txt exists
...
E agora :
Abra cmd.exe
e execute este comando:
if exist \beta\share\bug\foo.txt echo 1
Depois disso, durante aproximadamente 10 segundos você verá as seguintes mensagens:
!!! File \beta\share\bug.txt does NOT exist!
!!! File \beta\share\bug.txt does NOT exist!
Descobrimos que o bug é causado pela enumeração do diretório compartilhado onde novos arquivos estão sendo criados. Em Python
chame os.listdir('//beta/share/bug')
para reproduzir um bug. Em C#
: Directory.GetDirectories(@"\beta\share\bug")
. Você pode até mesmo simplesmente navegar para compartilhar o diretório por shell e chamar ls
ou dir
.
Bug foram encontrados em Windows Server 2008 R2
. Bug também pode ser reproduzido em Windows 7
(em ambos os sistemas operacionais SMB 2.0
está instalado)
Note que você não pode assistir ao conteúdo do diretório em alpha
PC no Windows Explorer em tempo real, porque se você abrir este diretório no Explorer, o bug não ocorreria! Portanto, certifique-se de fechar todas as janelas antes de tentar reproduzir um bug. Após cada reinicialização do script, você deve remover manualmente todos os arquivos já criados do compartilhamento (porque o script é bastante estúpido e sempre inicia em 0.txt).
Atualmente, temos duas soluções alternativas para esse problema:
Alguém já descobriu um problema semelhante e pode explicar por que isso ocorre e como "corrigi-lo corretamente"?
Obrigado
Nossa solução atual que simplesmente funciona: Desabilite o SMB 2.0 ( link )
Se você não está querendo fazer downgrade do desempenho de seus serviços smb, modifique as seguintes configurações de registro em seu cliente smb.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Lanmanworkstation\Parameters
defina DirectoryCacheLifetime
, FileNotFoundCacheLifetime
e FileInfoCacheLifetime
como 0.