При эксплуатации терминальных серверов на базе Windows Server системные администраторы часто сталкиваются с проблемой нехватки свободного места на системном диске C. Основным потребителем пространства обычно становятся профили пользователей (папка Users), в которых хранятся не только рабочие столы и документы, но и объемные данные приложений в папке AppData. Простое перемещение файлов не решает задачу, так как операционная система должна четко понимать, где искать данные конкретной учетной записи. В этой статье мы разберем, как корректно выполнить перенос, избежав типичных ошибок, таких как создание временных профилей.
Рассмотрим ситуацию: администратор меняет пути в реестре, копирует файлы, но при попытке входа пользователя система выдает ошибку и создает временный профиль в папке TEMP. Проанализируем причину такого поведения. Windows строго следит за безопасностью пользовательских данных. Если при обращении к новой папке профиля система обнаруживает, что права доступа (NTFS Permissions) не соответствуют эталонным или владелец папки не совпадает с SID пользователя, механизм загрузки профиля блокируется. В реестре при этом создается дублирующая ветка с расширением .bak.
Этот метод является классическим и позволяет перенести как будущие профили, так и уже существующие. Разберем его по шагам:
Откроем редактор реестра и перейдем в ветку:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Найдем параметр ProfilesDirectory. Изменим его значение с %SystemDrive%\Users на, например, D:\Users. С этого момента все новые учетные записи будут создаваться на диске D.
Для конкретного пользователя необходимо изменить путь в его персональной ветке реестра. Внутри ProfileList найдем подраздел, имя которого совпадает с SID нужного пользователя. В параметре ProfileImagePath заменим путь C:\Users\ИмяПользователя на D:\Users\ИмяПользователя.
Это самый важный этап. Простого копирования файлов недостаточно. Выясним причину успеха, описанную в решении проблемы: необходимо, чтобы права на папку D:\Users\Alex были идентичны правам на C:\Users\Alex.
Для этого рекомендуем использовать файловые менеджеры, умеющие копировать права NTFS, либо выполнить настройку вручную в свойствах папки на вкладке Безопасность. Пользователь должен быть владельцем своей папки и иметь к ней полный доступ, а системные учетные записи (SYSTEM, Администраторы) должны сохранять свои уровни полномочий.
Чтобы избежать ошибок с правами доступа, проанализируем использование системной утилиты Robocopy. Она позволяет перенести данные с сохранением всех атрибутов и прав в автоматическом режиме. Рассмотрим пример команды:
robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ /R:3 /W:5
Разберем ключи, которые мы используем:
/E — копирование всех подпапок, включая пустые./COPYALL — копирование всей информации о файле (атрибуты, временные метки и, самое главное, списки управления доступом ACL)./XJ — исключение точек соединения (Junction points). Это критически важно для Windows Server 2008 и выше, так как внутри профилей есть циклические ссылки типа "Application Data", которые могут привести к бесконечному зацикливанию при копировании./R:3 /W:5 — количество попыток и время ожидания при ошибке доступа.Существует более «хитрый» способ, который позволяет обмануть систему и приложения, не меняя пути в реестре. Мы физически перемещаем данные, но оставляем для ОС видимость того, что они лежат на диске C.
Рассмотрим алгоритм действий:
C:\Users в C:\Users_Old.D:\Users.
mklink /J C:\Users D:\Users
В результате мы получим «прозрачный» переход. Система будет обращаться к C:\Users, но фактически данные будут записываться на диск D. Это избавляет от необходимости править сотни веток в реестре для каждого терминального пользователя.
Если в процессе экспериментов вы уже столкнулись с тем, что профиль загружается как временный, выполним следующие действия для восстановления:
ProfileList) найдем две ветки с одинаковым SID, одна из которых заканчивается на .bak..bak.State — для нормальной работы он должен быть равен 0.RefCount также равен 0.Если перед вами стоит задача не просто сменить диск, а перенести профили локальных пользователей в новый домен (как упоминалось в Сообщении 4), рассмотрим специализированный инструмент User Profile Wizard (Profwiz).
Эта утилита позволяет привязать существующую папку профиля к новой доменной учетной записи. Она автоматически меняет владельца всех файлов и веток реестра HKEY_CURRENT_USER на нового доменного пользователя. Это избавляет от необходимости ручного копирования гигабайт данных из AppData и позволяет пользователю увидеть свой привычный рабочий стол сразу после первого входа в домен.
Подводя итог, можно сказать, что перенос профилей — задача ответственная. Основным залогом успеха является сохранение структуры прав NTFS. Выясним основные правила:
AppData\Local.