Переезд на новую машину
Переезд на новую машину
Каждый пак и раньше умел вынести свою часть. Не хватало порядка: из чего состоит переезд, куда всё складывается вместе и по чему новая машина понимает, что переезд состоялся. Этот порядок жил в голове — там переезды и теряют куски.
Полный список GUI-параметров смотри в USER_GUIDE_RU.md, блок Справочник параметров -> Ключи, шрифты и настройки Windows -> Переезд на новую машину. Там же в GUI лежат и остальные паки переезда — раздел собран из того, что не возвращается само после переустановки.
Из чего состоит
Состав лежит в config\migration_plan.yaml и правится владельцем. Каждая строка называет пак, который делает работу, папку внутри переезда и то, можно ли разворачивать её без рук.
ssh_access ключи и config текущего пользователя (.ssh целиком)
configured_access файлы, названные в конфигурации ssh и rclone
wifi профили Wi-Fi вместе с паролями
user_fonts шрифты, установленные только для этого пользователя
shell_environment настройки Windows Terminal и профиль PowerShell
certificates сертификаты с экспортируемым закрытым ключом (.pfx)
Порядок строк — рабочий, а не декоративный: ssh_access возвращает на место .ssh вместе с config, а configured_access затем переписывает пути внутри этого config под новое расположение файлов.
Пак, которого нет в белом списке программы, переезд не примет: он откажется стартовать целиком. Молча уехавший неполный переезд хуже, чем не уехавший, — пробел обнаружится на новой машине и через несколько дней.
Почему одного .ssh мало
Экспорт .ssh переносит ключи, которые лежат в .ssh. Ключ, на который конфигурация ссылается с другого диска, он не заберёт. Это не редкий случай: на этой машине из четырёх закрытых ключей, названных в ssh config и rclone.conf, в профиле лежит один.
Поэтому строка configured_access собирает по ссылке, а не по месту: она запускает ту же проверку связности, что и пак SSH, и копирует каждый файл, который назван конфигурацией, где бы он ни лежал. Рядом с закрытым ключом забирается и его .pub — конфигурация о нём не упоминает, и по ссылке он не нашёлся бы.
Исполняемые файлы из ProxyCommand (например, cloudflared.exe) в переезд не кладутся — они ставятся на новой машине. Но их пути записываются в карту и печатаются при развёртывании, чтобы про них не забыли.
Как собрать
Экспорт переезда идёт по составу, зовёт паки и складывает всё в output\migration\<машина>_<время> вместе с описью migration.json.
Выгрузка содержит закрытые ключи и пароли Wi-Fi открытым текстом. Относись к папке так же, как к экспорту PFX: переносить закрытым каналом, не оставлять на общем диске, удалять, когда переезд закончен.
Пароль PFX задаётся в форме, в разделе Дополнительно. Если он пуст, сертификаты не соберутся, остальные строки уедут, а пробел будет записан в опись и назван в журнале.
Если пак не смог отдать свою часть, переезд не останавливается: остальные строки собираются, в описи появляется collected: false с причиной, а операция завершается ошибкой со списком пробелов.
Как развернуть
Импорт переезда читает опись из input — принимается и сама папка переезда, и папка, внутри которой их несколько (тогда берётся самая свежая).
Дальше каждая строка отдаётся своему паку. Строки с пометкой manual пропускаются, но не молча: печатается причина и путь, где лежат файлы. Сейчас таких строк в составе нет.
Сертификаты возвращаются пачкой. Это возможно потому, что сборка шифрует все .pfx одним паролем из формы и записывает в certificates.json, из какого хранилища взят каждый сертификат: без этой записи развёртывание гадало бы, куда класть, а сертификат в чужом хранилище молча ничего не делает.
Развёртывание заканчивается проверкой связности. Битые пути не превращают переезд в неудачу: файлы приехали, и нужен список, а не исключение.
Чем проверяется
Проверить доступы после переезда — та же проверка, что и в паке SSH: каждый ключ, known_hosts, сертификат и путь к прокси из конфигурации ssh и rclone с пометкой [ OK ] или [MISS].
Переезд считается состоявшимся, когда доступы отвечают, а не когда файлы скопированы.
Где что лежит
config\migration_plan.yaml состав переезда
output\migration\<машина>_<время> собранный переезд
migration.json опись: машина, время, строки, пробелы
ssh_access\ configured_access\ … по папке на строку состава
input откуда читает развёртывание
output\access отдельная сборка доступов, без переезда
Шрифты: только свои
Windows держит два набора. Системный лежит в C:\Windows\Fonts и записан в HKLM — он возвращается вместе с Windows. Пользовательский лежит в профиле и записан в HKCU — он не возвращается никак.
Пак Шрифты пользователя работает только со вторым: читает и пишет HKCU, копирует в папку профиля. Системный набор он читает лишь для того, чтобы сказать, сколько там шрифтов, и никогда в него не пишет — это проверяется тестом по самим скриптам, а не обещанием в документе.
Установка идёт как «Установить для меня»: файл в профиль, имя в HKCU, а затем запущенным программам рассылается WM_FONTCHANGE — иначе шрифт появился бы только после перезахода. Прав администратора не нужно. Повторная установка того же набора ничего не делает: совпадение проверяется по содержимому файла.
Среда оболочки: по месту, а не по пути
Пак Среда оболочки берёт настройки Windows Terminal (Store, Preview и распакованная сборка — у каждой своя папка) и профили PowerShell 7 и Windows PowerShell, оба хоста.
Пути не зашиты: профиль спрашивается у самого PowerShell, папка документов — у Windows. На этой машине документы лежат в C:\Audion\Documents, а не в профиле, и пак это учитывает сам.
Каждый собранный файл получает устойчивый идентификатор, и восстановление спрашивает эту машину, где место такому файлу. Иначе профиль лёг бы по старому пути, которого здесь может не быть, — и это самый тихий из отказов: никакой ошибки, просто ничего не применилось.
Совпадающий файл не трогается, заменяемый сохраняется копией с датой.
Чего в переезде нет — и это решение, а не пробел
Решено 14 августа 2026 года, после того как каждый пункт был проверен на живой машине. Список здесь для того, чтобы к нему не возвращались как к забытому.
Задачи планировщика. Вне ветки \Microsoft\ на машине нашлось 16 задач, и ни одной пользовательской: обновлялки Brave, Google, Vivaldi, Firefox, OneDrive, плюс Lenovo, Realtek, SoftLanding и Git for Windows Updater. У половины прямо в имени зашит SID профиля — на новой машине SID другой, и такая задача там мусор. Все они и без переезда создадутся сами при установке своих программ. Переносить нечего, а лезть в чужие задачи рискованно.
Переменные окружения пользователя, включая PATH. Пути вида E:\TOOLS\... на новой машине означают другое или не означают ничего, а чинятся они за минуту руками. Автоматическая правка PATH — это тихая поломка запуска всего, что от него зависит.
Диспетчер учётных данных Windows и пароли браузеров. Зашифрованы DPAPI и привязаны к профилю; всё, что «умеет» их выгружать, расшифровывает их на живой машине. Не тот жанр.
Ключи, привязанные к TPM. Не экспортируются по устройству. Пак сертификатов честно помечает их No (TPM / non-exportable) и пропускает.
Системные шрифты. Возвращаются вместе с Windows; пак пишет только в HKCU.
Список установленных программ. Это дело Audion Get, а не этой программы. Заодно замечено 14 августа 2026 года: winget export кладёт в карту и то, что ставили не им (например, WinRAR он сопоставил сам), а из 53 записей 22 — рантаймы и зависимости, которые приезжают со своим софтом.
Отдельно от переезда
Пак Доступы из конфигурации работает и сам по себе:
Показать, что названо в конфигурации— список путей с[ OK ]/[MISS],
ничего не меняет;
Экспорт файлов доступов— конфигурации и все названные ими файлы в
output\access вместе с картой происхождения;
Импорт файлов доступов— кладёт файлы в выбранную папку, переписывает под
них ssh config и rclone.conf, ограничивает права на закрытые ключи и проверяет связность.
Заменяемые конфигурации не пропадают: рядом остаётся копия с датой в имени. Разложить один и тот же набор дважды можно — это и есть повторная попытка переезда.