Перенос папок с сервера на сервер без потери разрешений

3
 
 

Дано: Сервер, на котором есть n-ное количество расшаренных папок. На папки действуют как разрешения на доступ, так и разрешения на фаловую систему.
Задача: Перенести папки на другой сервер, при этом сетевые имена и разрешения папок оставить без изменений.
Решение:

  1. Использование двух программ из Microsoft® Windows® 2000 Resource Kit и не много строчек в бат-нике
  2. Использовать утилиту - Microsoft File Server Migration Toolkit 1.1. Подробно тут

Нужны две программы:

  1. robocopy.exe - Robust File Copy for Windows NT. Это мощна утилита для репликации файлов, создает идентичную копию папки и\или структуры папок на одном компьютере или на сетевых компьютерах, причем есть возможность копирования и NTFS разрешений безопастности. Можно использовать даже как инструмент зеркалирования файлов. Очень подробно написано в прилагаемом в Resourse Kit файле помощи - Robocopy.doc
  2. permcopy.exe - Утилита для копирования разрешений (ACL) с одной сетевой папки на другую.

Итак, для примера, назовем наш исходный сервер - S-server, сервер назначения - D-server.
На сервере S-server есть зашареные папки -

  1. Сетевое имя - Folder1, Путь на сервере - D:\Shares\Folder1
  2. Сетевое имя  - РусПапка, Путь на сервере - D:\Shares\RusFolder

На сервере D-server наши папки мы положим в созданную на диске С: папку _Shares, т.е. путь будет C:\_Shares

Пишем Bat файлик с таким содержимым:

"robocopy.exe" \\S-server\d$\Shares\folder1 \\D-server\c$\_shares\Folder1 /E /Z /SEC /R:1 /LOG+:logmigrate.txt
net share Folder1="C:\_shares\Folder1"
"permcopy.exe" \\S-server Folder1 \\D-Server\Folder1
"robocopy.exe" \\S-server\d$\Shares\RusFolder\\D-server\c$\_shares\RusFolder /E /Z /SEC /R:1 /LOG+:logmigrate.txt
net share РусПапка="C:\_shares\RusFolder"
"permcopy.exe" \\S-server РусПапка \\D-Server\РусПапка

Теперь с пояснением:

"robocopy.exe" \\S-server\d$\Shares\folder1(Путь исходной папки) \\D-server\c$\_shares\Folder1(Путь к папке назначения, если такой нет будет создана) /E(копировать подпапки включая пустые) /Z(При сбое продолжать копировать с места разъединения) /SEC(Указание копировать NTFS разрешения) /R:1(количество попыток копирования, если произошел какой то сбой) /LOG+:logmigrate.txt(дописывание к логфайлу)

net share Folder1="C:\_shares\Folder1" - Создание сетевой папки Folder1, у которой физический путь на диске C:\_shares\Folder1 с разрешениями по умолчанию (Все - на чтение)

"permcopy.exe" \\S-server Folder1(Папка источник) \\D-Server\Folder1(Папка назначения) - Копирование разрешений (ACL)

Запускать Bat- файл нужно на сервере назначения в нашем случае на D-server, предварительно положив все файлы в одну папку.

Конечно, это не самый автоматизированный способ, если посидеть немного, подумать то можно доделать, т.е. получать список папок с сервера автоматически, пути к папкам, но нужно будет уже немного программить(скорее всего можно обойтись просто используя WMI), а у меня в тот момент, когда это нужно было, не было на это времени.

Ну, а когда поставленная задача сделана, тогда уже тем более  :-)))