Jump to content
From ArchWiki

Ссылки по теме

- Процесс загрузки Arch
- Загрузчик

Состояние перевода: На этой странице представлен перевод статьи Syslinux. Дата последней синхронизации: 2014-10-16. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Syslinux — это набор загрузчиков, способных загружать образы с жестких дисков, компакт-дисков, а также через сеть с использованием PXE. Он поддерживает файловые системы FAT, ext2, ext3, ext4 и Btrfs.

Примечание: Syslinux не может получить доступ к файлам с разделов, которыми он не "владеет". Вы можете использовать альтернативный загрузчик, в котором нет такого ограничения, например, GRUB

## Системы с BIOS

### Обзор процесса загрузки

1. Этап 1 : Часть 1 - Загрузка MBR - При запуске BIOS загружает 440 байт загрузочного кода MBR, расположенного в начале диска (`/usr/lib/syslinux/bios/mbr.bin` или `/usr/lib/syslinux/bios/gptmbr.bin`)
2. Этап 1 : Часть 2 - Поиск активного раздела. На первом этапе загрузки MBR ищет раздел, помеченный, как активный (с установленным boot-флагом). Предположим, это раздел `/boot`
3. Этап 2 : Часть 1 - Выполнение загрузочной записи тома - Первый этап загрузочной записи MBR начинает выполнение Загрузочной Записи Тома (VBR) с раздела `/boot`. При использовании syslinux загрузочный код VBR находится в стартовом секторе `/boot/syslinux/ldlinux.sys`, который был создан командой `extlinux --install`. Обратите внимание, что `ldlinux.sys` — не то же самое, что `ldlinux.c32`
4. Этап 2 : Часть 2 - Выполнение `/boot/syslinux/ldlinux.sys` - VBR загрузит остальную часть `/boot/syslinux/ldlinux.sys`. Расположение сектора `/boot/syslinux/ldlinux.sys` не должно измениться, иначе syslinux не выполнит загрузку
   Примечание: В случае использования Btrfs указанный выше способ не сработает, поскольку файлы переместятся в результате изменения расположения сектора `ldlinux.sys`. Поэтому в BTRFS весь код `ldlinux.sys` укладывается в пространство после VBR, а не устанавливается в `/boot/syslinux/ldlinux.sys`, в отличие от тех случаев, когда используются другие файловые системы
5. Этап 3 - Загрузка `/boot/syslinux/ldlinux.c32` - `/boot/syslinux/ldlinux.sys` загрузит `/boot/syslinux/ldlinux.c32` (основной модуль), который содержит остаток основной части syslinux, не умещающейся в `ldlinux.sys` (из-за ограничений на размер файла). `ldlinux.c32` должен присутствовать в каждой установке syslinux/extlinux и соответствовать версии `ldlinux.sys`, установленной на раздел. В противном случае, syslinux не выполнит загрузку. Смотрите http://bugzilla.syslinux.org/show_bug.cgi?id=7 для получения дополнительной информации
6. Этап 4 - Поиск и загрузка файла конфигурации - После того, как Syslinux загрузится полностью, он ищет файл `/boot/syslinux/syslinux.cfg` (или `/boot/syslinux/extlinux.conf` в некоторых случаях) и загружает его, если он найден. Если нет, появится приглашение командной строки `boot:`. Этот шаг и остаток неосновной части syslinux (модули `/boot/syslinux/*.c32`, за исключением `lib*.c32` и `ldlinux.c32`) требуют наличия модулей `/boot/syslinux/lib*.c32` (библиотек) (https://wiki.syslinux.org/wiki/index.php/Common_Problems#ELF). Модули библиотек `lib*.c32` и неосновные модули `*.c32` должны соответствовать версии `ldlinux.sys`, установленной на раздел

### Установка

Установите пакет syslinux из официальных репозиториев.

Примечание:

- Начиная с версии Syslinux 4, Extlinux и Syslinux являются одним и тем же
- Пакет gptfdisk необходим для поддержки GPT с использованием автоматического скрипта
- Если ваш загрузочный раздел отформатирован в FAT, вам также потребуется пакет mtools

#### Автоматическая установка

Примечание:

- Скрипт `syslinux-install_update` является специфичным для Arch Linux, и по этой причине не предоставляется/поддерживается разработчиками Syslinux. Пожалуйста, направляйте все багрепорты, связанные с этим скриптом, в Arch Bug Tracker, а не в upstream
- Если вы обновляете Syslinux с версии 5.xx (или старше) до версии 6.xx, пожалуйста, переустановите (а не обновите) Syslinux BIOS вручную (без использования установочного скрипта) один раз, следуя указаниям из раздела #Ручная установка. Установочный скрипт не способен корректно обновить Syslinux до версии 6.xx

Скрипт `syslinux-install_update` установит Syslinux, скопирует модули `*.c32` в `/boot/syslinux`, установит boot-флаг и загрузочный код в MBR. Он может работать с дисками MBR и GPT с программным RAID:

1. Если вы используете отдельный раздел /boot, удостоверьтесь, что он примонтирован. Используйте для этого команду `lsblk`; если вы не видите точку монтирования `/boot`, примонтируйте раздел до того, как вы приступите к следующему шагу
2. Запустите `syslinux-install_update` с опциями `-i` (установить файлы), `-a` (пометить раздел, как активный, при помощи boot-флага) и `-m` (установить загрузочный код MBR):

       # syslinux-install_update -i -a -m

   Если эта команда выдает ошибку Установка Syslinux BIOS не удалась (Syslinux BIOS install failed), вероятно, проблема в том, что исполняемый файл `extlinux` не может найти раздел, содержащий `/boot`:

       # extlinux --install /boot/syslinux
        extlinux: cannot find device for path /boot/syslinux
        extlinux: cannot open device (null)

   Это может случиться, например, при обновлении с LILO, который при загрузке текущего пользовательского (custom) ядра изменил параметр ядра в командной строке с, допустим, `root=/dev/sda1` на его числовой эквивалент `root=801`, о чем свидетельствуют `/proc/cmdline` и вывод команды `mount`. Исправьте ситуацию либо используя ручную установку, как описано ниже, с указанием `--device=/dev/sda1` для `extlinux`, либо просто перезагрузившись на обычное ядро Arch Linux, поскольку оно использует initramfs, благодаря чему проблема исчезнет.
3. Создайте или отредактируйте файл `/boot/syslinux/syslinux.cfg`, следуя указаниям из раздела #Настройка.

Примечание:

- Если вы перезагрузите вашу систему сейчас, вы по-прежнему получите приглашение командной строки Syslinux. Для автоматической загрузки вашей системы или появления меню загрузки необходимо создать конфигурационный файл
- Если вы находитесь в другом корневом каталоге (например, при загрузке с установочного носителя), установите Syslinux следующей командой:

    # syslinux-install_update.sh -i -a -m -c /mnt/

#### Ручная установка

Примечание:

- Если вы не уверены в том, какой тип таблицы разделов используете (MBR или GPT), вы можете это проверить следующей командой:

    # blkid -s PTTYPE -o value /dev/sda
    gpt

- Если вы пытаетесь восстановить ранее установленную систему при помощи live CD, выполните chroot перед тем, как использовать эти команды. Если вы этого не сделаете, вы должны добавлять путь (не пути `/dev/`) до точки монтирования в каждой команде

Загрузочный раздел, на который вы планируете установить Syslinux, должен содержать файловую систему FAT, ext2, ext3, ext4 или Btrfs. Вы должны устанавливать его по пути точки монтирования, а не на устройство `/dev/sdXY`. Вы не должны устанавливать его в корневой каталог файловой системы, например, устройства `/dev/sda1`, примонтированного в `/boot`. Вы можете установить Syslinux в каталог `syslinux`:

    # mkdir /boot/syslinux
    # cp -r /usr/lib/syslinux/bios/*.c32 /boot/syslinux/                           ## скопируйте ВСЕ файлы *.c32 из /usr/lib/syslinux/bios/, А НЕ СОЗДАВАЙТЕ СИМВОЛЬНЫЕ ССЫЛКИ
    # extlinux --install /boot/syslinux

После этого установите загрузочный код Syslinux (`mbr.bin` или `gptmbr.bin`) в 440-байтную область загрузочного кода MBR (не путать с MBR как таблицей разделов msdos) диска, как описано в следующем разделе.

##### Таблица разделов MBR

Загляните в основную статью: Master Boot Record (Русский).

Теперь вам необходимо пометить ваш загрузочный раздел как активный в вашей таблице разделов. Вот несколько приложений, способных это сделать: `fdisk`, `cfdisk`, `sfdisk`, `parted/gparted` ("boot-флаг"). Должно получиться примерно следующее:

    # fdisk -l /dev/sda

    [...]
      Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048      104447       51200   83  Linux
    /dev/sda2          104448   625142447   312519000   83  Linux

Установите MBR:

    # dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sda

Альтернативная MBR, которую предоставляет Syslinux: `altmbr.bin`. Эта MBR не сканирует диск на наличие загрузочного раздела; вместо этого, последнему байту MBR присваивается значение, отображающее то, с какого раздела необходимо выполнять загрузку. Вот пример того, как `altmbr.bin` может быть скопирован:

    # printf '\x5' | cat /usr/lib/syslinux/bios/altmbr.bin - | \
    dd bs=440 count=1 iflag=fullblock conv=notrunc of=/dev/sda

В этом случае один байт со значением 5 добавляется к содержимому `altmbr.bin` и итоговые 440 байт пишутся в MBR устройства `sda`. Syslinux был установлен на первый логический раздел (`/dev/sda5`) диска.

##### Таблица разделов GUID (GPT)

Загляните в основную статью: GUID Partition Table.

Второй бит атрибутов (атрибут "legacy_boot") должен быть установлен для раздела `/boot`:.

    # sgdisk /dev/sda --attributes=1:set:2

Это переключит атрибут legacy BIOS bootable на разделе 1. Для проверки:

    # sgdisk /dev/sda --attributes=1:show

     1:2:1 (legacy BIOS bootable)

Установите MBR:

    # dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/bios/gptmbr.bin of=/dev/sda

Если это не сработает, вы также можете попробовать:

    # syslinux-install_update -i -m

## Системы с UEFI

Примечание:

- В приведенных ниже командах `$esp` — это точка монтирования ESP (Системного Раздела EFI)
- `efi64` обозначает x86_64 UEFI системы, для IA32 (32-bit) замены EFI `efi64` с `efi32` в приведенных ниже командах
- Для syslinux файлы ядра и initramfs должны быть в ESP, поскольку syslinux (на данный момент) не имеет возможности получать доступ к файлам вне раздела, которым он "владеет" (например, вне ESP в данном случае). По этой причине рекомендуется монтировать ESP в `/boot`
- Автоматический установочный скрипт `/usr/bin/syslinux-install_update` не поддерживает установку на системы с UEFI
- Синтаксис конфигурации в `syslinux.cfg` для UEFI такой же, как и для BIOS

### Недостатки UEFI Syslinux

- UEFI Syslinux `syslinux.efi` не может быть подписан `sbsign` (из sbsigntool) для UEFI Secure Boot. Багрепорт: http://bugzilla.syslinux.org/show_bug.cgi?id=8

- Использование TAB при редактировании параметров ядра в меню UEFI Syslinux ведет к "нечитаемому тексту" (строки текста накладываются друг на друга). Багрепорт: http://bugzilla.syslinux.org/show_bug.cgi?id=9

- UEFI Syslinux не поддерживает chainloading других приложений EFI, таких как `UEFI Shell` или `Windows Boot Manager`. Багрепорт: http://bugzilla.syslinux.org/show_bug.cgi?id=17

- UEFI Syslinux может не загружаться в некоторых виртуальных машинах вроде QEMU/OVMF или VirtualBox, в продуктах/версиях VMware, а также в некоторых эмуляторах окружения UEFI, таких как DUET. Участник проекта Syslinux не подтвердил наличие этой проблемы при использовании VMware Workstation 10.0.2 и Syslinux-6.02. Отчеты об ошибках: http://bugzilla.syslinux.org/show_bug.cgi?id=21 и http://bugzilla.syslinux.org/show_bug.cgi?id=23

- Memdisk недоступен для UEFI. Багрепорт: http://bugzilla.syslinux.org/show_bug.cgi?id=30

### Установка

- Установите пакеты syslinux и efibootmgr из официальных репозиториев. Затем настройте syslinux в Системном Разделе EFI (ESP), как показано ниже

- Скопируйте файлы syslinux в ESP (замените `$esp` на точку монтирования ESP, обычно это `/boot`):

    # mkdir -p $esp/EFI/syslinux
    # cp -r /usr/lib/syslinux/efi64/* $esp/EFI/syslinux

- Настройте загрузочную запись для Syslinux, используя efibootmgr:

    # efibootmgr -c -d /dev/sdX -p 1 -l /EFI/syslinux/syslinux.efi -L "Syslinux"

- Создайте или отредактируйте файл `$esp/EFI/syslinux/syslinux.cfg`, следуя указаниям из раздела #Настройка

Примечание: Файл конфигурации для UEFI — `$esp/EFI/syslinux/syslinux.cfg`, а не `/boot/syslinux/syslinux.cfg`. Файлы в каталоге `/boot/syslinux/` являются специфичными для BIOS и не имеют никакого отношения к UEFI syslinux

## Настройка

Конфигурационный файл Syslinux, `syslinux.cfg`, должен быть создан в том же каталоге, в котором установлен Syslinux. В нашем случае это `/boot/syslinux/` для систем с BIOS и `$esp/EFI/syslinux/` для систем с UEFI.

Загрузчик будет искать как `syslinux.cfg` (предпочтительно), так и `extlinux.conf`

Совет:

- Взамен `LINUX`, ключевое слово `KERNEL` также может быть использовано. `KERNEL` пытается определить тип файла, в то время как `LINUX` всегда ожидает ядро Linux
- Одна единица в параметре `TIMEOUT` читается как 0.1 секунды

### Примеры

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

#### Приглашение командной строки

Это простой конфигурационный файл, который отобразит приглашение командной строки `boot:` и выполнит автоматическую загрузку через 5 секунд. Если вы хотите, чтобы загрузка начиналась сразу же, без вывода приглашения, установите параметр `PROMPT` в значение `0`.

Конфигурация:

    /boot/syslinux/syslinux.cfg

     PROMPT 1
     TIMEOUT 50
     DEFAULT arch

     LABEL arch
             LINUX ../vmlinuz-linux
             APPEND root=/dev/sda2 rw
             INITRD ../initramfs-linux.img

     LABEL archfallback
             LINUX ../vmlinuz-linux
             APPEND root=/dev/sda2 rw
             INITRD ../initramfs-linux-fallback.img

#### Текстовое меню загрузки

Syslinux также позволяет вам использовать меню загрузки. Для этого скопируйте модуль `menu` в ваш каталог Syslinux:

    # cp /usr/lib/syslinux/bios/menu.c32 /boot/syslinux/

Конфигурация:

    /boot/syslinux/syslinux.cfg

     UI menu.c32
     PROMPT 0

     MENU TITLE Boot Menu
     TIMEOUT 50
     DEFAULT arch

     LABEL arch
             MENU LABEL Arch Linux
             LINUX ../vmlinuz-linux
             APPEND root=/dev/sda2 rw
             INITRD ../initramfs-linux.img

     LABEL archfallback
             MENU LABEL Arch Linux Fallback
             LINUX ../vmlinuz-linux
             APPEND root=/dev/sda2 rw
             INITRD ../initramfs-linux-fallback.img

Для получения дополнительных подробностей смотрите документацию по Syslinux или Syslinux wiki.

#### Графическое меню загрузки

Syslinux также позволяет вам использовать графическое меню загрузки. Для этого скопируйте COM32 модуль `vesamenu` в ваш каталог Syslinux:

    # cp /usr/lib/syslinux/bios/vesamenu.c32 /boot/syslinux/

Примечание: Если вы используете UEFI, необходимо копировать модуль из каталога `/usr/lib/syslinux/efi64/` (`efi32` для систем i686), иначе вместо меню загрузки вы увидите черный экран. Если это случилось, произведите загрузку с установочного носителя и используйте chroot, чтобы внести в систему необходимые изменения

В этой конфигурации используется такой же дизайн меню, как и на установочном образе Arch. Ее можно найти по адресу gitlab.archlinux.org. Фоновое изображение Arch Linux можно скачать там же. Скопируйте его в `/boot/syslinux/splash.png`.

Конфигурация:

    /boot/syslinux/syslinux.cfg

     UI vesamenu.c32
     DEFAULT arch
     PROMPT 0
     MENU TITLE Boot Menu
     MENU BACKGROUND splash.png
     TIMEOUT 50

     MENU WIDTH 78
     MENU MARGIN 4
     MENU ROWS 5
     MENU VSHIFT 10
     MENU TIMEOUTROW 13
     MENU TABMSGROW 11
     MENU CMDLINEROW 11
     MENU HELPMSGROW 16
     MENU HELPMSGENDROW 29

     # Смотрите https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32

     MENU COLOR border       30;44   #40ffffff #a0000000 std
     MENU COLOR title        1;36;44 #9033ccff #a0000000 std
     MENU COLOR sel          7;37;40 #e0ffffff #20ffffff all
     MENU COLOR unsel        37;44   #50ffffff #a0000000 std
     MENU COLOR help         37;40   #c0ffffff #a0000000 std
     MENU COLOR timeout_msg  37;40   #80ffffff #00000000 std
     MENU COLOR timeout      1;37;40 #c0ffffff #00000000 std
     MENU COLOR msg07        37;40   #90ffffff #a0000000 std
     MENU COLOR tabmsg       31;40   #30ffffff #00000000 std

     LABEL arch
             MENU LABEL Arch Linux
             LINUX ../vmlinuz-linux
             APPEND root=/dev/sda2 rw
             INITRD ../initramfs-linux.img

     LABEL archfallback
             MENU LABEL Arch Linux Fallback
             LINUX ../vmlinuz-linux
             APPEND root=/dev/sda2 rw
             INITRD ../initramfs-linux-fallback.img

С версии Syslinux 3.84, `vesamenu.c32` поддерживает указание необходимого разрешения через параметр `MENU RESOLUTION $WIDTH $HEIGHT`. Для этого вставьте строку `MENU RESOLUTION 1440 900` в ваш файл конфигурации (в данном примере используется разрешение 1440x900). Фоновое изображение должно иметь такое же разрешение, в противном случае Syslinux откажется загружать меню.

### Параметры ядра

Параметры ядра устанавливаются при помощи строки `APPEND` файла `syslinux.cfg`. Рекомендуется внести эти изменения, в том числе, и для режима fallback.

В самых простых случаях должно быть изменено лишь имя раздела в параметре `root`. Измените `/dev/sda2` на то, что необходимо для указания на верный корневой раздел.

    APPEND root=/dev/sda2

Если вы хотите использовать UUID для постоянного именования устройств, а не их номера, измените значение строки `APPEND`, как показано ниже, заменив `1234` на `UUID` вашего корневого раздела:

    APPEND root=UUID=1234 rw

Если вы используете шифрование LUKS, измените строку `APPEND` для использования вашего шифрованного тома:

    APPEND root=/dev/mapper/group-name cryptdevice=/dev/sda2:name rw

Если вы используете программный RAID с mdadm, измените строку `APPEND` для указания вашего RAID-массива. В приведенном ниже примере указывается три массива RAID 1, и один из них устанавливается в качестве корневого:

    APPEND root=/dev/md1 rw md=0,/dev/sda2,/dev/sdb2 md=1,/dev/sda3,/dev/sdb3 md=2,/dev/sda4,/dev/sdb4

Если загрузка с раздела raid проваливается с использованием kernel device node method, более надежным способом является использование меток разделов:

    APPEND root=МЕТКА=МЕТКА_КОРНЕВОГО_РАЗДЕЛА rw

### Автозагрузка

Если вы не хотите, чтобы выводилось меню Syslinux, используйте #Приглашение командной строки, при этом установив параметр `PROMPT` в значение `0`. Убедитесь, что в вашем `syslinux.cfg` указана опция `DEFAULT`.

### Безопасность

Syslinux имеет два уровня безопасности загрузчика: мастер-пароль для всего меню и отдельные пароли для пунктов. В файле `syslinux.cfg` используйте

    MENU MASTER PASSWD пароль

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

    MENU PASSWD пароль

внутри блока `LABEL`, чтобы установить пароль на отдельные пункты загрузки.

### Передача управления другому загрузчику (chainloading)

Примечание: Syslinux BIOS не может сам загружать файлы с других разделов, однако модуль `chain.c32` способен производить загрузку загрузочного сектора раздела (VBR)

Если вам необходимо передать управление другому загрузчику (например, для загрузки Windows), скопируйте модуль `chain.c32` в ваш каталог Syslinux (для получения подробностей прочитайте инструкции из предыдущих разделов). Затем создайте секцию в конфигурационном файле:

    /boot/syslinux/syslinux.cfg

    ...
     LABEL windows
             MENU LABEL Windows
             COM32 chain.c32
             APPEND hd0 3
    ...

`hd0 3` — это третий раздел на первом устройстве BIOS. Счет устройств ведется с нуля, а счет разделов на устройствах — с единицы.

Примечание: В этом случае будет пропущен вызов собственного менеджера загрузки Windows (`bootmgr`), который необходим для завершения установки некоторых важных обновлений (например, этого). В подобных ситуациях рекомендуется временно установить загрузочный флаг MBR на раздел с Windows (например, при помощи GParted), дать обновлениям завершить установку, после чего вернуть флаг на раздел с syslinux (например, при помощи программы для Windows DiskPart)

Если вы не уверены в том, какое устройство в BIOS считается "первым", вы можете использовать идентификатор MBR, или же, если вы используете GPT, метки файловой системы. Чтобы использовать идентификатор MBR, выполните команду

    # fdisk -l /dev/sdb

     Disk /dev/sdb: 128.0 GB, 128035676160 bytes
     255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
     Units = sectors of 1 * 512 = 512 bytes
     Sector size (logical/physical): 512 bytes / 512 bytes
     I/O size (minimum/optimal): 512 bytes / 512 bytes
     Disk identifier: 0xf00f1fd3

     Device Boot      Start         End      Blocks   Id  System
     /dev/sdb1            2048     4196351     2097152    7  HPFS/NTFS/exFAT
     /dev/sdb2         4196352   250066943   122935296    7  HPFS/NTFS/exFAT

заменив `/dev/sdb` на то устройство, которое вам необходимо. Использование шестнадцатеричного идентификатора диска (Disk identifier) `0xf00f1fd3` в этом случае в файле `syslinux.cfg` будет выглядеть так:

    /boot/syslinux/syslinux.cfg

    ...
     LABEL windows
             MENU LABEL Windows
             COM32 chain.c32
             APPEND mbr:0xf00f1fd3
    ...

Для получения дополнительных подробностей про chainloading смотрите Syslinux wiki.

Если на том же разделе у вас установлен GRUB, вы можете передать ему управление, используя:

    /boot/syslinux/syslinux.cfg

    ...
     LABEL grub2
            MENU LABEL Grub2
            COM32 chain.c32
            append file=../grub/boot.img
    ...

Это может быть необходимо для загрузки из образов ISO.

### Chainloading для других систем Linux

Передача управления другому загрузчику, такому, как в Windows, является достаточно тривиальной задачей. Но в Syslinux возможна только загрузка файлов, находящихся на том же разделе, что и конфигурационный файл. Таким образом, если у вас установлена другая система Linux на другом разделе без отдельного `/boot`, появляется необходимость в применении Extlinux. По существу, Extlinux может быть установлен в "суперблок" раздела и обозначен, как отдельный загрузчик. Extlinux является частью проекта Syslinux и включен в пакет syslinux.

Следующие инструкции подразумевают, что Syslinux у вас уже установлен. Также они подразумевают, что используется типичный путь к конфигурации Arch Linux `/boot/syslinux` и разделом для передачи управления `/` является раздел `/dev/sda3`.

Загрузитесь в имеющийся Linux (вероятно, на разделе, который указан в Syslinux для загрузки), примонтируйте другой корневой раздел в желаемую точку монтирования. В данном примере будет использоваться `/mnt`. Также, если вы используете отдельный раздел `/boot` во второй операционной системе, он также должен быть примонтирован. В приведенном примере предполагается, что это `/dev/sda2`.

    # mount /dev/sda3 /mnt
    # mount /dev/sda2 /mnt/boot (необходимо только в случае отдельного /boot)

Установите Extlinux и скопируйте необходимые файлы `*.c32`:

    # extlinux -i /mnt/boot/syslinux
    # cp /usr/lib/syslinux/bios/*.c32 /mnt/boot/syslinux

Создайте файл `/mnt/boot/syslinux/syslinux.cfg`. Вот пример файла конфигурации:

    /boot/syslinux/syslinux.cfg на /dev/sda3

    timeout 10

    ui menu.c32

    label Other Linux
        linux /boot/vmlinuz-linux
        initrd /boot/initramfs-linux.img
        append root=/dev/sda3 rw quiet

    label MAIN
        com32 chain.c32
        append hd0 0

Взято со страницы пользователя Djgera.

### Использование memtest

Установите пакет memtest86+ из официальных репозиториев.

Используйте такую секцию `LABEL` для запуска memtest:

    /boot/syslinux/syslinux.cfg

    ...
     LABEL memtest
             MENU LABEL Memtest86+
             LINUX ../memtest86+/memtest.bin
    ...

Примечание: Если вы используете pxelinux, измените имя с memtest.bin на memtest, поскольку pxelinux интерпретирует файлы с расширением .bin как загрузочные секторы и загружает только 2KB из них

### HDT

HDT (Hardware Detection Tool)[устаревшая ссылка 2023-05-06 ⓘ] отображает информацию об аппаратном обеспечении. Как и раньше, файл `.c32` должен быть скопирован из каталога `/boot/syslinux/`. Для информации PCI скопируйте файл `/usr/share/hwdata/pci.ids` в `/boot/syslinux/pci.ids` и добавьте следующее в ваш конфигурационный файл:

    /boot/syslinux/syslinux.cfg

     LABEL hdt
             MENU LABEL Hardware Info
             COM32 hdt.c32

### Перезагрузка и выключение

Используйте следующие секции для возможности перезагрузки или выключения вашей машины:

    /boot/syslinux/syslinux.cfg

     LABEL reboot
             MENU LABEL Reboot
             COM32 reboot.c32

     LABEL poweroff
             MENU LABEL Power Off
             COM32 poweroff.c32

### Очистка экрана

Для очистки экрана при выходе из меню добавьте следующую строку:

    /boot/syslinux/syslinux.cfg

     MENU CLEAR

### Раскладка клавиатуры

Если вам часто приходится редактировать параметры загрузки, вы можете захотеть изменить раскладку клавиатуры. Это позволит вам проще вводить "=", "/" и другие символы.

Сначала вы должны создать совместимую раскладку (в данном примере — немецкая):

Примечание: Необходимо обязательно создать раскладку `us.kmap`, иначе эти действия ничего не дадут

    $ cp /usr/share/kbd/keymaps/i386/qwertz/de.map.gz .
    $ cp /usr/share/kbd/keymaps/i386/qwerty/us.map.gz .
    $ gunzip de.map.gz
    $ gunzip us.map.gz
    $ mv de.map de.kmap
    $ mv us.map us.kmap
    # keytab-lilo de > de.ktl

Скопируйте файл `de.ktl` от имени суперпользователя в каталог `/boot/syslinux/` и назначьте root'a владельцем:

    # chown root:root /boot/syslinux/de.ktl

Теперь отредактируйте `syslinux.conf`, добавив:

    /boot/syslinux/syslinux.cfg

    KBDMAP de.ktl

### Скрытие меню

Используйте опцию:

    /boot/syslinux/syslinux.cfg

     MENU HIDDEN

чтобы скрыть меню и отображать только таймер. Нажмите любую клавишу в это время, и меню появится на экране.

### PXELINUX

Примечание: При наличии UEFI Syslinux использует один и тот же двоичный файл как для загрузки с диска, так и для загрузки по сети. Для загрузки файлов по TFTP или другим сетевым протоколам требуется функция загрузки по сети

PXELINUX предоставляется пакетом syslinux.

Скопируйте загрузчик `{l,}pxelinux.0` (предоставляемый пакетом syslinux) в boot-каталог клиента. При использовании версии 5.00 (и более новых) также скопируйте `ldlinux.c32` из того же пакета:

    # cp /usr/lib/syslinux/bios/pxelinux.0 "$root/boot"
    # cp /usr/lib/syslinux/bios/ldlinux.c32 "$root/boot"
    # mkdir "$root/boot/pxelinux.cfg"

Мы также создали каталог `pxelinux.cfg`, в котором PXELINUX по умолчанию ищет конфигурационные файлы. Поскольку мы не хотим иметь различий между разными MAC хоста, мы создаем конфигурацию `по умолчанию`:

    # vim "$root/boot/pxelinux.cfg/default"

    default linux

    label linux
    kernel vmlinuz-linux
    append initrd=initramfs-linux.img quiet ip=:::::eth0:dhcp nfsroot=10.0.0.1:/arch

Или, если вы используете NBD, пропишите следующую строку:

    append ro initrd=initramfs-linux.img ip=:::::eth0:dhcp nbd_host=10.0.0.1 nbd_name=arch root=/dev/nbd0

Примечание: Необходимо будет изменить параметры `nbd_host` и/или `nfsroot` таким образом, чтобы они соответствовали конфигурации вашей сети (адресу сервера NFS/NBD)

PXELINUX использует тот же синтаксис конфигурации, что и SYSLINUX; обратитесь к upstream-документации для получения дополнительной информации.

Ядро и initramfs будут переданы через TFTP, так что пути к ним должны быть прописаны относительно корня TFTP.

Для загрузки pxelinux замените `filename "/grub/i386-pc/core.0";` в `/etc/dhcpd.conf` на `filename "/pxelinux.0"`

### Загрузка файлов образа ISO9660 при помощи memdisk

Syslinux поддерживает прямую загрузку из ISO-образов при помощи модуля memdisk. Для просмотра примеров обратитесь к разделу Использование Syslinux и memdisk.

## Решение проблем

### Использование приглашения Syslinux

Вы можете ввести имя блока `LABEL` записи, которую вы хотите загрузить (из тех, что указаны в файле `syslinux.cfg`). Если вы использовали конфигурации из приведенных примеров, просто напишите:

    boot: arch

Если вы получите ошибку о том, что конфигурационный файл не может быть загружен (configuration file could not be loaded), вы можете передать необходимые параметры загрузки, например:

    boot: ../vmlinuz-linux root=/dev/sda2 rw initrd=../initramfs-linux.img

Если у вас нет доступа к `boot:` в ramfs, и, следовательно, временно не можете загрузить ядро:

  1. Создайте временный каталог, чтобы примонтировать ваш корневой раздел (если он еще не существует):

     # mkdir -p /new_root

  2. Примонтируйте `/` в `/new_root` (в случае, если `/boot/` находится на том же разделе; иначе вам придется монтировать и то, и другое):

Примечание: Busybox не может примонтировать `/boot`, если он находится на собственном разделе с ext2

     # mount /dev/sd[a-z][1-9] /new_root

  3. Используя `vim`, отредактируйте `syslinux.cfg` опять, чтобы он удовлетворял вашим потребностям, и сохраните файл
  4. Выполните перезагрузку

### Fsck не работает на корневом разделе

Если журнал корневой файловой системы поврежден, в ramfs emergency shell примонтируйте корневую файловую систему:

    # mount /dev/корневой раздел /new_root

И возьмите оттуда двоичный файл tune2fs (он не включен в состав Syslinux):

    # cp /new_root/sbin/tune2fs /sbin/

Следуйте инструкциям в fsck#ext2fs: no external journal для создания нового журнала корневого раздела.

### No Default or UI found on some computers

Некоторые производители материнских плат предоставляют меньшую совместимость загрузки с устройств USB, чем другие. В то время, как устройства USB, отформатированные в ext4, могут загружаться на более свежих компьютерах, некоторые машины могут зависнуть, если загрузочный раздел, содержащий ядро и initrd, не является разделом FAT16. Для предотвращения загрузки `ldlinux` на более старых машинах и провала чтения `syslinux.cfg`, используйте `cfdisk`, чтобы создать раздел FAT16 (<=2GB), и отформатируйте его при помощи пакета dosfstools:

    # mkfs.msdos -F 16 /dev/sda1

Затем установите и настройте Syslinux.

### Missing operating system

Если вы видите это сообщение, удостоверьтесь, что разделу, содержащему `/boot`, присвоен boot-флаг. Если флаг включен, возможно, раздел начинается с сектора 1, а не с 63 или 2048. Проверьте это с помощью `fdisk -l`. Если предположение верно, вы можете передвинуть раздел(ы) при помощи `gparted` с диска восстановления. Или же, если у вас отдельный загрузочный раздел, вы можете создать резервную копию `/boot` при помощи

    # cp -a /boot /boot.bak

а затем загрузиться с установочного образа Arch. Далее используйте `cfdisk`, чтобы удалить раздел `/boot` и создать его заново. Теперь он должен начинаться с правильного сектора, 63. Примонтируйте ваши разделы и выполните chroot. Восстановите `/boot` следующей командой:

    # cp -a /boot.bak/* /boot

Проверьте правильность файла `/etc/fstab`, выполните:

    # syslinux-install_update -iam

и перезагрузитесь.

Вы также получите это сообщение об ошибке, если пытаетесь загрузиться с массива RAID 1 и создали массив с слишком новой версией метаданных, которую Syslinux не понимает. По состоянию на август 2013 года по умолчанию mdadm создаст массив с версией 1.2 метаданных, но Syslinux не понимает версии, новее 1.0. В этом случае вам необходимо пересоздать массив RAID, используя флаг `--metadata=1.0` в mdadm.

### Windows загружается, игнорируя Syslinux

Решение: Убедитесь, что разделу, содержащему `/boot`, присвоен boot-флаг. Также убедитесь, что этот флаг не включен на разделе с Windows. Смотрите раздел установки выше.

MBR, идущий в Syslinux, ищет первый активный раздел, имеющий boot-флаг. Раздел с Windows, вероятно, был найден первым и имел этот флаг.

### После выбора пункта меню ничего не происходит

Вы выбираете пункт меню, и ничего не происходит, экран только "обновляется". Обычно это означает, что в файле `syslinux.cfg` имеется ошибка. Нажмите `Tab` для редактирования параметров загрузки. В качестве альтернативы, вы можете нажать `Esc` и прописать имя блока `LABEL` вашей загрузочной записи (например, arch). Другой причиной может быть то, что у вас не установлено ядро. Найдите способ получить доступ к вашей файловой системе (например, используя live CD), удостоверьтесь, что файл `/mount/vmlinuz-linux` существует и имеет ненулевой размер. Если это не так, переустановите ядро.

### Невозможно удалить ldlinux.sys

Файл `ldlinux.sys` имеет защитный атрибут, предотвращающий его удаление или перезапись. Это сделано потому, что расположение файла не должно меняться, иначе Syslinux должен быть переустановлен. Чтобы удалить его, выполните:

    # chattr -i /boot/syslinux/ldlinux.sys
    # rm /boot/syslinux/ldlinux.sys

### Белый блок в верхнем левом углу при использовании vesamenu

Проблема: По состоянию на linux-3.0, драйвер modesetting пытается сохранять текущее содержимое экрана после смены разрешения (по крайней мере, это происходит с моим Intel, когда Syslinux работает в текстовом режиме). Возникает ошибка с комбинированием модуля vesamenu в Syslinux (белый блок — попытка сохранить меню Syslinux, но драйвер не может "ухватить" картинку из графического режима vesa).

Если у вас прописано свое разрешение и `vesamenu` с ранним modesetting, попробуйте проделать следующее с вашим `syslinux.cfg` для удаления белого блока и продолжения вывода графического режима:

    APPEND root=/dev/sda6 rw 5 vga=current quiet splash

### Chainloading Windows не работает, когда она установлена на другом диске

Если Windows установлена не на том диске, на котором установлен Arch, и у вас возникает проблема с передачей управления другому загрузчику, попробуйте следующую конфигурацию:

    LABEL Windows
           MENU LABEL Windows
           COM32 chain.c32
           APPEND mbr:0xdfc1ba9e swap

Замените код mbr тем, что есть на диске с windows (детали выше), и добавьте `swap` в опции.

### Чтение логов загрузчика

В некоторых случаях, например, когда загрузчику не удается загрузить ядро, крайне желательно узнать дополнительную информацию о процессе загрузки. Syslinux отображает сообщения об ошибках на экране, но появляющееся меню быстро их скрывает. Чтобы избежать этого, необходимо отключить `menu UI` в `syslinux.cfg` и использовать приглашение по умолчанию — "command-line". Это означает:

- Отменить указание UI
- Отменить ONTIMEOUT
- Отменить ONERROR
- Отменить MENU CLEAR
- Использовать больший TIMEOUT
- Использовать PROMPT 1
- Использовать DEFAULT <problematic_label>

Для получения более информативных отладочных сообщений необходимо перекомпилировать пакет syslinux с дополнительными CFLAGS:

    -DDEBUG_STDIO=1 -DCORE_DEBUG=1

## Смотрите также

- Официальный сайт
- Конфигурация PXELinux[устаревшая ссылка 2020-08-06 ⓘ]
- Мультизагрузка USB с использованием Syslinux[устаревшая ссылка 2020-08-06 ⓘ]

Category:

- Boot loaders (Русский)

Hidden category:

- Pages with dead links