Compartilhamento de arquivos do Windows: por que às vezes os arquivos recém-criados não são visíveis por algum período de tempo?

1

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:

  1. Se o cliente vir essa situação, ele criará um arquivo temporário no diretório problemático - depois que esses arquivos aparecerem magicamente.
  2. Desativar o SMB 2.0: link

Alguém já descobriu um problema semelhante e pode explicar por que isso ocorre e como "corrigi-lo corretamente"?

Obrigado

    
por Roman 02.03.2011 / 17:12

2 respostas

1

Nossa solução atual que simplesmente funciona: Desabilite o SMB 2.0 ( link )

    
por 29.08.2011 / 15:47
1

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.

A correção é descrita aqui e aqui .

    
por 17.12.2012 / 07:25