Syslinux (Русский)

Ссылки по теме
Процесс загрузки Arch
Загрузчик
Состояние перевода:
На этой странице представлен перевод статьи
Syslinux
. Дата последней синхронизации: 2014-10-16. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Syslinux
— это набор загрузчиков, способных загружать образы с жестких дисков, компакт-дисков, а также через сеть с использованием PXE. Он поддерживает
файловые системы
FAT
,
ext2
,
ext3
,
ext4
и
Btrfs
.
Примечание
Syslinux не может получить доступ к файлам с разделов, которыми он не "владеет". Вы можете использовать альтернативный загрузчик, в котором нет такого ограничения, например,
GRUB
Системы с BIOS
Обзор процесса загрузки
Этап 1 : Часть 1
-
Загрузка MBR
- При запуске BIOS загружает 440 байт загрузочного кода
MBR
, расположенного в начале диска (
/usr/lib/syslinux/bios/mbr.bin
или
/usr/lib/syslinux/bios/gptmbr.bin
)
Этап 1 : Часть 2
-
Поиск активного раздела
.
На первом этапе загрузки MBR
ищет раздел, помеченный, как активный (с установленным boot-флагом). Предположим, это раздел
/boot
Этап 2 : Часть 1
-
Выполнение загрузочной записи тома
-
Первый этап загрузочной записи MBR
начинает выполнение Загрузочной Записи Тома (VBR) с раздела
/boot
. При использовании syslinux загрузочный код VBR находится в стартовом секторе
/boot/syslinux/ldlinux.sys
, который был создан командой
extlinux --install
. Обратите внимание, что
ldlinux.sys
— не то же самое, что
ldlinux.c32
Этап 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
, в отличие от тех случаев, когда используются другие файловые системы
Этап 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
для получения дополнительной информации
Этап 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:
Если вы используете отдельный раздел /boot, удостоверьтесь, что он примонтирован. Используйте для этого команду
lsblk
; если вы не видите точку монтирования
/boot
, примонтируйте раздел до того, как вы приступите к следующему шагу
Запустите
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, благодаря чему проблема исчезнет.
Создайте или отредактируйте файл
/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)
отображает информацию об аппаратном обеспечении. Как и раньше, файл
.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 ⓘ]