Файловый ресурс Windows: почему иногда вновь созданные файлы не отображаются Не видно какое-то время?

Мы столкнулись с очень странной проблемой, которая сводила нас с ума. Иногда вновь созданные файлы на нашем компьютере с файловым хранилищем «отсутствовали» в течение некоторого периода времени. Для воспроизведения проблемы у вас должно быть по крайней мере два компьютера, назовите их альфа и бета . Создайте файловый ресурс на beta ПК ( \\ beta \ share \ bug ) и запустите этот сценарий PowerShell с alpha ПК:

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
}

После запуска этого сценария вы должен видеть эти сообщения:

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

А теперь : Иногда вновь созданные файлы на нашем компьютере с файловым хранилищем «отсутствовали» в течение некоторого периода времени. Для воспроизведения проблемы у вас должно быть как минимум два ...

Мы столкнулись с очень странной проблемой, которая сводила нас с ума. Иногда вновь созданные файлы на нашем компьютере с файловым хранилищем «отсутствовали» в течение некоторого периода времени. Для воспроизведения проблемы у вас должно быть по крайней мере два компьютера, назовите их альфа и бета . Создайте файловый ресурс на beta ПК ( \\ beta \ share \ bug ) и запустите этот сценарий PowerShell с alpha ПК:

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
}

После запуска этого сценария вы должен видеть эти сообщения:

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

А теперь : Иногда вновь созданные файлы на нашем компьютере с файловым хранилищем «отсутствовали» в течение некоторого периода времени. Для воспроизведения проблемы у вас должно быть как минимум два ...

Мы столкнулись с очень странной проблемой, которая сводила нас с ума. Иногда вновь созданные файлы на нашем компьютере с файловым хранилищем «отсутствовали» в течение некоторого периода времени. Для воспроизведения проблемы у вас должно быть по крайней мере два компьютера, назовите их альфа и бета . Создайте файловый ресурс на beta ПК ( \\ beta \ share \ bug ) и запустите этот сценарий PowerShell с alpha ПК:

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
}

После запуска этого сценария вы должен видеть эти сообщения:

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

А теперь :

Мы столкнулись с очень странной проблемой, которая сводила нас с ума. Иногда вновь созданные файлы на нашем компьютере с файловым хранилищем «отсутствовали» в течение некоторого периода времени. Для воспроизведения проблемы у вас должно быть по крайней мере два компьютера, назовите их альфа и бета . Создайте файловый ресурс на beta ПК ( \\ beta \ share \ bug ) и запустите этот сценарий PowerShell с alpha ПК:

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
}

После запуска этого сценария вы должен видеть эти сообщения:

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

А теперь :

Мы столкнулись с очень странной проблемой, которая сводила нас с ума. Иногда вновь созданные файлы на нашем компьютере с файловым хранилищем «отсутствовали» в течение некоторого периода времени. Для воспроизведения проблемы у вас должно быть по крайней мере два компьютера, назовите их альфа и бета . Создайте файловый ресурс на beta ПК ( \\ beta \ share \ bug ) и запустите этот сценарий PowerShell с alpha ПК:

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
}

После запуска этого сценария вы должен видеть эти сообщения:

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

А теперь : Откройте cmd.exe и запустите эту команду:

если существует \\ beta \ share \ bug \ foo.txt echo 1

После этого в течение примерно 10 секунд вы увидите следующие сообщения:

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

Мы обнаружили, что ошибка вызвана перечислением общего каталога, в котором создаются новые файлы. В Python вызовите os.listdir ('// beta / share / bug') для воспроизведения ошибки. В C # : Directory.GetDirectories (@ "\\ beta \ share \ bug") . Вы даже можете просто перейти к общему каталогу с помощью оболочки и вызвать ls или dir .

Ошибка была обнаружена в Windows Server 2008 R2

Обратите внимание, что вы не можете смотрите содержимое каталога на ПК alpha в Проводнике Windows в реальном времени, потому что, если вы откроете этот каталог в Проводнике, ошибка не возникнет! Поэтому убедитесь, что все такие окна закрыты, прежде чем пытаться воспроизвести ошибку. После каждого перезапуска скрипта вы должны вручную удалить все уже созданные файлы из общего ресурса (потому что скрипт довольно глуп и всегда начинается с 0.txt).

В настоящее время у нас есть 2 обходных пути для этой проблемы:

  1. Если клиент видит эту ситуацию, он создает временный файл в проблемном каталоге - после этого файлы волшебным образом появляются.
  2. Отключить SMB 2.0: http://www.petri.co.il/how-to-disable-smb-2-on-windows -vista-or-server-2008.htm

Кто-нибудь когда-либо обнаруживал подобную проблему и мог бы объяснить, почему она возникает и как ее «правильно исправить»?

Спасибо

24
задан Roman 14 December 2011 в 10:41
поделиться