Чиним GRUB без флешки

в 5:15, , рубрики: dhcp, grub, linux, pxe, tftp

Кажется, у каждого есть старенький ноутбук, который давно служит лишь для просмотра фильмов. У меня такой тоже есть — подключён по HDMI к телевизору и почти забыт. Однажды ради эксперимента я установил на него Linux, а через пару месяцев, когда понадобилось место, решил просто удалить линуксовый раздел. Затем я перезагрузил ноутбук и винда, конечно же, не загрузилась. После установки линукса, загрузчик GRUB переписал MBR, и теперь система не знала, откуда грузиться.

Что делать? Казалось бы, всё просто: берём флешку, загружаемся с Live CD, восстанавливаем MBR. Но флешки у меня не было. Можно было бы флешку одолжить, но хотелось решить проблему здесь и сейчас. Размышляя об этом, я залез в биос и обнаружил, что ноутбук поддерживает загрузку по сети через PXE…

Дилемма

Так как у меня на диске 2 операционных системы, я могу выбрать один из 2 вариантов:

  • Загрузить установку Windows и настроить MBR через diskpart

  • Установить линукс через PXE с новым GRUB

Первый вариант показался мне муторным и неочевидным, а вот поставить пару сервисов на линукс — наоборот. Поэтому я выбрал второй вариант и образ Ubuntu server netboot, который весит всего 64 МБ. У меня на основном ноутбуке стоит минт в дуалбуте, так что я все настраивал на нем.

Установка PXE

Загрузка по сети работает через PXE. Установка состоит глобально из 3 шагов:

  1. Настройка интерфейса

  2. Настройка tftp и DHCP-серверов

  3. Загрузка по сети

Настройка интерфейса

Для загрузки через PXE нам нужно, чтобы компьютеры были в одной сети. Выяснять, какие сетевые карты поддерживают загрузку по WiFi я не стал, поэтому просто соединил компьютеры кабелем и создал новый интерфейс.

На Linux Mint 21 настройка сети должна выполняться через Network manager. Выведем список всех интерфейсов:

nmcli device status
У меня Ethernet интерфейс называется enp0s31f6

У меня Ethernet интерфейс называется enp0s31f6

Интерфейсу надо назначить IP-адрес. Я использовал подсеть 10.0.0.0. Подставьте в команду ниже свой IP-адрес и название интерфейса. Она создаст соединение:

sudo nmcli connection add type ethernet ifname enp0s31f6 con-name NewInterface ipv4.addresses 10.0.0.1/24 ipv4.dns «8.8.8.8» ipv4.method manual connection.autoconnect yes

Интерфейс создан и готов к работе, его состояние можно проверить командами ip a или nmcli device status.

Настройка tftp и DHCP серверов

Далее установим tftp сервер, чтобы он отдавал установочные файлы по сети:

sudo apt install tftpd-hpa apache2 syslinux isc-dhcp-server -y

Добавим в конфиг tftp папку с установочными файлами:

sudo sed -i 's|TFTP_DIRECTORY=.*|TFTP_DIRECTORY=»/opt/tftp»|' /etc/default/tftpd-hpa

Создадим папку и распакуем файлы системы в папку tftp:

sudo mkdir /opt/tftp
sudo cp /usr/lib/syslinux/modules/bios/* /opt/tftp/
wget http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/netboot/netboot.tar.gz 
sudo tar -xzvf netboot.tar.gz -C /opt/tftp/

А затем настроим собственно установку образа Ubuntu по сети в конфиге PXE. Для этого откроем конфиг файл PXE

sudo nano /opt/tftp/pxelinux.cfg/default

и приведем его к такому виду:

DEFAULT ubuntu
LABEL ubuntu
MENU LABEL ^Install Ubuntu Server 18
KERNEL ubuntu-installer/amd64/linux
APPEND vga=788 initrd=ubuntu-installer/amd64/initrd.gz

Перезапустим службу tftp для применения изменений.

sudo systemctl restart tftpd-hpa

Наш tftp сервер готов к работе.

Настройка DHCP

Теперь настроим DHCP сервер. Для этого отредактируем настройки сервера.

sudo nano /etc/dhcp/dhcpd.conf

Укажем в файле IP-адреса вашей подсети. Мой конфиг для подсети 10.0.0.0:

subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.2 10.0.0.100;
option broadcast-address 10.0.0.255;
option routers 10.0.0.1;
next-server 10.0.0.1;
filename «pxelinux.0»;}

Сохраним изменения и перезапустим службу. По умолчанию служба не выводит результата запуска поэтому я добавил в команду запрос статуса.

sudo systemctl restart isc-dhcp-server; sudo systemctl status isc-dhcp-server --no-pager
DHCP сервер запущен

DHCP сервер запущен

Если служба запустилась, значит сервер поднялся и работает.

На этом настройка серверов завершена. Осталось загрузиться по сети и установить систему.

Установка системы

Включаем компьютер и выбираем сеть первой в порядке загрузки. Компьютер получает IP-адрес и начинается установка системы.

Чиним GRUB без флешки - 3

Нажимаем далее до момента выделения места. Здесь выбираем Manual. Будьте внимательны, неверный выбор может стереть весь диск.

Чиним GRUB без флешки - 4

Сейчас винда занимает диск целиком. Поэтому нам необходимо этот диск сжать, а потом установить Ubuntu на освободившееся место.

Я выделил 8 гб, но вероятно хватит и меньшего количества

Я выделил 8 гб, но вероятно хватит и меньшего количества

Открываем диск #1 и выбираем resize. Указываем новый размер вместе со словом GB и нажимаем Continue. Затем выбираем свободное место как установочный диск:

Указываем новый размер диска

Указываем новый размер диска

Ну вот и все. Просто прокликиваем установку до конца, т.к. никакие дополнительные пакеты нам не нужны. Установщик перепишет GRUB и система снова будет загружаться.

Заключение

Все закончилось благополучно и ноутбук снова работает. Настройку PXE и остальных серверов сразу захотелось автоматизировать.. я захотел сделать плейбук для Ansible, но отказался от этой затеи, потому что узнал о существовании Fog project. Fog project — опенсорсная система, упрощающая установку по сети. Я её не пробовал, но выглядит несложно, а все нужные серверы идут в комплекте.

Автор: Avonae

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js