...

пятница, 5 декабря 2014 г.

DFS Replication и «временные» файлы

Всем привет!

Это моя первая публикация, надеюсь, что в дальнейшем буду писать часто.

Если что-то неправильно оформил, поправьте, я исправлю как надо.

В работе пришлось столкнуться с интересной особенностью работы DFS Replication. И хотя сам рассматриваемый вопрос не нов, набить на нем шишки могут многие.


Итак, у нас есть стабильно работающая среда, в которой успешно настроены и работают DFS-репликации. Создана репликационная группа, в нее добавлены все нужные серверы, топология корректна, расписание тоже, все хорошо… пока однажды новые файлы, добавленные в реплицируемую папку не перестают копироваться на удаленные серверы.


Для примера я сделал тестовую среду, в которой всего два сервера — LAB-DC1 и LAB-FS1. На каждом из них есть папка C:\DFSR, между которыми и должна проходить репликация.


Копируем в эту папку на LAB-DC1 два тестовых файла и видим, что на второй сервер отреплицировался только один.


image


Почему?


Потому что механизм DFS Replication устроен так, что by design не копирует файлы, у которых установлен атрибут Temporary. Воспользуемся командой fsutil и посмотрим, какие атрибуты имеют оба наших файла.


Файл not-a-temporary-file.txt имеет атрибуты 0x20:


Файл temporary-file.txt имеет атрибуты 0x120:


Раскодировать эти шестнадцатеричные числа очень просто. Каждый возможный атрибут файла имеет свое шестнадцатеричное значение. Вот все возможные варианты:





























































READONLY0x1
HIDDEN0x2
SYSTEM0x4
DIRECTORY0x10
ARCHIVE0x20
DEVICE0x40
NORMAL0x80
TEMPORARY0x100
SPARSE_FILE0x200
REPARSE_POINT0x400
COMPRESSED0x800
OFFLINE0x1000
NOT_CONTENT_INDEXED0x2000
ENCRYPTED0x4000



Из этого списка видно, что not-a-temporary-file.txt имеет только атрибут «Archive», а temporary-file.txt — атрибуты «Archive» и «Temporary».

И все файлы, для которых задано «Temporary», не будут реплицироваться с помощью механизма DFS Replication.

Снять данный атрибут со всех вложенных файлов и папок очень просто с помощью маленького PowerShell-скрипта:



Get-ChildItem C:\DFSR -recurse | ForEach-Object -process {if (($_.attributes -band 0x100) -eq 0x100) {$_.attributes = ($_.attributes -band 0xFEFF)}}

Снимаем атрибут и вуаля! Наш «проблемный» файл temporary-file.txt успешно скопировался на удаленный сервер:


Откуда в сети берутся «временные» файлы — история умалчивает. У меня откуда-то появились. Для того, чтобы поэкспериментировать, можно установить для файла атрибут «Temporary» руками. Для этого тоже можно воспользоваться простым PowerShell-скриптом:



$file = Get-Item C:\DFSR\temporary-file.txt
$file.Attributes = 0x120


На этом все, надеюсь, что данная статья поможет кому-то еще в решении проблем, связанных с работой DFS Replication.


Напоследок хочется сказать спасибо Крэгу Лэндису, который в далеком 2008-м году опубликовал у себя в блоге исчерпывающую статью на эту тему.


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий