grep -v '^. $'
исключает строки, содержащие только один символ.
Пример:
echo "foo
> bar
> x" | grep -v '^.$'
foo
bar
Копирование должно быть относительно простым; Установки Linux (почти полностью) состоят из файлов. Самым большим (единственным?) исключением является загрузчик для BIOS; он устанавливается в основную загрузочную запись и сектора между этим и первым разделом. UEFI фактически избавляется от этого исключения; загрузчик теперь тоже просто файл.
Загрузка BIOS работает (вкратце), так что BIOS считывает первый сектор с диска (MBR) и выполняет код из этого сектора. Этот код имеет функции BIOS для чтения доступных ему секторов, а в случае grub он считывает остальную часть себя из оставшихся секторов между MBR и первым разделом. Это должно предоставить достаточно кода, чтобы позволить GRUB понять файловые системы, чтобы он мог прочитать конфигурацию и остальную часть себя из /boot. Он делает это, а затем читает оттуда ядро и initramfs. Затем он запускает ядро.
Загрузка UEFI работает (вкратце), что прошивка понимает разделы (как минимум GPT, а возможно и DOS) и файловые системы (как минимум FAT). У него есть какая-то NVRAM (переменные EFI), в которой хранится команда для запуска — команда оболочки (UEFI включает оболочку). То есть путь (диск, раздел, путь в файловой системе) и аргументы. Он выполняет эту команду. В случае Linux это может быть один из:
EFI/debian/grubx64.efi
) или нескольких других (refind, systemd-boot, и т. д.) Команда имеет полный доступ к стеку UEFI, включая чтение файлов, сеть и т. д. В случае GRUB она включает поддержку собственной файловой системы, которая используется для таких вещей, как ext4, mdraid, LVM и т. д.
В конечном счете, из вашей установки Linux это означает, что разница, которую он видит, заключается в следующем: вместо того, чтобы GRUB был установлен в нескольких специальных секторах в начале диска, это файл в /boot/efi/
. Обратите внимание, что это другая сборка GRUB; в Debian это grub-efi-amd64 (или -ia32) вместо grub-pc. Вам нужно будет отключить установленный пакет grub.
Единственное, с чем я ожидаю, что вы можете столкнуться, это то, что для манипулирования переменными EFI обычно требуется, чтобы вы уже были загружены через UEFI. Так что может быть сложно заставить эту grub-install работать. Несколько обходных путей:
После копирования системы и изменения пакета grub загрузитесь с загрузочного диска с поддержкой UEFI (например, установщик Stretch, работающий в режиме восстановления) и запустите grub-install или efibootmgr.
Если в вашей системе есть меню выбора загрузки, она может найти установку Debian, даже если она не настроена как вариант загрузки через переменные EFI.
Скопируйте grub в /boot/efi/EFI/debian/grubx64.efi
в /boot/efi/EFI/BOOT/bootx64.efi
— это официальный резервный путь UEFI. (по крайней мере, для 64-битных машин). Этого может быть достаточно, чтобы он появился в меню загрузки прошивки.
Если ваша система позволяет это сделать, используйте оболочку UEFI для загрузки системы. Затем вы можете обновить переменные EFI с помощью grub-install или efibootmgr.
После того, как вы это сделаете, ваша скопированная/преобразованная система не должна отличаться от той, которая изначально была установлена с UEFI.
Ответы @derobert охватывают несколько различных вариантов. В итоге я использовал что-то вроде его нет. 3, но я расскажу об этом подробнее.
В соответствии с подходом, описанным в Перемещение логического тома из одной группы томов в другую , я скопировал несколько логических томов, содержащих существующую систему Debian 9, используя BIOS, на несколько новых дисков, которые я купил. Я также сделал новую, с нуля, установку UEFI Debian 9 на эти диски.
Тогда проблема заключалась в том, как получить копию моей системы на этих дисках для загрузки. Так получилось, что я смог использовать загрузочное меню GRUB из новой/из -нуля/установки UEFI. Когда я нажал e
в пункте меню GRUB для новой установки, я смог изменить имена устройств в сценарии GRUB на имена скопированных LV, используя форму (lvm/debian-root)
, где debian
— имя устройства. группа томов, а root
— имя логического тома. Таким образом, я смог загрузить копию моей существующей системы.
Тем не менее, мне все же пришлось сделать систему загрузочной. С некоторой помощью @debrobert я сделал следующее:
grub-pc
наgrub-efi
/boot/efi
. Ран
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.
Таким образом, этот путь предназначен для использования в качестве временного запасного варианта. После того, как система загрузится, ее можно удалить.