Установка Ubuntu на внешний носитель (флешку или жесткий диск) в режиме EFI
Опубликовано 2017.02.28
Ежегодного после Software Freedom Day проходит уже ставший традиционным Linux Install Fest, где все желающие могут получить помощь в установке дистрибутива GNU/Linux на свои ноутбуки.
Вообще говоря, процедура установки современного дистрибутива GNU/Linux вроде Ubuntu не представляет никаких сложностей, даже в том случае, если его необходимо установить рядом с Windows 8/10 в режиме UEFI и включенным Secure Boot.
Но что делать, если требуется поставить GNU/Linux в режиме UEFI на внешний жесткий диск, флешку или карту памяти?
Казалось бы, вставляешь внешний носитель, и устанавливаешь GNU/Linux стандартным образом.
Но, к сожалению, все не так просто. Если вы начнете устанавливать GNU/Linux в таком режиме, то после перезагрузки вы уже не сможете загрузиться с внутреннего жесткого диска при отключенном внешнем носителе.
Проблема заключается в том, что при вызове update-grub
обновляется содержимое
NVRAM UEFI. Туда прописывается адрес EFI файла который находится
на внешнем носителе, а информация о том, как грузиться
со встроенного жесткого диска удаляется. Более подробно о процессе загрузке
можно почитать здесь: http://www.rodsbooks.com/efi-bootloaders/installation.html
Зачем вообще ставить GNU/Linux на внешний носитель? Причины могут быть различны. Например, я столкнулся с проблемой, что на встроенном диске недостаточно места для установки двух ОС. Серьезно, в ноутбуке был установлен SSD объемом 32ГиБ, чего с трудом хватало даже для работы голой Windows 8.1.
Так же многие новички боятся ставить незнакомую ОС на свой компьютер, или не уверены, нужна ли она им вообще, а попробовать хочется. В этом случае флешка с полноценным GNU/Linux идеальный вариант. (Не просто LiveUSB, а полноценно установленная ОС, как если бы она была установлена на жесткий диск, чтобы оценить все её достоинства).
Все, что описано ниже, рассчитано на опытного пользователя GNU/Linux. Все, что вы делаете - Вы делаете на свой страх и риск. Автор не несет никакой ответственности за Ваши действия или бездействия, которые повлекли за собой порчу или полную потерю Ваших данных.
В качестве примера будем ставить на внешний диск Ubuntu 16.04.
В качестве хост-системы используется Kubuntu 16.04.
Потребуется следующий набор ПО:
Для начала скачаем образ Ubuntu 16.04:
# подготовка
mkdir -p /home/`whoami`/temp/LinuxLiveDrive/
# скачивание
axel -n 10 http://releases.ubuntu.com/16.04/ubuntu-16.04.2-desktop-amd64.iso --output=/home/`whoami`/temp/LinuxLiveDrive/ubuntu-16.04.2-desktop-amd64.iso
Затем создадим пустой файл, который будет использоваться в качестве виртуального жесткого диска. (Инсталлятор Ubuntu 16.04 требует как минимум 9ГиБ свободного места на диске, но мы возьмем чуть больше - 10ГиБ)
# создаем пустой файл
dd if=/dev/zero of=/home/`whoami`/temp/LinuxLiveDrive/LinuxLiveDrive.dd bs=1G count=10
Создадим vmdk, чтобы этот “диск” можно было подключить в VirtualBox:
VBoxManage internalcommands createrawvmdk -filename /home/`whoami`/temp/LinuxLiveDrive/LinuxLiveDrive.vmdk -rawdisk /home/`whoami`/temp/LinuxLiveDrive/LinuxLiveDrive.dd
Теперь приступим к созданию виртуальной машины со следующими характеристиками:
- тип ОС GNU/Linux
- в качестве жесткого диска указать созданный выше виртуальный диск
- включить загрузку через EFI
Теперь запускаем виртуальную машину, выбираем загрузочный диск, устанавливаем и настраиваем систему.
Из ньюансов: я рекомендую сделать разбивку жесткого диска следующим образом:
- первый раздел EFI, размер 500МиБ
- второй раздел ext4, точка монтирования ‘/’, все оставшееся место
- раздел swap создавать не нужно, т.к. во первых скорее всего на медленной флешке он будет очень сильно фризить систему, во вторых это увеличит размер установочного образа, что потребует больше времени на заливку его на целевую флешку(или жесткий диск). В конце концов, swap раздел можно создать потом, или же вообще обойтись swap файлом, чего более чем достаточно.
Почему-то после установки Ubuntu VirtualBox отказался грузить установленную систему. При повторной установке проблем не возникло. Странно. Потом нужно будет разобраться.
После установки необходимо немного порпавить конфигурационные файлы grub.
Для того, чтобы grub не трогал память NVRAM UEFI необходимо
отредактировать файл /etc/grub.d/30_uefi-firmware
следующим образом:
добавить exit 0
сразу после #!/bin/sh
:
#! /bin/sh
set -e
exit 0 # добавить эту строку
# grub-mkconfig helper script.
...
Но это еще не все, по умолчанию UEFI ищет загрузочные образы
не в том месте, куда их кладет grub, поэтому нам нужно создать
еще один скрипт /etc/grub.d/42_custom
со следующим содержанием:
#!/bin/sh
set -x
mkdir -p /boot/efi/EFI/boot/
cp /boot/efi/EFI/ubuntu/shimx64.efi /boot/efi/EFI/boot/bootx64.efi
cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/boot/grubx64.efi
cp /boot/efi/EFI/ubuntu/grub.cfg /boot/efi/EFI/boot/grub.cfg
и сделать его исполняемым
chmod +x /etc/grub.d/42_custom
Вот и все! Теперь осталось обновить загрузчик и можно приступать к копированию образа на реальный диск:
update-grub
Далее вам следует быть предельно острожным, и не перепутать буквы диска. Будьте внимательны. Так же Вам необходимо выполнять все нижеописанные команды от имени суперпользователя.
Для эксперимента возьмем внешний жесткий диск и зальем на него созданный образ:
dd if=/home/`whoami`/temp/LinuxLiveDrive/LinuxLiveDrive.dd of=/dev/sdX bs=4M
теперь запустим GParted и выставим нужный размер разделов
(При запуске GParted скорее всего ругнется, что геометрия диска
/dev/sdX
не совпадает с таблицей разделов. Смело жмем “Fix”)
Теперь можно подключать жесткий диск к ноутбуку смело загружаться в GNU/Linux!
В случае, если потребуется добавить своп, то можно воспользоваться следующим рецептом:
Создаем своп файл (от имени суперпользователя):
dd if=/dev/zero of=/swap.swp bs=1G count=16
mkswap /swap.swp
И добавляем в конец /etc/fstab
следующую строку:
/swap.swp none swap sw 0 0
На этом, пожалуй, все. Всем добра и пингвинов!