Partage de fichiers Windows: pourquoi parfois les fichiers nouvellement créés ne sont pas visibles pour une certaine période de temps?

Nous avons été confrontés à de très étrange question qui nous ont fait le fou. Parfois, les fichiers nouvellement créés sur notre Partage de Fichiers de PC ont été "absent" pendant une certaine période de temps. Pour reproduire le problème, vous devriez avoir au moins deux ordinateurs, appeler alpha et beta. Créer un partage de fichiers sur beta PC (\\beta\share\bug) et exécutez ce script PowerShell à partir de 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
}

Après le début de ce script, vous devriez être capable de voir ces messages:

File \\beta\share\bug.txt exists
File \\beta\share\bug.txt exists
...

Et maintenant:
Ouvrir cmd.exe et exécutez cette commande:

if exist \\beta\share\bug\foo.txt echo 1

Après ce pendant environ 10 secondes, vous verrez des messages suivants:

!!! File \\beta\share\bug.txt does NOT exist!
!!! File \\beta\share\bug.txt does NOT exist!

Nous avons découvert que ce bug est causée par l'énumération répertoire partagé lorsque de nouveaux fichiers sont créés. Dans Python appel os.listdir('//beta/share/bug') de reproduire un bug. Dans C#: Directory.GetDirectories(@"\\beta\share\bug"). Vous pouvez même naviguer simplement dans le répertoire de partage par shell et appel ls ou dir.

Bug a été trouvé sur Windows Server 2008 R2

Notez que vous ne pouvez pas regarder le contenu du répertoire sur alpha PC dans l'Explorateur Windows en temps réel, car si vous ouvrez ce répertoire dans l'Explorateur bug n'aurait pas lieu! Afin de s'assurer de fermer tous ces fenêtres avant de tentatives pour reproduire un bug. Après chaque script de redémarrage, vous devez supprimer manuellement tous les fichiers créés à partir de l'action (parce que le script est plutôt stupide et démarre toujours à partir de 0.txt).

Actuellement, nous avons 2 solutions à ce problème:

  1. Si le client voit cette situation, il crée des fichiers temporaires dans la problématique d'annuaire - après cela, les fichiers apparaissent comme par magie.
  2. Désactiver SMB 2.0: http://www.petri.co.il/how-to-disable-smb-2-on-windows-vista-or-server-2008.htm

Quelqu'ont jamais découvert problème similaire et peut expliquer pourquoi il se produit et comment correctement "réparer"?

Grâce

  • Avez-vous regardé une trace réseau pour voir ce qu'il se passe?
  • Non, malheureusement, je n'ai pas regardé trace réseau
  • Je ne pense pas qu'une trace réseau va aider. Cela semble être un problème de mise en cache côté serveur. Nous avons exactement le même problème à partir de Windows 2003 pour 2012R2. Il semble SMB affiche les fichiers pour le serveur qui les a créés, mais montre ensuite les fichiers n'existent pas encore sur d'autres serveurs que de requête pour eux. Il est assez mauvais.
InformationsquelleAutor Roman | 2011-03-01