Как перенести временные файлы 1С на другой диск при загрузке базы в SQL, если на диске C мало места?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переходе с файлового варианта работы 1С на клиент-серверный (MS SQL Server) системные администраторы часто сталкиваются с проблемой нехватки свободного места на системном диске C. Особенно остро эта проблема проявляется в момент загрузки информационной базы из файла выгрузки .dt. Несмотря на то что сама база данных и её логи могут быть расположены на диске D, процесс загрузки всё равно «съедает» гигабайты на системном разделе. Это происходит из-за того, что сервер 1С использует временные папки профиля пользователя, под которым запущена служба (обычно это usr1cv8), для промежуточной распаковки данных.

В данной статье мы подробно разберем, как обмануть систему и перенаправить потоки временных данных на другой диск, используя механизм символьных ссылок, а также рассмотрим сопутствующие настройки SQL Server и кластера 1С, которые помогут избежать ошибок при развертывании крупных баз.

Выясняем причину: почему диск C заполняется при загрузке?

Проанализируем механику процесса. Когда вы инициируете загрузку .dt через Конфигуратор в клиент-серверном варианте, сервер 1С:Предприятия выполняет следующие действия:

  1. Принимает файл выгрузки и начинает его распаковку в свою временную директорию.
  2. Временная директория по умолчанию находится в профиле пользователя usr1cv8 (путь вида C:\Users\usr1cv8\AppData\Local\Temp).
  3. Параллельно создаются файлы кеша и реестра в папке AppData\Roaming\1C\1cv8.
  4. Данные передаются в SQL Server, который, в свою очередь, активно использует базу tempdb и файл лога транзакций (.ldf) целевой базы.

Если размер .dt составляет, например, 10 ГБ, то в процессе распаковки он может занять 30–50 ГБ на диске C еще до того, как данные попадут в SQL. Рассмотрим, как решить эту проблему поэтапно.

Решение №1: Использование символьных ссылок (mklink)

Самый эффективный способ, предложенный в обсуждении, — это использование механизма Directory Junction (соединение папок). Мы физически переместим папки на диск D, а на диске C оставим «ярлыки», которые операционная система будет считать реальными папками. Это позволит не менять глобальные переменные окружения, что иногда чревато сбоями других служб.

Разберем по шагам создание бат-файла для автоматизации этого процесса. Прежде чем выполнять скрипт, обязательно остановите службу Агент сервера 1С:Предприятия.


rem Создаем целевые директории на диске D
mkdir D:\1C_Temp\usr1cv8\AppData\Roaming\1C\1cv8
mkdir D:\1C_Temp\usr1cv8\AppData\Local\Temp

rem Удаляем старые папки на диске C (ВНИМАНИЕ: убедитесь, что в них нет важных данных)
rd /s /q "C:\Users\usr1cv8\AppData\Roaming\1C\1cv8"
rd /s /q "C:\Users\usr1cv8\AppData\Local\Temp"

rem Создаем символьные ссылки (Junction)
mklink /j "C:\Users\usr1cv8\AppData\Roaming\1C\1cv8" "D:\1C_Temp\usr1cv8\AppData\Roaming\1C\1cv8"
mklink /j "C:\Users\usr1cv8\AppData\Local\Temp" "D:\1C_Temp\usr1cv8\AppData\Local\Temp"

pause

После выполнения этих команд система будет прозрачно перенаправлять запись из C:\Users\usr1cv8\... на D:\1C_Temp\.... Рассмотрим важный нюанс: если папка Temp используется другими процессами, команда rd /s /q может выдать ошибку «Отказано в доступе». В этом случае удалите содержимое вручную после остановки всех служб 1С.

Решение №2: Перенос реестра кластера (папка srvinfo)

Помимо временных файлов пользователя, огромный объем может занимать папка srvinfo, где хранятся журналы регистрации и данные полнотекстового поиска. Проанализируем ситуацию: если вы переносите базу, журналы тоже начнут расти. По умолчанию они лежат в C:\Program Files\1cv8\srvinfo.

Чтобы перенести их правильно, выполним следующие действия:

  1. Остановим службу 1C:Enterprise 8.3 Server Agent.
  2. Откроем редактор реестра (regedit) и перейдем в ветку: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent.
  3. Найдем параметр ImagePath. В нем указана строка запуска службы.
  4. Изменим путь после ключа -d. Например, вместо "C:\Program Files\1cv8\srvinfo" пропишем "D:\1C_Data\srvinfo".
  5. Скопируем всё содержимое из старой папки в новую на диске D.
  6. Важно: Проверим права доступа. Пользователь usr1cv8 должен иметь права «Полный контроль» на новую папку D:\1C_Data\srvinfo.

Решение №3: Настройка MS SQL Server (TempDB и Логи)

Даже если мы разберемся с временными файлами 1С, загрузка может прерваться из-за SQL Server. Выясним причину: при массовой вставке данных (а загрузка .dt — это именно она) база tempdb резко увеличивается в размерах. По умолчанию она также часто находится на диске C.

Рассмотрим, как перенести tempdb на диск D с помощью SQL-запроса в SQL Server Management Studio (SSMS):


USE master;
GO
ALTER DATABASE tempdb 
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\SQL_Data\tempdb.mdf');
GO
ALTER DATABASE tempdb 
MODIFY FILE (NAME = templog, FILENAME = 'D:\SQL_Data\templog.ldf');
GO

После выполнения запроса необходимо перезапустить службу SQL Server. Старые файлы на диске C можно будет удалить вручную после успешного старта службы на новом месте.

Также проанализируем настройку Recovery Model (Модель восстановления). Перед загрузкой большого .dt крайне рекомендуется установить модель Simple для целевой базы. Это предотвратит раздувание файла лога транзакций .ldf до терабайтных размеров, так как в «простой» модели лог будет автоматически очищаться после фиксации транзакций.

Решение №4: Оптимизация прав доступа (Instant File Initialization)

Чтобы ускорить процесс расширения файлов базы данных на диске D и снизить нагрузку на дисковую подсистему, разберем настройку «Мгновенной инициализации файлов». Без неё SQL Server при каждом расширении файла забивает новое место нулями, что долго и создает лишнюю нагрузку.

Для включения выполним следующие шаги:

  1. Запустим secpol.msc (Локальная политика безопасности).
  2. Перейдем в Локальные политики -> Назначение прав пользователя.
  3. Найдем пункт Выполнение задач по обслуживанию томов (Perform volume maintenance tasks).
  4. Добавим туда учетную запись, под которой работает служба SQL Server (например, NT Service\MSSQLSERVER).
  5. Перезапустим службу SQL Server.

Заключение

Мы рассмотрели комплексный подход к проблеме дефицита места на системном диске. Использование mklink для папок профиля usr1cv8 в сочетании с переносом реестра кластера и настройкой tempdb позволяет успешно разворачивать базы любого объема, даже если на диске C осталось всего несколько гигабайт под нужды ОС. Помните, что после проведения всех манипуляций важно контролировать права доступа к новым директориям, чтобы службы 1С и SQL имели возможность беспрепятственно записывать данные.

← На главную