Копирование установки без EFI / GPT в установку EFI / GPT

grep -v '^. $' исключает строки, содержащие только один символ.

Пример:

echo "foo
> bar
> x" | grep -v '^.$'
foo
bar
2
19.06.2017, 13:59
2 ответа

Копирование должно быть относительно простым; Установки Linux (почти полностью) состоят из файлов. Самым большим (единственным?) исключением является загрузчик для BIOS; он устанавливается в основную загрузочную запись и сектора между этим и первым разделом. UEFI фактически избавляется от этого исключения; загрузчик теперь тоже просто файл.

Загрузка BIOS работает (вкратце), так что BIOS считывает первый сектор с диска (MBR) и выполняет код из этого сектора. Этот код имеет функции BIOS для чтения доступных ему секторов, а в случае grub он считывает остальную часть себя из оставшихся секторов между MBR и первым разделом. Это должно предоставить достаточно кода, чтобы позволить GRUB понять файловые системы, чтобы он мог прочитать конфигурацию и остальную часть себя из /boot. Он делает это, а затем читает оттуда ядро ​​и initramfs. Затем он запускает ядро.

Загрузка UEFI работает (вкратце), что прошивка понимает разделы (как минимум GPT, а возможно и DOS) и файловые системы (как минимум FAT). У него есть какая-то NVRAM (переменные EFI), в которой хранится команда для запуска — команда оболочки (UEFI включает оболочку). То есть путь (диск, раздел, путь в файловой системе) и аргументы. Он выполняет эту команду. В случае Linux это может быть один из:

  • загрузчика, такого как GRUB (в Debian, вероятно, в EFI/debian/grubx64.efi) или нескольких других (refind, systemd-boot, и т. д.)
  • ядро ​​Linux (поддерживается в Debian , начиная с Wheezy)
  • подписанная Microsoft прокладка для безопасной загрузки, которая затем загружает одно из вышеперечисленных.

Команда имеет полный доступ к стеку UEFI, включая чтение файлов, сеть и т. д. В случае GRUB она включает поддержку собственной файловой системы, которая используется для таких вещей, как ext4, mdraid, LVM и т. д.

В конечном счете, из вашей установки Linux это означает, что разница, которую он видит, заключается в следующем: вместо того, чтобы GRUB был установлен в нескольких специальных секторах в начале диска, это файл в /boot/efi/. Обратите внимание, что это другая сборка GRUB; в Debian это grub-efi-amd64 (или -ia32) вместо grub-pc. Вам нужно будет отключить установленный пакет grub.

Единственное, с чем я ожидаю, что вы можете столкнуться, это то, что для манипулирования переменными EFI обычно требуется, чтобы вы уже были загружены через UEFI. Так что может быть сложно заставить эту grub-install работать. Несколько обходных путей:

  1. После копирования системы и изменения пакета grub загрузитесь с загрузочного диска с поддержкой UEFI (например, установщик Stretch, работающий в режиме восстановления) и запустите grub-install или efibootmgr.

  2. Если в вашей системе есть меню выбора загрузки, она может найти установку Debian, даже если она не настроена как вариант загрузки через переменные EFI.

  3. Скопируйте grub в /boot/efi/EFI/debian/grubx64.efi в /boot/efi/EFI/BOOT/bootx64.efi — это официальный резервный путь UEFI. (по крайней мере, для 64-битных машин). Этого может быть достаточно, чтобы он появился в меню загрузки прошивки.

  4. Если ваша система позволяет это сделать, используйте оболочку UEFI для загрузки системы. Затем вы можете обновить переменные EFI с помощью grub-install или efibootmgr.

После того, как вы это сделаете, ваша скопированная/преобразованная система не должна отличаться от той, которая изначально была установлена ​​с UEFI.

3
27.01.2020, 21:55

Ответы @derobert охватывают несколько различных вариантов. В итоге я использовал что-то вроде его нет. 3, но я расскажу об этом подробнее.

В соответствии с подходом, описанным в Перемещение логического тома из одной группы томов в другую , я скопировал несколько логических томов, содержащих существующую систему Debian 9, используя BIOS, на несколько новых дисков, которые я купил. Я также сделал новую, с нуля, установку UEFI Debian 9 на эти диски.

Тогда проблема заключалась в том, как получить копию моей системы на этих дисках для загрузки. Так получилось, что я смог использовать загрузочное меню GRUB из новой/из -нуля/установки UEFI. Когда я нажал eв пункте меню GRUB для новой установки, я смог изменить имена устройств в сценарии GRUB на имена скопированных LV, используя форму (lvm/debian-root), где debian— имя устройства. группа томов, а root— имя логического тома. Таким образом, я смог загрузить копию моей существующей системы.

Тем не менее, мне все же пришлось сделать систему загрузочной. С некоторой помощью @debrobert я сделал следующее:

  1. Переключение с grub-pcнаgrub-efi
  2. Подключен существующий системный раздел EFI, принадлежащий новой установке. как /boot/efi.
  3. Ран

    grub-install --efi-directory=/boot/efi --bootloader-id=origdebian --force-extra-removable
    

    Это сделало две вещи.

    • Он установил исполняемый файл EFI grubx64.efiв каталог /boot/efi/EFI/origdebian. В новой установке уже был исполняемый файл grubx64.efiв каталоге /boot/efi/EFI/debian.

      Микропрограмма EFI смогла увидеть запись origdebianв загрузочное меню прошивки.

    • Он установил исполняемый файл EFI BOOTX64.EFIв каталог /boot/efi/EFI/BOOT. Это так называемый -«путь съемного носителя». Как описано в Debian Wiki ,

All firmware implentations have to use this path to be able to run an OS installer.

Таким образом, этот путь предназначен для использования в качестве временного запасного варианта. После того, как система загрузится, ее можно удалить.

2
27.01.2020, 21:55

Теги

Похожие вопросы