Product SiteDocumentation Site

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

На вашей системе загрузчик скорее всего нормально настроен и полностью работоспособен, но не лишним будет знать и как настроить или установить (переустановить) загрузчик в случае, если он исчезнет из Главной Загрузочной Записи (Master Boot Record). Такое может случиться например после установки другой операционной системы, такой как Windows. Следующая информация поможет вам изменить настройку загрузчика если понадобится (или восстановить).

8.8.1. Идентификация Дисков

При настройке загрузчик должен выполнить идентификацию различных жёстких дисков и их разделов. Linux использует “блочные” специальные файлы, располагаемые для этих целей в каталоге /dev/. Начиная с версии Debian Squeeze, схема присвоения имён специальным файлам, обозначающих жёсткие диски, стала единообразной в ядре Linux, и все жесткие диски (IDE/PATA, SATA, SCSI, USB, IEEE 1394) сейчас представлены как файлы следующего вида /dev/sd*.
Каждый раздел представлен в следующем виде: "sdxX", где "x" - номер диска, а "X" - номер раздела: для примера, /dev/sda1 - это первый раздел (X=1) на первом диске (x=a), и /dev/sdb3 - это третий раздел (X=3) на следующем (втором) диске (x=b). Таким образом всегда можно определить, какой раздел какому диску соответствует.
Архитектура ПК (или “i386”, включая его младшего двоюродного брата “amd64”) уже давно подошла к ограничению своих возможностей при использовании формата таблицы разделов типа “MS-DOS”. В соответствии с этой таблицей было позволено разместить на одном жёстком диске только четыре “основных” раздела. Для обхода этого ограничения, один из них можно было создать как “расширенный” раздел, который мог содержать внутри себя дополнительные “вторичные” разделы. Они начинали нумероваться с 5-го раздела. Таким образом вторичный раздел мог быть /dev/sda5, следующий - /dev/sda6, и т.д.
Другой недостаток формата таблицы разделов типа “MS-DOS” касается ограничения на размер жёсткого диска - он не должен превышать 2 Терабайта. Это создает реальную проблему в настоящее время в связи с появлением в продаже жёстких дисков большого размера.
Новый формат таблицы разделов, называемый GPT, ослабляет вышеуказанные ограничения на количество разделов на одном диске (он позволяет создать до 128 разделов при использовании стандартных настроек) и увеличивает разрешённый максимальный размер жесткого диска (до 8 зебибайтов или 512 x 2(в 64-ой степени) байтов - по IEEE1541, а это более чем 8 биллионов терабайт). Если вы планируете создать много физических разделов на одном диске, то вначале должны убедиться, что создали таблицу разделов в GPT-формате в момент первоначальной разбивки на разделы диска (то есть это будет ваше первое действие при разделении диска на разделы - сначала создается таблица GPT, а потом разбивается на разделы). Справочно: GPT - это GUID Partition Table - все разделы диска снабжены Глобальными Уникальными Идентификаторами и каждый раздел диска имеет уникальный (даже в рамках мира) идентификатор. GPT разработан компанией Intel.
Не всегда можно быстро вспомнить, какой диск подсоединён к какому SATA контроллеру, или он находится в третьей позиции в цепочке SCSI. Особенно это касается жёстких дисков (которые включают в себя, среди прочих, большинство SATA дисков и внешние диски), подключаемых "горячим способом", поскольку присваиваемые им имена могут изменяться от одной загрузки к другой. К счастью, udev создаёт, в дополнение к /dev/sd*, ещё и символические ссылки с фиксированными именами, которые вы можете использовать если захотите идентифицировать жесткий диск в явной, недвусмысленной, манере. Эти символические ссылки располагаются в /dev/disk/by-id. На машине с двумя жесткими дисками, например, они могут быть найдены следующим образом:
mirexpress:/dev/disk/by-id# ls -l
total 0
lrwxrwxrwx 1 root root  9 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP -> ../../sda
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP-part2 -> ../../sda2
[....]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697 -> ../../sdb
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697-part2 -> ../../sdb2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP -> ../../sda
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP-part2 -> ../../sda2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697 -> ../../sdb
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697-part2 -> ../../sdb2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0 -> ../../sdc
lrwxrwxrwx 1 root root 10 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0-part2 -> ../../sdc2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 wwn-0x5000c50015c4842f -> ../../sda
lrwxrwxrwx 1 root root 10 23 jul. 08:58 wwn-0x5000c50015c4842f-part1 -> ../../sda1
[...]
mirexpress:/dev/disk/by-id# 
Обратите внимание, что некоторые диски перечислены несколько раз с разными именами (потому что они ведут себя одновременно как ATA-диски и SCSI-диски). Это не затруднит пользователю опознание жёстких дисков. Зная номер модели и серийный номер жесткого диска можно легко по ссылкам определить, каким образом ядро поименовало второстепенные специальные файлы (периферийные).
Примеры файлов конфигурации, приведённые в следующих разделах базируются на следующих исходных данных: одиночный SATA-диск, где на первом разделе установлена старая Windows а второй раздел содержит Debian GNU/Linux.

8.8.2. Настройка LILO

Старейшим загрузчиком системы является LILO (LInux LOader) — надёжный, но простой. Он записывает физический адрес рабочего ядра (его местоположение на жёстком диске) в MBR для загрузки, и это объясняет почему, каждый раз после каждого обновления LILO (или изменения его файла настройки), должна быть выполнена следующая команда lilo. За свою забывчивость можно расплатиться невозможностью загрузить систему (с того раздела, где были выполнены изменения, но не уведомили LILO об этом). Например, если старое ядро было удалено или перезаписано как новое с тем же именем (например было скомпилировано новое изменённое ядро с тем же именем), а обновление LILO не было выполнено, то при загрузке будет выдана ошибка, что LILO не может найти ядра (в том месте жёсткого диска, где она его ожидала увидеть).
Файл для настройки LILO называется /etc/lilo.conf, Ниже приведен пример простого файла для стандартной конфигурации.

Пример 8.3. Файл настройки LILO

# The disk on which LILO should be installed.
# By indicating the disk and not a partition.
# you order LILO to be installed on the MBR.
boot=/dev/sda
# the partition that contains Debian
root=/dev/sda2
# the item to be loaded by default
default=Linux

# the most recent kernel image
image=/vmlinuz
  label=Linux
  initrd=/initrd.img
  read-only

#  Old kernel (if the newly installed kernel doesn't boot)
image=/vmlinuz.old
  label=LinuxOLD
  initrd=/initrd.img.old
  read-only
  optional

# only for Linux/Windows dual boot
other=/dev/sda1
  label=Windows

8.8.3. Настройка GRUB 2

Более поздней версией загрузчика (по времени создания программы) является GRUB (GRand Unified Bootloader). Теперь нет необходимости вызывать загрузчик после каждого обновления ядра; GRUB знает - как читать файловую систему и найти (место)положение ядра на диске самому. Устанавливается программа в MBR на первом диске, для этого надо просто выполнить grub-install /dev/sda.
Файлом настройки GRUB 2 является /boot/grub/grub.cfg, но в Debian данный файл формируется на базе других. Будьте аккуратны и не изменяйте этот файл вручную, так как эти изменения будут потеряны при первом же выполнении update-grub (что может случиться в момент обновления различных пакетов на вашей системе). Общепринято вносить изменения в файл /boot/grub/grub.cfg другим путем: через редактирование переменных в файле /etc/default/grub (для примера - добавить параметр в командную строку ядра или изменить время, сколько секунд будет отображаться меню). Для добавления новой строки загрузки в меню, можно либо создать файл /boot/grub/custom.cfg, либо внести изменения в файл /etc/grub.d/50_custom. Для более сложных конфигураций, вы можете откорректировать другие файлы в каталоге /etc/grub.d, или добавить туда свои файлы. Расположенные здесь сценарии (скрипты) сформируют фрагменты конфигурации (для последующего внедрения их в глобальную настройку GRUB), которые в дальнейшем можно будет использовать с помощью внешних программ. Этими сценариями будет обновлён перечень ядер для загрузки GRUB: сценарий 10_linux - принимает во внимание все установленные ядра Linux (на используемом в настоящее время разделе жёсткого диска); 20_linux_xen - учитывает Xen виртуальные системы, и 30_os-prober просматривает ваш жёсткий диск на предмет присутствия других операционных систем (Windows, OS X, Hurd) (на других разделах этого жёсткого диска и на всех разделах других жёстких дисков, имеющихся в данный момент в системе).

8.8.4. Для компьютеров Macintosh (PowerPC): Настройка Yaboot

На старых компьютерах Macintosh, использующих процессоры PowerPC, используется загрузчик Yaboot. Они не загружаются подобно ПК, а полагаются на “загрузочный” раздел (bootstrap), с которого BIOS (или OpenFirmware) выполняет загрузку. На этот раздел программа ybin устанавливает загрузчик yaboot и размещает там его файлы настройки (и дублирует их). Если файл /etc/yaboot.conf будет изменён, то вам нужно будет только запустить эту команду снова (а благодаря дубликату, yaboot всегда знает, как найти месторасположение ядра на диске).
До выполнения команды ybin, вы должны вначале убедиться, что имеете правильно составленный файл /etc/yaboot.conf. В следующем примере приводится минимальная конфигурация данного файла.

Пример 8.4. Файл настройки Yaboot

# bootstrap partition
boot=/dev/sda2
# the disk
device=hd:
# the Linux partition
partition=3
root=/dev/sda3
# boot after 3 seconds of inactivity
# (timeout is in tenths of seconds)
timeout=30

install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot
enablecdboot

# last kernel installed
image=/vmlinux
        label=linux
        initrd=/initrd.img
        read-only

#  old kernel
image=/vmlinux.old
        label=old
        initrd=/initrd.img.old
        read-only

# only for Linux/Mac OSX dual-boot
macosx=/dev/sda5

# bsd=/dev/sdaX and macos=/dev/sdaX
# are also possible