Миграция файлового сервера с сохранением прав доступа: Robocopy, rsync, утилиты синхронизации | AdminWiki

Миграция файлового сервера с сохранением прав доступа: Robocopy, rsync, утилиты синхронизации

27 июля 2026 9 мин. чтения

Перенос файлового хранилища между серверами с полным сохранением структуры папок и NTFS-разрешений - задача, которая требует точного выбора инструмента и строгого соблюдения процедуры. Ошибка на этапе копирования может привести к потере ACL или длительному простою ресурсов. Этот материал содержит готовые команды, проверенные методики и пошаговые сценарии для Windows, Linux и гибридных сред.

Для миграции в Windows-среде используйте Robocopy с параметрами /COPYALL и /SEC. В Linux применяйте rsync с флагами -aAX. Для гибридных конфигураций, где нужно перенести данные между Windows и Linux, подключайте специализированные утилиты синхронизации: FreeFileSync, Syncthing или коммерческие решения. После переноса обязательно проверяйте корректность прав через icacls, Get-Acl или getfacl и проводите тестовые входы под разными учётными записями.

Миграция файлового сервера - это частный, но критически важный случай более широкой задачи переноса инфраструктуры. Если вы планируете комплексный переезд, включающий виртуальные машины и контейнеры, изучите практическое руководство по миграции серверов с чек-листом аудита и стратегиями бесшовного перехода. Для проектов, связанных с переносом больших объёмов данных в облачные S3-хранилища, используйте руководство по миграции данных в облако с детальным сравнением rclone, MinIO client и нативных средств TrueNAS.

Как выбрать инструмент для миграции файлового сервера

Выбор утилиты зависит от трёх факторов: операционной системы исходного и целевого серверов, объёма данных и требований к сохранению метаданных. Если оба сервера работают на Windows и используют NTFS, Robocopy обеспечивает полный перенос разрешений без дополнительных прослоек. Для пары Linux-серверов с POSIX-атрибутами и ACL оптимален rsync. Гибридные сценарии - Windows в Linux или наоборот - требуют инструментов, способных сопоставлять разные модели прав, например, через Samba или специализированные утилиты.

ИнструментСредаСохраняемые метаданныеТиповой объём данных
RobocopyWindows ↔ WindowsNTFS-разрешения, владельцы, атрибуты, временные меткиДо 100 ТБ
rsyncLinux ↔ LinuxPOSIX-права, ACL, xattr, владельцыДо 50 ТБ
FreeFileSyncГибридные средыБазовые права (зависит от протокола), структураДо 10 ТБ
Коммерческие (GoodSync, Resilio Sync)Гибридные средыРасширенные права, обработка конфликтовБолее 50 ТБ

Для критичных систем с высокими требованиями к сохранности ACL и минимальным простоем используйте связку из двух подходов: предварительную синхронизацию основного массива и финальную инкрементальную копию в окно отключения. Этот метод универсален для всех трёх групп инструментов.

Миграция в Windows-среде с помощью Robocopy

Robocopy (Robust File Copy) - встроенная утилита Windows, которая копирует файлы, папки и все связанные метаданные NTFS. Ключевые параметры для миграции с сохранением прав: /COPYALL - копирует данные, атрибуты, временные метки, владельца и ACL; /SEC - дублирует только разрешения (без владельца); /MIR - зеркалирует структуру каталогов, удаляя на целевом сервере файлы, которых нет в источнике; /ZB - использует режим перезапуска с резервным копированием для обхода блокировок.

Перед запуском убедитесь, что учётная запись, выполняющая копирование, имеет права администратора на обоих серверах и доступ к целевой сетевой шаре. Целевой каталог должен существовать, иначе Robocopy создаст его автоматически при первом проходе.

Пошаговая инструкция: перенос данных с сохранением NTFS-прав

Шаг 1: подготовка целевого сервера. Создайте общую папку на целевом сервере и настройте сетевой доступ. Убедитесь, что разрешения на уровне шлюза (Share Permissions) не блокируют запись для учётной записи миграции. Откройте командную строку от имени администратора.

Шаг 2: начальная синхронизация. Выполните полное копирование данных с сохранением всех атрибутов. Команда выглядит так:

robocopy \\source-server\share \\target-server\share /COPYALL /E /ZB /R:3 /W:10 /LOG:C:\migration\initial_copy.log /TEE

Расшифровка флагов: /E - копирует все подкаталоги, включая пустые; /R:3 - три попытки при ошибке; /W:10 - пауза 10 секунд между попытками; /LOG - запись лога; /TEE - дублирование вывода в консоль. Процесс может занять часы или дни в зависимости от объёма данных. Не прерывайте его без крайней необходимости.

Шаг 3: финальная синхронизация. Запланируйте окно отключения доступа пользователей к исходному серверу. Остановите службы, которые могут удерживать открытые файлы. Запустите ту же команду повторно. Robocopy скопирует только изменившиеся и новые файлы. После завершения отключите старую шару и перенаправьте пользователей на новый сервер через DNS или групповые политики.

Типовые ошибки при использовании Robocopy и как их избежать

Ошибка: недостаточно прав на целевом сервере. Симптом - ошибка 5 (Access Denied) в логе. Решение: запускайте командную строку от имени администратора и проверьте, что учётная запись входит в локальную группу «Администраторы» на целевом сервере. Для доменной среды используйте учётную запись с правами Backup Operators и Restore Operators.

Ошибка: неверный порядок параметров. Robocopy чувствителен к синтаксису. Параметр /MIR в сочетании с неверным путём может удалить данные на целевом сервере. Всегда сначала тестируйте команду с флагом /L (режим списка, без реального копирования), чтобы увидеть, какие файлы будут затронуты.

Ошибка: игнорирование открытых файлов. Robocopy по умолчанию пропускает файлы, заблокированные другими процессами. Используйте /ZB для повторных попыток с резервным режимом, но лучший подход - предварительно закрыть все пользовательские сессии и остановить антивирусное сканирование на время финальной синхронизации.

Миграция в Linux-среде с помощью rsync

rsync - стандартный инструмент для синхронизации файлов в Linux, который передаёт только разницу между источником и приёмником. Для сохранения прав доступа, ACL и расширенных атрибутов используйте флаги -a (archive), -A (ACLs) и -X (extended attributes). Опция --numeric-ids предотвращает сопоставление UID/GID по именам, что критично при переносе между серверами с разными базами пользователей.

Если вы параллельно настраиваете резервное копирование нового сервера, обратитесь к руководству по резервному копированию сервера в 2026 с готовыми скриптами для BorgBackup, Rclone и rsync.

Пошаговая инструкция: синхронизация файлов с сохранением атрибутов

Шаг 1: настройка SSH-доступа. Сгенерируйте SSH-ключ на целевом сервере и добавьте публичную часть в ~/.ssh/authorized_keys на исходном сервере. Проверьте подключение:

ssh user@source-server

Шаг 2: выполнение rsync. Базовая команда для полной миграции с сохранением всех атрибутов:

rsync -aAXv --numeric-ids --progress user@source-server:/data/ /data/

Флаг -a включает рекурсивное копирование, сохранение симлинков, прав, владельцев и временных меток. -A добавляет списки ACL, -X - расширенные атрибуты. --progress показывает прогресс в реальном времени. Для очень больших каталогов добавьте --partial для докачки оборванных файлов.

Шаг 3: проверка целостности. После завершения выполните контрольный прогон с флагом -c, который сравнивает файлы по контрольным суммам, а не по размеру и дате:

rsync -aAXvc --numeric-ids user@source-server:/data/ /data/

Отсутствие вывода означает, что все файлы идентичны.

Типовые ошибки при использовании rsync и их решение

Ошибка: несовпадение UID/GID. Если пользователь «www-data» на исходном сервере имеет UID 33, а на целевом - 1001, права после копирования будут выглядеть некорректно. Используйте --numeric-ids, чтобы перенести числовые идентификаторы как есть, а затем при необходимости скорректируйте их на новом сервере командой find /data -uid 33 -exec chown 1001 {} \;.

Ошибка: потеря расширенных атрибутов. Без флага -X rsync не копирует xattr, в которых могут храниться метаданные SELinux или сжатие. Всегда добавляйте -X, если исходная файловая система использует расширенные атрибуты.

Ошибка: проблемы с симлинками. По умолчанию rsync копирует симлинки как симлинки. Если целевая файловая система не поддерживает их, добавьте --copy-links для копирования содержимого по ссылкам вместо создания символьных связей. Проверьте совместимость файловых систем до начала миграции.

Специализированные утилиты для гибридных сред и сложных сценариев

Когда исходный и целевой серверы работают на разных ОС, прямого сопоставления прав не существует. NTFS-разрешения и POSIX ACL имеют разную структуру и семантику. Специализированные утилиты решают эту проблему через промежуточный слой: Samba транслирует NTFS-права в POSIX ACL на лету, а FreeFileSync и аналоги используют протоколы SMB/CIFS или NFS для доступа к обеим системам и сохраняют максимум возможных метаданных.

Для проектов, где миграция файлового сервера - часть более широкого плана по избавлению от устаревших систем, используйте руководство по вынужденной миграции инфраструктуры с чек-листами для перехода с CentOS 7 и решениями проблем Samba.

Сценарий: перенос данных с Windows на Linux с сохранением прав

Задача: переместить файловый сервер с Windows Server 2022 на Linux с Samba, сохранив структуру разрешений для доменных пользователей. Решение включает три этапа.

Этап 1: настройка Samba на Linux. Установите Samba и настройте доменную интеграцию через Winbind или SSSD. В smb.conf включите поддержку расширенных ACL:

[global]
   server role = member server
   realm = DOMAIN.LOCAL
   workgroup = DOMAIN
   security = ADS
   idmap config * : backend = tdb
   idmap config * : range = 3000-7999
   vfs objects = acl_xattr
   map acl inherit = yes
   store dos attributes = yes

Этап 2: перенос данных через FreeFileSync. Установите FreeFileSync на Windows-машину, которая имеет доступ к обоим серверам. Создайте задачу синхронизации: исходная папка - сетевая шара Windows, целевая - шара Samba на Linux. В настройках выберите режим «Зеркало» и включите опцию «Копировать права доступа». Запустите синхронизацию. FreeFileSync скопирует файлы и попытается применить соответствующие ACL через SMB-протокол.

Этап 3: проверка результата. На Linux-сервере выполните getfacl /path/to/folder и сравните вывод с ожидаемыми разрешениями. Проверьте доступ с клиентской Windows-машины под разными учётными записями: пользователь должен видеть те же папки и иметь те же права на чтение/запись, что и на старом сервере.

Проверка корректности перенесенных прав доступа

Верификация прав - обязательный этап, который нельзя пропускать. Даже если утилита миграции отрапортовала об успехе, часть ACL могла быть утеряна из-за несовместимости файловых систем или ошибок в настройках. Проверка должна включать автоматическое сравнение ACL и ручное тестирование доступа.

Для Windows используйте icacls для выгрузки разрешений в текстовый файл и последующего сравнения. Команда для исходного сервера:

icacls D:\Share\* /save C:\migration\source_acl.txt /T

Для целевого сервера выполните аналогичную команду и сравните файлы через PowerShell:

Compare-Object (Get-Content C:\migration\source_acl.txt) (Get-Content C:\migration\target_acl.txt)

Для Linux используйте getfacl с рекурсивным обходом и diff для поиска расхождений. Ручное тестирование проведите под тремя типами учётных записей: администратор, обычный пользователь с полными правами на часть папок, пользователь с ограниченным доступом. Проверьте операции чтения, создания, изменения и удаления файлов в каждой категории.

Автоматизация проверки прав с помощью скриптов

Для крупных файловых систем с сотнями тысяч объектов ручная проверка нереалистична. PowerShell-скрипт для Windows, который сравнивает ACL рекурсивно и выводит только расхождения:

$source = "\\old-server\share"
$target = "\\new-server\share"
$folders = Get-ChildItem -Path $source -Recurse -Directory
foreach ($folder in $folders) {
    $relativePath = $folder.FullName.Replace($source, "")
    $targetPath = Join-Path $target $relativePath
    $sourceAcl = Get-Acl $folder.FullName
    $targetAcl = Get-Acl $targetPath
    if ($sourceAcl.Sddl -ne $targetAcl.Sddl) {
        Write-Host "MISMATCH: $relativePath"
    }
}

Для Linux аналогичный скрипт на bash с getfacl и diff:

#!/bin/bash
SOURCE="/data/old"
TARGET="/data/new"
find "$SOURCE" -type d | while read dir; do
    rel="${dir#$SOURCE}"
    if ! diff <(getfacl "$dir" 2>/dev/null) <(getfacl "$TARGET$rel" 2>/dev/null) > /dev/null; then
        echo "MISMATCH: $rel"
    fi
done

Как минимизировать время простоя при миграции файлового сервера

Время простоя - основной риск при миграции. Пользователи не могут работать с файлами, бизнес-процессы останавливаются. Стратегия минимизации downtime строится на двух принципах: предварительная синхронизация (seeding) и инкрементальные обновления. Основной массив данных переносится заранее, пока старый сервер ещё в работе. Затем, непосредственно перед переключением, выполняется быстрая синхронизация только изменившихся файлов.

Для Robocopy используйте параметр /MON:1, который переводит утилиту в режим мониторинга и запускает повторную синхронизацию при появлении одного изменённого файла. Для rsync применяйте многократные запуски с уменьшающимся интервалом: первый - за сутки до переключения, второй - за час, третий - непосредственно перед отключением старого сервера.

План миграции с минимальным влиянием на пользователей

Этап 1: полная синхронизация. Запустите начальное копирование в нерабочее время (ночь, выходные). Для объёма 5 ТБ по гигабитной сети этот этап занимает 12-14 часов. Убедитесь, что синхронизация завершена без критических ошибок.

Этап 2: инкрементальные синхронизации. Выполните 2-3 повторных запуска с интервалом в несколько часов. Каждый последующий проход будет быстрее предыдущего, так как копирует только дельту изменений. Типичное время инкрементальной синхронизации для офисного файлового сервера - 15-30 минут.

Этап 3: переключение. Оповестите пользователей о плановом отключении. Заблокируйте доступ к старому серверу (отключите шару или остановите службу Server). Выполните финальную синхронизацию. Измените DNS-запись или обновите пути в групповых политиках, чтобы клиенты обращались к новому серверу. Общее время простоя при таком подходе - от 5 до 30 минут.

Если вам требуется облачная инфраструктура для нового файлового сервера, Timeweb Cloud предоставляет серверы, VDS и хранилище с гибким масштабированием ресурсов.

Поделиться:
Сохранить гайд? В закладки браузера