Как стать автором
Поиск
Написать публикацию
Обновить

Смена загрузчика Ubuntu для USB диска c GRUB на EXTLINUX, беллетризированное описание

Накрылся у меня на ноутбуке как-то жёсткий диск. А на новый денег не нашлось (ага, работы на тот момент уже не было). Зато был в наличии NAS на Embedded Linux (QNAP TS-119 Turbo), пришла идея сделать загрузку с него. Как грузить Windows Vista с NAS я не придумал, но так как у меня уже был довольно продолжительный положительный опыт общения с Ubuntu я просто отказался от Windows, а для загрузки использовал PXELINUX. Файловая система монтировалась как NFS и по гигабитной сети всё бегало (и бегает) чуть ли не быстрее, чем когда был установлен внутренний диск. В качестве приятного бонуса я получил снижение температуры ноутбука, а в качестве неприятного — оказался привязан к сетевому кабелю и NAS-у.

Иногда случаются приятные неожиданности и в рамках товарищеской помощи ко мне попал диск WD Passport взамен погибшему ноутбучному диску. У меня случился маленький Новый Год. :) После пробной установки температура процессора значительно повысилась; возможно, новый, имея почти в 3 раза больший объём по сравнению со старым диском и грелся сильнее. Пришлось подумать о другом способе подключения — как внешнего, с загрузкой по USB. Операционную систему решил поставить Karmic Koala, как раз вышла.

Запустил установку с CD-диска, ответил на немногочисленные вопросы инсталлятора и увидел, что грузиться мой диск не хочет. Загрузчик GRUB сообщал о том, что на диске он есть (писал «GRUB») и дальше дело не шло. Повторная установка, игры с разделами (primary, extended), ручная установка GRUB из консоли, и прочие собранные по интернету способы надругательств ничего кроме изменения сообщения об ошибке не давали. Я даже где-то прочитал, что якобы Karmic более не поддерживает загрузку с USB, но установка Ubuntu 8.10 тоже не загрузилась.

Кроме прочего, диск определялся в BIOS как USB-Key, а не USB-HDD, несмотря на то, что соответствующий пункт в списке был. Я решил обновить версию BIOS, тем более, что в планах нарастить оперативную память, а в этом случае обновления было не избежать, так почему бы не сейчас… Как известно, ноутбуки FJC (Fujitsu-Siemens Computers) собраны на платформе производителя Alienware, «свежую» прошивку предстояло взять у них-же, для моего Pi-1536 — это 2.07 для модели m5550. Встала без проблем и я получил при загрузке мордочку инопланетянина вместо напоминания о том, чьей марки у меня ноут. USB диск по-прежнему отказывался грузится.

В процессе экспериментов была произведена успешная установка системы на USB диск как Live-CD, есть такая опция, её предоставляет штатная утилита USB Creator. Загрузчиком при этом выступает SYSLINUX. Использовать подобную недоустановку, даже расширив образ Casper-RW до более-менее приличных размеров мне не улыбалось, но тот факт, что загрузка всё-таки возможна, обнадёживал.

С PXELINUX я уже знаком, с SYSLINUX только что познакомился; оказалось, что в семействе, приносившем мне сплошные радости, есть ещё один загрузчик — EXTLINUX, который, как понятно из его названия, умеет грузится с EXT2/3 разделов. Почему-то в различных описаниях установки, встречавшихся в инернет, фигурирует исключительно EXT2 (да понятно, почему, потому, что у разработчиков на странице про него написано), но я хочу EXT3 и буду EXT3. :)

В общем алгоритм простой: Ubuntu запускается как Live-CD (c CD/DVD), выполняется штатная установка с загрузчиком GRUB. После чего мы не перезагружаемся, а делаем следующее:

создаём папки для конфигов загрузчика так, чтобы в корне не валялись

sudo mkdir /media/WD/boot/extlinux

устанавливаем extlinux

sudo extlinux -i /media/WD/boot/extlinux

выполняем chroot с указанием в качестве корня только что установленной системы

sudo chroot /media/WD

… и удаляем из системы GRUB, иначе он будет затирать другие загрузчики при каждой загрузке

apt-get remove grub.*
apt-get remove os-prober


создаём простейший конфиг

nano /boot/extlinux/extlinux.conf

DEFAULT Ubuntu
LABEL Ubuntu
KERNEL /vmlinuz
APPEND initrd=/initrd.img root=UUID=87a66fef-a3f3-4ad3-837a-2e90a04b9dd8 rw quiet splash

LABEL Ubuntu, previous kernel
KERNEL /vmlinuz.old
APPEND initrd=/initrd.img.old root=UUID=87a66fef-a3f3-4ad3-837a-2e90a04b9dd8 rw quiet splash
PROMPT 1
TIMEOUT 100


Выходим из chroot.

Везде в интернет приводятся примеры с полным путём к ядру, но я использовал символические ссылки в корне системы, которые указывают на самый свежий образ и предыдущий и обновляются автоматически, UUID используем, чтобы не иметь проблем с именами устройств, узнать его можно можно введя команду
ls -l /dev/disk/by-uuid

Всё.

Маны я как обычно не читал, поэтому в настройке мне помогал опыт и Гугл, в частности следующие ссылки: эта и эта. А вот это я прочитал, к сожалению, когда решил головоломку и искал уже целенаправленно по решённым частям.

upd: Подключив недавно репозитории от Lucid Lynx обнаружил, что обновления ядра (свеженького, 2.6.32…) стали завершаться ошибкой. Сценарий post-installation пытался запустить update-grub, которого, понятное дело, не было, и завершался с ошибкой. Поэтому:

$ cat /usr/bin/update-grub
#/bin/sh
exit 0
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.