Перемещение папки профилей доменных пользователей (по умолчанию C:\Users
) на другой диск (например, E:\Users
) в Windows Server 2019, особенно на контроллере домена, является ответственной задачей. Этот процесс требует аккуратности для обеспечения сохранности данных и бесперебойной работы пользователей. Данное руководство предоставит вам пошаговую инструкцию, ориентированную на безопасность, автоматизацию для нескольких десятков пользователей и использование рекомендуемых системных инструментов.
Robocopy
для точного копирования папки C:\Users
в новую локацию E:\Users
. Этот инструмент позволяет сохранить все файлы, разрешения NTFS, атрибуты и временные метки.mklink /J C:\Users E:\Users
для обеспечения максимальной совместимости с приложениями.Прежде чем приступить к фактическому переносу данных, крайне важно выполнить следующие подготовительные шаги. Тщательная подготовка минимизирует риски и обеспечивает плавность процесса.
Это самый важный шаг. Создайте полную резервную копию вашего Windows Server 2019, включая состояние системы (System State), которое содержит реестр и конфигурацию Active Directory. Используйте встроенное средство "Система архивации данных Windows Server" или ваше корпоративное решение для резервного копирования. Убедитесь, что копия успешно создана и верифицирована.
Все пользователи должны завершить свои сеансы на сервере. Вы можете проверить активные сеансы с помощью команды query user
или quser
в командной строке и, при необходимости, принудительно завершить их (например, logoff [ID_сеанса]
). Лучше всего выполнять миграцию во внерабочее время.
Создайте новую папку на целевом диске, куда будут перемещены профили. Например, E:\Users
.
Пример окна настроек безопасности для папки.
Хотя `Robocopy` с параметром `/COPYALL` скопирует точные разрешения для каждого подкаталога профиля, для корневой папки `E:\Users` рекомендуется установить разрешения, аналогичные стандартным для `C:\Users`. Как минимум, система (SYSTEM) и администраторы должны иметь полный доступ.
После завершения подготовки можно приступать непосредственно к переносу профилей. Этот процесс состоит из копирования данных и обновления конфигурации системы.
Утилита `Robocopy` (Robust File Copy) является мощным стандартным инструментом Windows для копирования файлов и каталогов. Она идеально подходит для миграции профилей благодаря своей способности сохранять разрешения NTFS, атрибуты файлов и обеспечивать отказоустойчивость.
Откройте командную строку или PowerShell от имени администратора и выполните следующую команду:
robocopy C:\Users E:\Users /MIR /COPYALL /XJ /ZB /R:3 /W:5 /MT:32 /LOG:E:\User_Profiles_Migration_Log.txt /NFL /NDL
Эта команда скопирует все содержимое `C:\Users` в `E:\Users`. Давайте разберем ключевые параметры:
Параметр | Описание |
---|---|
C:\Users |
Исходный каталог профилей. |
E:\Users |
Целевой каталог для профилей. |
/MIR |
Зеркалирует дерево каталогов (эквивалентно /E плюс /PURGE ). Удаляет файлы из целевого каталога, если их нет в исходном. Будьте осторожны, если в `E:\Users` уже есть какие-то данные. |
/COPYALL |
Копирует всю информацию о файлах, включая данные, атрибуты, метки времени, разрешения NTFS (ACL), сведения о владельце и аудиторскую информацию. |
/XJ |
Исключает точки соединения (junction points), которые обычно находятся внутри профилей. |
/ZB |
Использует режим перезапуска; если доступ запрещен, использует режим резервного копирования. Помогает при работе с заблокированными файлами. |
/R:3 |
Количество повторных попыток при ошибке копирования (здесь 3). |
/W:5 |
Время ожидания между повторными попытками (здесь 5 секунд). |
/MT:32 |
Выполняет многопоточное копирование с указанным числом потоков (здесь 32) для ускорения процесса. |
/LOG:E:\User_Profiles_Migration_Log.txt |
Записывает подробный лог операции в указанный файл. Рекомендуется использовать для анализа результатов. |
/NFL |
Отключает логирование имен файлов. Используйте, если не хотите видеть каждый файл в логе, а только итоги. |
/NDL |
Отключает логирование имен каталогов. |
Дождитесь полного завершения операции `Robocopy`. Проверьте лог-файл на наличие ошибок.
После того как все файлы профилей скопированы, необходимо сообщить операционной системе новое местоположение профилей. Это делается путем редактирования системного реестра. Изменения затронут как общие настройки путей к профилям, так и пути для каждого существующего пользователя.
Важно: Некорректное изменение реестра может привести к серьезным проблемам в работе системы. Убедитесь, что у вас есть резервная копия реестра (часть полного бэкапа сервера).
Следующие значения в реестре определяют базовый каталог для всех профилей, а также пути к профилям `Default` (шаблон для новых пользователей) и `Public` (общие файлы):
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\ProfilesDirectory
(тип REG_EXPAND_SZ)HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\Default
(тип REG_EXPAND_SZ)HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\Public
(тип REG_EXPAND_SZ)Их нужно изменить с `C:\Users` на `E:\Users` (например, `ProfilesDirectory` станет `E:\Users`, `Default` станет `E:\Users\Default`).
Для каждого пользователя, чей профиль был перенесен, необходимо обновить значение `ProfileImagePath` в его разделе реестра. Эти разделы находятся здесь: `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\[SID_Пользователя]`, где `[SID_Пользователя]` — это идентификатор безопасности пользователя.
Для автоматизации изменения путей в реестре для десятков пользователей рекомендуется использовать скрипт PowerShell. Запустите PowerShell от имени администратора и выполните следующий скрипт:
# Путь к разделу реестра со списком профилей
$profileListPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
# Обновление глобальных путей
Write-Host "Updating global profile paths..."
try {
Set-ItemProperty -Path $profileListPath -Name "ProfilesDirectory" -Value "E:\Users" -ErrorAction Stop
Write-Host " ProfilesDirectory updated to E:\Users"
Set-ItemProperty -Path $profileListPath -Name "Default" -Value "E:\Users\Default" -ErrorAction Stop
Write-Host " Default profile path updated to E:\Users\Default"
Set-ItemProperty -Path $profileListPath -Name "Public" -Value "E:\Users\Public" -ErrorAction Stop
Write-Host " Public profile path updated to E:\Users\Public"
} catch {
Write-Error "Error updating global profile paths: $($_.Exception.Message)"
}
# Обновление путей для каждого профиля пользователя
Write-Host "Updating individual user profile paths..."
Get-ChildItem $profileListPath | Where-Object {$_.PSChildName -like "S-1-5-21-*"} | ForEach-Object {
$sid = $_.PSChildName
$profilePathProperty = Get-ItemProperty -Path "$profileListPath\$sid" -Name "ProfileImagePath" -ErrorAction SilentlyContinue
if ($profilePathProperty) {
$currentPath = $profilePathProperty.ProfileImagePath
if ($currentPath -like "C:\Users\*") {
$newPath = $currentPath -replace [regex]::Escape("C:\Users"), "E:\Users" # Замена с экранированием для надежности
try {
Set-ItemProperty -Path "$profileListPath\$sid" -Name "ProfileImagePath" -Value $newPath -ErrorAction Stop
Write-Host " Updated SID $sid: $currentPath -> $newPath"
} catch {
Write-Error " Error updating SID $sid path to $newPath: $($_.Exception.Message)"
}
} elseif ($currentPath -like "E:\Users\*") {
Write-Host " SID $sid already points to E:\Users ($currentPath). Skipping."
} else {
Write-Host " SID $sid path ($currentPath) does not match C:\Users\*. Skipping."
}
} else {
Write-Warning " Could not retrieve ProfileImagePath for SID $sid."
}
}
Write-Host "Registry update script finished."
Этот скрипт сначала обновит глобальные пути `ProfilesDirectory`, `Default` и `Public`, а затем пройдет по всем подразделам `ProfileList`, найдет пути профилей пользователей (идентифицируемых по SID, начинающемуся с `S-1-5-21-`), которые указывают на `C:\Users`, и изменит их на `E:\Users`.
Чтобы лучше понять этапы и взаимосвязи в процессе миграции профилей, рассмотрим следующую ментальную карту:
Эта карта наглядно демонстрирует последовательность действий и ключевые точки контроля.
При планировании и выполнении миграции важно учитывать различные факторы. Приведенная ниже диаграмма оценивает рекомендуемый метод (Robocopy + правка реестра + символическая ссылка) по нескольким ключевым аспектам, а также показывает их относительную важность.
Как видно из диаграммы, предлагаемый метод обеспечивает высокую сохранность данных и отличную совместимость, при этом автоматизация достигается за счет скриптов, а сложность остается умеренной.
После копирования данных и обновления реестра необходимо выполнить заключительные действия для завершения миграции и обеспечения стабильной работы системы.
После внесения изменений в реестр обязательно перезагрузите сервер. Это необходимо для того, чтобы операционная система корректно применила новые пути к профилям.
После перезагрузки войдите в систему под несколькими тестовыми учетными записями (включая администратора и обычного пользователя домена). Убедитесь, что:
sysdm.cpl
-> Дополнительно -> Профили пользователей) указывает на новую папку (`E:\Users`).Только после того, как вы полностью убедились, что все профили корректно работают из новой папки `E:\Users` и все данные на месте, можно приступать к удалению старой папки `C:\Users` для освобождения места на системном диске.
Внимание: Этот шаг необратим без восстановления из резервной копии. Прежде чем удалять, рекомендуется переименовать папку `C:\Users` (например, в `C:\Users_old`) и поработать в таком режиме несколько дней. Если проблем не возникает, можно удалять `C:\Users_old`.
Для удаления используйте командную строку от имени администратора:
REM Сначала переименовываем, если хотим подстраховаться
REM RENAME C:\Users C:\Users_old
REM А затем, после проверки, удаляем окончательно (пример для C:\Users_old):
REM RMDIR /S /Q C:\Users_old
Или, если вы уверены и готовы удалить сразу (используйте с крайней осторожностью, убедившись, что все пользователи вышли из системы и вы вошли под учетной записью, чей профиль НЕ находится в `C:\Users`, например, встроенный администратор, чей профиль уже на E: или временный):
RMDIR /S /Q C:\Users
Возможно, потребуется загрузка в безопасном режиме или с использованием среды восстановления Windows PE для полного удаления `C:\Users`, если некоторые файлы останутся заблокированными системой.
Даже после обновления путей в реестре, некоторые старые или некорректно написанные приложения могут продолжать обращаться к профилям по старому пути `C:\Users`. Чтобы обеспечить максимальную совместимость и избежать потенциальных проблем, рекомендуется создать символическую ссылку (junction point) с `C:\Users` на `E:\Users`. Это делается после удаления (или переименования) оригинальной папки `C:\Users`.
Откройте командную строку от имени администратора и выполните:
mklink /J C:\Users E:\Users
Эта команда создаст символическую ссылку типа "соединение каталогов" (junction), которая будет перенаправлять все запросы от `C:\Users` к `E:\Users`. Система и приложения будут "думать", что папка `Users` все еще находится на диске C:, хотя физически она будет на диске E:.
После создания символической ссылки рекомендуется еще раз перезагрузить сервер и провести финальное тестирование работы всех сервисов и пользовательских приложений.
Хотя описанный выше метод с использованием системных инструментов является надежным и контролируемым, существуют сторонние утилиты, такие как AOMEI Partition Assistant Server, которые предлагают функции для переноса папки профилей пользователей через графический интерфейс. Такие инструменты могут упростить процесс для некоторых администраторов, однако важно выбирать проверенные решения от надежных поставщиков и понимать, как они работают.