Файл startup.nsh в операционной системе Astra Linux служит резервным механизмом автоматической загрузки ядра через оболочку UEFI Shell. Он исполняется до передачи управления операционной системе и необходим в тех случаях, когда стандартная запись загрузчика в NVRAM повреждена, отсутствует или была сброшена после обновления микрокода материнской платы. Скрипт позволяет системе самостоятельно найти файл grubx64.efi и запустить его без вмешательства пользователя.
Архитектура и роль скрипта
В стандартном сценарии загрузка Astra Linux происходит через меню GRUB, прописанное в EFI-разделе. Однако на серверном оборудовании или при использовании специализированных носителей порядок загрузки может нарушаться. В таких ситуациях UEFI Shell ищет файл startup.nsh в корне доступных томов (обычно FS0:) и выполняет содержащиеся в нем команды.
С точки зрения безопасности этот механизм требует контроля. Поскольку скрипт выполняется на этапе pre-OS, он потенциально уязвим для модификации. При включенном режиме Secure Boot важно убедиться, что вызываемый из startup.nsh загрузчик имеет действительную цифровую подпись, иначе система заблокирует запуск.
Структура команд
Содержимое файла представляет собой последовательность инструкций для оболочки UEFI. Ключевые особенности синтаксиса:
- Путь к файлам использует обратный слэш (
\), а не прямой, принятый в Linux. - Команды регистронезависимы, но пути к файловой системе FAT32 могут чувствительны к регистру в некоторых реализациях BIOS.
- Для переключения между дисками используются обозначения
fs0:,fs1:и так далее.
Типичный пример логики скрипта включает проверку наличия загрузчика перед попыткой его запуска:
if exist fs0:\EFI\astra\grubx64.efi then
fs0:
\EFI\astra\grubx64.efi
else
echo "Loader not found on fs0"
endif
Рекомендуется использовать команду map -r в начале скрипта для пересканирования доступных файловых систем и получения актуальных меток томов.
Создание и редактирование файла
Так как EFI-раздел часто монтируется только для чтения или недоступен в работающей системе, редактировать startup.nsh удобнее всего через LiveCD-образ Astra Linux или любой загрузочный диск с поддержкой FAT32.
Пошаговая инструкция
- Монтаж раздела: Найдите первый раздел диска, отформатированный в FAT32, и смонтируйте его в систему.
- Поиск файла: Перейдите в корневую директорию смонтированного раздела. Если файл startup.nsh отсутствует, создайте его заново.
- Редактирование: Используйте текстовый редактор (например, nano). Важно сохранить файл в кодировке ASCII или UTF-8 без BOM, чтобы UEFI Shell мог корректно интерпретировать символы.
- Проверка атрибутов: Убедитесь, что файл находится именно в корне раздела (FS0:\), так как оболочка ищет его там по умолчанию.
Если система не загружается и вы находитесь в консоли UEFI Shell, можно воспользоваться встроенным редактором. Введите команду edit fs0:\startup.nsh для быстрого исправления опечаток в путях без создания дополнительных носителей.
Диагностика типичных ошибок
Попадание в консоль UEFI Shell вместо меню GRUB сигнализирует о сбое автоматической загрузки. Ниже приведена таблица распространенных симптомов и способов их устранения.
Проведите по таблице влево, чтобы увидеть остальные столбцы
| Ошибка | Признак в консоли | Решение |
|---|---|---|
| File Not Found | Сообщение об отсутствии файла при выполнении скрипта | Проверить правильность пути к grubx64.efi и наличие самого файла в указанной директории. |
| Volume Missing | Команда fsX: не переключает том или возвращает ошибку | Выполнить map -r для обновления списка устройств. Проверить целостность EFI-раздела. |
| Access Denied | Отказ в выполнении команды | Проверить настройки Secure Boot и права доступа к файлу. |
| Invalid Signature | Ошибка подписи исполняемого файла | Убедиться, что загрузчик grubx64.efi подписан ключами, доверенными вашей системой Secure Boot. |
Для точной диагностики попробуйте запустить загрузчик вручную, введя полный путь, например: fs0:\EFI\astra\grubx64.efi. Если система загрузится, проблема кроется исключительно в синтаксисе или логике файла startup.nsh.
Оптимизация и безопасность
В защищенных контурах Astra Linux минимизация кода на этапе загрузки является обязательной. Избегайте добавления лишних комментариев или отладочных сообщений в скрипт, чтобы не раскрывать структуру системы при физическом доступе к консоли.
Для повышения скорости восстановления после сбоя питания рекомендуется убрать циклы перебора томов, если расположение загрузчика известно заранее. Прямой вызов файла экономит несколько секунд старта.
Меры предосторожности
- Используйте Secure Boot для блокировки запуска неподписанных компонентов.
- Регулярно проверяйте контрольные суммы файлов в разделе /boot/efi/.
- Отключите загрузку с внешних USB-носителей в BIOS, чтобы предотвратить подмену startup.nsh.
Часто задаваемые вопросы
Можно ли полностью удалить файл startup.nsh?
Да, удаление возможно, если запись о загрузчике корректно сохранена в NVRAM материнской платы. Файл нужен только как резервный вариант при сбоях основных настроек BIOS.
Почему система игнорирует изменения в startup.nsh?
Частые причины: неверная кодировка файла (наличие BOM), изменение регистра имени файла (должно быть строго startup.nsh) или включенный режим Fast Boot, пропускающий выполнение скриптов.
Влияет ли Secure Boot на работу скрипта?
Сам скрипт текстовый и не подписывается, но он вызывает бинарный загрузчик. Если Secure Boot активен, файл grubx64.efi должен иметь валидную цифровую подпись, иначе загрузка будет заблокирована.
Где физически находится файл startup.nsh?
Файл располагается в корневом каталоге EFI-системного раздела (ESP), который обычно смонтирован в Linux по пути /boot/efi/. Доступ к нему требует прав суперпользователя.