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.4. Файл настройки 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 configuration is stored in /boot/grub/grub.cfg, but this file (in Debian) is generated from others. Be careful not to modify it by hand, since such local modifications will be lost the next time update-grub is run (which may occur upon update of various packages). The most common modifications of the /boot/grub/grub.cfg file (to add command line parameters to the kernel or change the duration that the menu is displayed, for example) are made through the variables in /etc/default/grub. To add entries to the menu, you can either create a /boot/grub/custom.cfg file or modify the /etc/grub.d/40_custom file. For more complex configurations, you can modify other files in /etc/grub.d, or add to them; these scripts should return configuration snippets, possibly by making use of external programs. These scripts are the ones that will update the list of kernels to boot: 10_linux takes into consideration the installed Linux kernels; 20_linux_xen takes into account Xen virtual systems, and 30_os-prober lists other operating systems (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.5. Файл настройки 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