Ваш город: Москва Казань
+7 (495) 967-66-70
academy@academy.ru

Двойная загрузка на EeePC-1000HD на примере eeeXandros и SLED11
Электронное приложение "Open Source"

 

№ 43, 4 мая 2009г.

 

Двойная загрузка на EeePC-1000HD на примере eeeXandros и SLED11

Николай Кузнецов, инструктор Сетевой Академии ЛАНИТ

 

Предисловие

Во-первых, объясню, зачем Вам читать эту статью, если у Вас нет EeePC-1000HD. Тут объясняется некоторые принципы организации двойной, да и просто обычной загрузки системы (с использованием загрузчика GRUB) и некоторые приемы работы в Linux.

А также, объясню сначала, зачем это понадобилось. Покупая ноутбук, я был точно уверен, что снесу ту ОС, которая там стоит по умолчанию и поставлю недавно вышедший SLED11 — просто по той причине, что знаю все его плюсы и минусы, да и пользуюсь много лет SUSE-дистрибутивами.

Единственное, что хотелось бы сделать (основываясь на предыдущем опыте подобной процедуры с ноутбуком MsiWind-U90) - это оставить возможность возвращения к "заводским настройкам" на случай гарантийного ремонта или выяснения работает ли wifi-карточка или просто к ней не правильно выбран драйвер. Поэтому сначала я запустил то, что уже установлено по умолчанию - eeeXandros. И попытался выяснить, что там и, как организовано - есть ли скрытый раздел как в MsiWind или еще что-нибудь подобное.

И скажу сразу - в eeeXandros'е мне многое понравилось:

  • fastinit - обеспечивает очень быструю загрузку,
  • набор программ по умолчанию - достаточный для обычного использования: firefox, skype, офис, просмотр медиафайлов, игрушки,
  • неплохо сделано обновление системы, управление экономии энергии аккумулятора, подключение к беспроводным сетям
  • при желании и умении пользоваться debian-based дистрибутивами, можно доставить необходимые пакеты и выполнить настройку "под себя".

Но всё же мне гораздо чаще (ключевое слово этого предложения) требуется полноценный дистрибутив (в смысле с "рабочим столом GNOME\KDE и т.п.", а не с упрощенным вариантом icewm). Поэтому от идеи полного удаления eeeXandros, переключился к идеи двойной загрузки, таким образом, оставляя для себя вариант быстрого (менее минуты) запуска операционной системы с браузером и wifi, вместо нескольких минут ожиданий запуска "тяжеловеса" SLED.

Почему же всё-таки я решил ставить SLED, а не доставлять GNOME\KDE в eeeXandros — да просто по той же причине, по который большинство пользователей Linux устанавливают уже готовый (подготовленный для простой установки) дистрибутив, а не собирают его по крохам, как это было во времена появления Slackware. Слишком много действий (причем не во всех сферах разбираясь) чтобы получить то, что уже есть. Да и SUSE-дистрибутивы используются постоянно мною в работе, поэтому мне с ними проще.

Шаг 1: Осмотрелись

Как я уже писал, в первую очередь надо понять, как устроен жесткий диск ноутбука. Для этого я разгрузил eeeXandros и нашел терминал, запустив "Файловый менеджер" и нажав "Alt+T". Теперь потребуется получить права суперпользователя:

sudo bash

Посмотрев на результаты команд "mount":

rootfs on / type rootfs (rw) 
/dev/sda1 on /.ro type ext2 (ro) 
/dev/sda2 on /.rw type ext3 (rw,noatime,data=ordered) 
none on / type aufs (rw,xino=/.rw/.aufs.xino,br:/.rw=rw:/.ro=ro)

и "fdisk -l":

Disk /dev/sda: 160.0 GB, 160041885696 bytes 
255 heads, 63 sectors/track, 19457 cylinders 
Units = cylinders of 16065 * 512 = 8225280 bytes

Device BootStartEndBlocksIdSystem
/dev/sda11425341378183Linux
/dev/sda24261945515285847583Linux
/dev/sda319456194568032+cW95 FAT32 (LBA)
/dev/sda419457194578032+efEFI (FAT-12/16/32)

прихожу к выводу, что диск в 160Gb разбит на четыре раздела:

  • разделы sda3 и sda4 - служебные, в них, например, скачиваются обновления BIOS,
  • на sda1(3Gb) - установлена "чистая ОС с заводскими настройками", причем смонтирована в режиме "только для чтения" - защищаясь, таким образом, от повреждений, которые могли бы сделать не обдуманные действия пользователя
  • на sda2(150Gb) - сохраняются всё изменения в настройках, которые делает пользователь, а также его файлы (документы и т.д.),

"Склеиваются" эти два раздела(sda1 и sda2) при помощи виртуальной файловой системы aufs, позволяющей производить объединённое монтирование (каталоги, которые имеют один и тот же путь в разных разделах, будут совместно отображать свое содержимое в объединённом каталоге новой виртуальной файловой системы).

Использование aufs в данном случае достаточно удобно для производителя, да и для пользователей - в случае если что-то перестанет работать, нужно просто стереть соответствующие файлы на sda2(либо отформатировать его) - это вернет систему к "заводским настройкам", при которых всё гарантировано работало.

Резюме: 
Разделы sda1, sda3 и sda4 надо оставить без изменений, а sda2 — можно переразбить.

Шаг 2: Backup

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

Для этого подключите внешний usd-диск или, открытую на доступ по сети, папку и выполните следующие команды:

dd if=/dev/sda1 of=/путь_к_папке_куда_смонтирован_usb-диск/sda1.img 
dd if=/dev/sda3 of=/путь_к_папке_куда_смонтирован_usb-диск/sda3.img 
dd if=/dev/sda4 of=/путь_к_папке_куда_смонтирован_usb-диск/sda4.img
dd if=/dev/sda of=/путь_к_папке_куда_смонтирован_usb-диск/mbr.img bs=512 count=1

Последняя команда сохраняет MBR.

Кроме того, если у вас осталось что-нибудь полезное на разделе sda2, можно сохранить и его (либо его части).

Шаг 3: Создание установочного usb-диска

Способов установки на ноутбук без CD/DVD-привода существует несколько:

  • можно подключить внешний usb CD/DVD-привод и запустится с DVD-диска,
  • можно сделать небольшую (около 10 Mb) загрузочную флешку (образ есть на установочном диске) и устанавливается по сети,
  • можно сделать большую (около 4GB) загрузочную флешку и устанавливается прямо с неё,
  • можно вынуть жесткий диск и вставив в другую Linux-машину, аналогично варианту с большой загрузочной флешкой, организовать загрузочный раздел, с которого затем и ставится.

Я воспользовался третьим вариантом и внешним usb-винтом:

  • Создал на нем отдельный раздел размером в 5Gb
  • Скопировал на него полностью содержимое установочного диска SLED11
  • Сделал его загрузочным - скопировав необходимые файлы для загрузчика GRUB(/mnt - это папка, в которую смонтирован этот раздел):

mkdir /mnt/boot/grub 
cp /boot/grub/*stage* /mnt/boot/grub 
cp /mnt/boot/i386/loader/{linux,initrd} /mnt/boot

Здесь /mnt - каталог, к которому примонтирован раздел с копией установочного диска. Файлы linux и initrd - это ядро и " минимальная ОС ", загружаемые по умолчанию загрузчиком ISOLINUX ( его конфигурационный файл меню - /mnt/boot/i386/loader/isolinux.cfg)

Затем нужно установить GRUB: данное действие нужно делать осторожно - чтобы случайно не перезаписать загрузчик в системе, вместо загрузчика на загрузочном разделе. В моем случае создаваемый загрузочный раздел виден в Linux как устройство /dev/sdb7: команда mount показывает "/dev/sdb7 on /mnt type reiserfs (rw)". Для удобства создадим меню для GRUB следующего содержания (файл /mnt/boot/grub/menu.lst):

default 0 
timeout 80

title INSTALLATION 
root (hd0,6) 
kernel /boot/linux showopts 
initrd /boot/initrd

Здесь вместо (hd1,6) - написано (hd0,6), потому что во время загрузки этот usb-диск будет уже не вторым устройством, а первым. Теперь установим загрузчик (в моем случае на /dev/sdb7 - что соответствует (hd1,6) в наименовании GRUB):

echo "setup (hd1,6) (hd1,6)" | grub --batch

В результате должны вывестись сообщения, что все прошло успешно:

grub> setup (hd1,6) (hd1,6) 
Checking if "/boot/grub/stage1" exists... yes 
Checking if "/boot/grub/stage2" exists... yes 
Running "install /boot/grub/stage1 (hd1,6) /boot/grub/stage2 p /boot/grub/menu.lst "... succeeded 
Done.

Последний штрих: пометим раздел как загрузочный. Для этого выполняю для своего диска с загрузочным разделом команду:

fdisk / dev / sdb

Затем в fdisk я сделал следующее:

  • нажимал"А";
  • на вопрос номера раздела отвелит "7";
  • нажал "p"(просмотр таблицы разделов) - чтобы удостоверится, что напротив моего раздела (/dev/sdb7) - стоит знак "*" в колонке "Boot";
  • вышел с сохранением - нажав "w".

Всё - раздел готов.

Шаг 4: Установка SLED11

Теперь можно загрузиться в систему с подготовленного установочного usb-диска (разумеется, если вы выбрали на прошлом шаге этот вариант). Для этого при включении EeePC-1000HD нажимаем F2, чтобы попасть в настройки BIOS. Далее в пункте Hard Disk Drives раздела Boot выбираем usb-диск в качестве загрузочного устройства. Теперь выходим из настроек BIOS c сохранением.

Если всё было сделано правильно, появится меню загрузчика GRUB с одним единственным пунктом INSTALLATION. После его выбора запустится инсталлятор SLED11.

 Запуск инсталлятора SLED11

Поскольку он по умолчанию предполагает что инсталяция производится с DVD, то в появившемся псевдографическом меню надо выбрать "установку" и в качестве источника установки выбрать "с жесткого диска". Затем в списке доступных разделов - подготовленный установочный раздел (в моем случае это - /dev/sda7) и нем указываем папку «/». Теперь запустится полноценный графический инсталлятор, а дальнейшая установка мало чем отличается от обычной, кроме двух моментов: разбивка диска и настройка загрузчика.

Шаг 4а: Разбиение диска

  • Удаляем /dev/sda2
  • вместо него создаем расширенный раздел
  • а на нем три раздела (можно и больше, размеры разделов также можно выбрать свои)
    • /dev/sda5 (около 10Gb) - этот раздел будет использоваться в eeeXandros вместо старого /dev/sda2, форматирую в ext3
    • /dev/sda6 (около 10Gb) - корневой раздел для SLED11 - монтируем как "/", форматирую в ext3
    • /dev/sda7 (около 130Gb) - общий раздел для обеих операционных систем - для хранения документов, видео\музыки и т.д. - монтируем либо как "/local", либо как сделал это я - "/home".

Разумеется, каждый волен изменять эти разделы, выбирать другие файловые системы и остальные настройки в зависимости от личных предпочтений. Лично я стал создавать раздел подкачки: переводить в спящий режим и анализировать дампы памяти не планирую, а количество оперативной памяти достаточно (2Gb) для обычной работы.

Примечание: Не пугайтесь разделов /dev/sdb – это разделы с usb-диска. Их оставляем без изменений.

Шаг 4б: Настройка загрузчика

Реализуем следующую схему:

  • в MBR - установлен загрузчик от eeeXandros(его позже перенастроим, чтобы он по умолчанию не грузил eeeXandros, а передавал управление загрузчику на /dev/sda6).
  • в загрузочном секторе корневого раздела SLED11(/dev/sda6) - установим загрузчик, который будет грузить SLED (позже в него добавим возможность грузить eeeXandros).

После того, как оба загрузчика будут настроены, при включении компьютера будет выполняться загрузчик от eeeXandros, который сразу же (без отображения меню) будет загружать загрузчик от SLED, который, в свою очередь, покажет меню с выбором: "загрузить SLED" или "загрузить eeeXandros".

Соответственно сейчас мы устанавливаем "загрузчик от SLED". Для настройки GRUB надо в инсталяторе на шаге «Обзор установки» перейти в режим «Эксперта». Конфигурация:

  • Местонахождение загрузчика: выбрать только вариант "Загрузить с корневого раздела".
  • Настройки загрузчика: убрать "галки" со всех пунктов, особенно с "Записать общий загрузочный код в MBR" - чтобы не повредить загрузчик eeeXandros'а.

Настройка загрузчика

Шаг 4в: Установка

Проверьте все сделанные изменения (особенно если пропустили "Шаг 2: Backup"), прежде чем нажать кнопку "Устанавливать". После нажатия на нее инсталлятор разобьет диск (согласно указанным Вами настройкам в "Шаге 4а"), установит пакеты и загрузчик (согласно указанному в "Шаге 4б"). Затем инсталлятор перегрузит ноутбук, чтобы продолжить установку - точнее чтобы перейти к "ПостУстановочной настройке ОС". Но так как "загрузчик от eeeXandros", который будет загружаться из MBR, пока еще не настроен "запускать загрузчик от SLED", то вы увидите лишь сообщение о том, что eeeXandros не нашел раздел /dev/sda2, который мы удалили.

Шаг 4г: GRUB-перезагрузка

Вот здесь мы и воспользуемся одной из возможностей GRUB - загрузка даже тех ОС, которые не прописаны в меню - бывает полезным, например для загрузки ОС семейства Windows в случае повреждения MBR. Для этого перезагружаемся и жмем F9 - чтобы попасть в меню GRUB, а затем жмем "c" и попадаем в командную строку GRUB. В ней можно сделать не много, но достаточно чтобы загрузить огромное количество ОС: от различных дистрибутивов Linux и Unix-систем (как например: FreeBSD с её слайсами) и загрузить загрузчик Windows. Нам нужно лишь загрузить другой GRUB установленный на /dev/sda6 ("загрузчик от SLED") - это делается следующими командами:

chainloader ( hd 0,5)+1 
boot

Загрузка другого GRUB

Позже эти же строки мы внесем в меню "загрузчика eeeXandros", чтобы всё грузилось автоматически.

Шаг 4д: Завершение установки

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

Шаг 5: Последние штрихи в eeeXandros

Нам нужно добавить запись в меню загрузчика от eeeXa ndros, а также заменить в настройках все упоминания про /dev/sda2 на /dev/sda5. Для этого смонтируем корневой раздел eeeXandros:

mount / dev / sda 1 / mnt

Шаг 5а: Меняем sda 2 на sda 5 - eeeXandros

Я провел поиск по наличию слова sda2 в директориях с корневого раздела eeeXandros:

grep - rls sda 2 / mnt /{ etc , bin , sbin }

Он показал на присутствие его в двух скриптах: "/mnt/sbin/scanuser.sh" и "/mnt/sbin/formatuser.sh". Первый проверяет файловую систему на /dev/sda2, а второй - форматирует /dev/sda2.

Заменим " sda 2" на " sda 5" в обоих файлах:

sed - i "s/sda2/sda5/g" /mnt/sbin/scanuser.sh 
sed - i "s/sda2/sda5/g" /mnt/sbin/formatuser.sh

Но упоминания в этих двух скриптах маловато для того, чтобы этот раздел монтировался по умолчанию, как это показывал вывод команды mount (в "Шаге 1") - пора обратить внимание на initrd

Шаг 5 б : initrd для eeeXandros

Если посмотреть конфигурационный файл(/mnt/boot/grub/menu.lst) "загрузчика eeeXandros", увидите следующие строки:

initrd / boot / initramfs - eeepc . img

А что такое initrd? initrd - это "небольшой Linux", который выполняет различные подготовительные действия до и для запуска "большого Linux". Разберемся с устройством /boot/initramfs-eeepc.img:

mkdir /tmp/INRD; cd /tmp/INRD 
zcat /mnt/boot/initramfs-eeepc.img | cpio -i; ls -F

Увидим следующее содержимое :

bin/ dev/ etc/ init* mnt/ mnt-system/ mnt-user/ modules/ proc/ sys/

Поищем по наличию слова sda2 и снова меняем "sda2" на "sda5":

grep - rls sda 2 etc / bin / init 
sed - i " s / sda 2/ sda 5/ g " init

Кстати скрипт init (либо в некоторых дистрибутивах: linuxrc) - это тот самый скрипт, в котором и прописываются те самые подготовительные действия для запуска "большого Linux". Если посмотреть его содержимое и сопоставить настройками загрузчика в следующем шаге - видно, что при выборе пункта "Perform Disk Scan" - выполняется /sbin/scanuser.sh (т.е. проверяется файловая система), а при выборе "Restore Factory Settings"(прим.: что в переводе на русский означает - Возврат к заводским настройкам) - выполняется /sbin/formatuser.sh (т.е. форматирование раздела /dev/sda2, теперь /dev/sda5). Так как все необходимые изменения внесены, создадим новый подправленный initrd, соблюдая формат архива и степень сжатия, как и у исходного initrd:

cd /tmp/INRD 
find . -print| cpio -H newc -o |gzip -9 -c > /mnt/boot/initramfs-sda5.img

Шаг 5в: Загрузчик eeeXandros

Теперь подправим записи initrd на свои в конфигурационном файле загрузчика eeeXandros (/mnt/boot/grub/menu.lst - рекомендую сделать его копию на случай восстановления : cp /mnt/boot/grub/menu.lst /mnt/boot/grub/menu.lst-old), также добавив в него запись о загрузке " загрузчика SLED":

hiddenmenu 
default=0 
timeout=0 
fallback=2

title GRUB(SLED) 
rootnoverify (hd0,5) 
chainloader +1

title Normal Boot 
root (0x80,0) 
kernel /boot/vmlinuz-2.6.21.4-eeepc quiet rw vga=785 irqpoll root=/dev/sda1 
initrd /boot/initramfs-sda5.img

title Perform Disk Scan 
root (0x80,0) 
kernel /boot/vmlinuz-2.6.21.4-eeepc quiet rw vga=785 irqpoll root=/dev/sda1 XANDROSSCAN=y 
initrd /boot/initramfs-sda5.img

title Restore Factory Settings 
root (0x80,0) 
kernel /boot/vmlinuz-2.6.21.4-eeepc quiet rw vga=normal nosplash=y irqpoll root=/dev/sda1 XANDROSRESTORE=y 
initrd /boot/initramfs-sda5.img

Рекомендую перед внесением сделать его копию на случай восстановления (cp/mnt/boot/drub/menu.lst /mnt/boot/grub/menu.lst-old). Изменения следующие : параметр fallback, добавлен новый пункт меню "GRUB(SLED)" и замена во всех пунктах initrd на новый initrd.

Теперь подробнее по пунктам:

  • hiddenmenu - говорит о том, что меню загрузчика показываться не будет.
  • default=0 - указывает на пункт меню, который будет загружаться по умолчанию. Напомню, что в GRUB всё нумеруется с 0, и пункты меню тоже. То есть default=0 означает, что будет загружаться первый пункт меню - т.е. "GRUB(SLED)".
  • timeout=0 - указывает время через которое будет загружаться пункт по умолчанию, т.е. в нашем случае это произойдет сразу же без паузы.
  • fallback=2 - указывает на пункт меню, который будет загружаться в случае если не загружается пункт по умолчанию, я выбрал "Perform Disk Scan" - в этом случае будет проверяться файловая система на разделе eeeXandros (изначально на /dev/sda2)
  • rootnoverify (hd0,5) - указание с какого раздела грузится - (hd0,5)=/dev/sda6 - корневой раздел SLED, в загрузочном секторе которого находится его загрузчик.
  • chainloader +1 - указание на то что грузится с первого сектор

Шаг 5г: Загрузчик SLED

Оформим и меню загрузчика SLED (/boot/grub/menu.lst):

default 0 
timeout 8 
gfxmenu (hd0,5)/boot/message

title SLED 11 
root (hd0,5) 
kernel /boot/vmlinuz-2.6.27.19-5-pae root=/dev/disk/by-id/ata-ST9160310AS_5SV0NGJN-part6 resume=/dev/disk/by-id/usb-IC25N060_ATMR04-0-0:0-part2 splash=silent showopts 
initrd /boot/initrd-2.6.27.19-5-pae

title eeeXandros 
root (0x80,0) 
kernel /boot/vmlinuz-2.6.21.4-eeepc quiet rw vga=785 irqpoll root=/dev/sda1 
initrd /boot/initramfs-sda5.img

title Failsafe-SLED11 
root (hd0,5) 
kernel /boot/vmlinuz-2.6.27.19-5-pae root=/dev/disk/by-id/ata-ST9160310AS_5SV0NGJN-part6 showopts ide=nodma apm=off noresume nosmp maxcpus=0 edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 x11failsafe 
initrd /boot/initrd-2.6.27.19-5-pae

title GRUB(eeeXandros) 
rootnoverify (hd0) 
chainloader +1

Изменения следующие : добавлен пункт "eeeXandros" и "GRUB(eeeXandros)", по аналогии с настройками меню "загрузчика eeeXandros". В итоге получаем меню с четырьмя пунктами:

  • SLED 11
  • eeeXandros
  • Безопасный режим для SLED11
  • Переход обратно к загрузчику eeeXandros.

По умолчанию запускается "SLED 11" через 8 секунд ожидания.

Примечание: в полученном SLED нужно заменить источник установки с "раздел usb-диска" на, например, iso-образ, предварительно скопировав его на жесткий диск.

Общий итог

Статья демонстрирует, как можно разобраться в работе ОС и, а также, выполнить необходимые изменения в настройках Вашего нетбука с Linux.

Немного об установке SLED на eeePC-1000HD: без дополнительных действий (как MsiWind-U90) заработал wifi, видеокарта (работают compiz-эфекты), веб-камера, звук. Не разбирался в медийных клавишах (вроде требуется установка пакета под eeepc) и в работе bluetooth(за не надобностью). В общем, то что было нужно — в итоге 99% на нетбуке запущен SLED, и 1% - eeeXandros.

И напоследок - о гарантии...

Во-первых, если установить в загрузчике SLED: timeout=0 и default=1 — то есть сразу же будет запускаться eeeXandros - то внешне система никак не изменилась. С учетом опыта общения с гарантией на другой нетбук, техподдержка пока у производителей Linux-нетбуков знаниями «матчасти» не сильно блещет - им это и не сильно надо: скинули к заводским настройкам, поставили обновление(если уже известный баг) и всё; главное заменили, если есть, сломавшуюся деталь. Кстати замечу, что функцию сброса eeeXandros к заводским настройкам мы оставили - это делается при включении компьютера и нажимания клавиши F9 до того как появится менюшка загрузчика SLED. Причем сброс к заводским настройкам никаким образом не навредит установленному SLED.

Во-вторых: те кто сделали «Шаг 2: Backup» могут всё вернуть к первоначальному состоянию: переразбив заново диск (исправляя изменения «Шаг 4а»: удалив созданные разделы и вернув один большой раздел /dev/sda2) и вернуть обратно настройки загрузчика eeeXandros сделанные в «Шаг 5в». В этом случае все вернется полностью к первоначальному состоянию.