Syslinux是一个优秀的系统启动加载器,可引导自硬盘、光盘和通过PXE的网络启动。支持fat, ext2, ext3, ext4 and btrfs文件系统.
电脑启动时,会先加载MBR (/usr/lib/syslinux/mbr.bin
),然后MBR查找那些活动的分区(标注了可启动的),找到这个分区后,卷启动记录程序(VBR=volume boot record)将被执行。如果是ext2/3/4和fat 12/16/32,ldlinux.sys
开始的扇区是被写死进卷启动记录程序里的,卷启动记录程序将执行(ldlinux.sys
)。当然,如果ldlinux.sys
的位置发生改变,syslinux将无法加载。如果是btrfs,因为文件不断移动导致ldlinux.sys
扇区的位置不断变化,而让上面方法失效。从而使得整个syslinux需要被存储在文件系统之外。程序将被存储在卷启动记录程序之后。
当syslinux完全加载完毕,它将自动寻找一个配置文件,名字叫 extlinux.conf
或者syslinux.cfg
.找到之后,将加载整个配置文件,否则,将给出提示。
syslinux-install_update脚本将自动安装Syslinux, 复制COM32模块到/boot/syslinux
, 设置启动标识,安装到MBR.可自动根据softraid处理MBR和 GPT磁盘。
下面是过程: 1. 安装Syslinux
pacman -S syslinux
2. 确认/boot
是否已经加载
3. 运行脚本syslinux-install_update
,参数使用 -i (安装) -a (设可启动标识) -m (安装到mbr)
/usr/sbin/syslinux-install_update -i -a -m
4. 修改配置文件 /boot/syslinux/syslinux.cfg
Make sure you have the syslinux package installed. Then install Syslinux onto your boot partition, which must contain a fat, ext2, ext3, ext4, or btrfs file system.
# mkdir /boot/syslinux # extlinux --install /boot/syslinux #run on a mounted directory (not /dev/sdXY) /boot/syslinux/ is device /dev/sda1
需要标识启动分区为激活状态.可用这些工具实现:fdisk, cfdisk, sfdisk, (g)parted.最后结果看起来是这样:
# 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
安装到主启动卷区:
# dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/mbr.bin of=/dev/sda
Main article GUID_Partition_Table
Bit 2 of the attributes for the /boot
partition need to be set.
# sgdisk /dev/sda --attributes=1:set:2
This would toggle the attribute legacy BIOS bootable on partition 1
Verify:
# sgdisk /dev/sda --attributes=1:show 1:2:1 (legacy BIOS bootable)
安装主启动卷区:
# dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/gptmbr.bin of=/dev/sda
如果此时重启,会有提示,以确认是自动启动还是给出一个启动菜单,此时需要创建一个配置文件。
syslinux的配置文件 syslinux.cfg
必须和syslinux放在同一个目录下,在我们的例子中,是 '/boot/syslinux/'
启动器将自动寻找这两个配置文件:syslinux.cfg
(优先) 或者 extlinux.conf
补充:
这是一个非常简单的配置,有启动提示,并且在5秒后自动启动第一个系统。
配置文件:
PROMPT 1 TIMEOUT 50 DEFAULT arch LABEL arch LINUX ../vmlinuz-linux APPEND root=/dev/sda2 ro INITRD ../initramfs-linux.img LABEL archfallback LINUX ../vmlinuz-linux APPEND root=/dev/sda2 ro INITRD ../initramfs-linux-fallback.img
若不想看到提示,设置PROMPT(显示时间)为0.
把模块menu COM32复制到syslinux目录中,即可使用文本菜单:
# cp /usr/lib/syslinux/menu.c32 /boot/syslinux/
若没有给/boot单独分区,且和/usr同一分区,那么,也可以仅使用一个软链接:
# ln -s /usr/lib/syslinux/menu.c32 /boot/syslinux/
配置:
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 ro INITRD ../initramfs-linux.img LABEL archfallback MENU LABEL Arch Linux Fallback LINUX /vmlinuz-linux APPEND root=/dev/sda2 ro INITRD /initramfs-linux-fallback.img
更多信息可见: http://git.kernel.org/?p=boot/syslinux/syslinux.git;a=blob;f=doc/menu.txt.
把vesamenu COM32移入到syslinux目录中,可使用图形启动界面:
# cp /usr/lib/syslinux/vesamenu.c32 /boot/syslinux/
若没有给/boot单独分区,且和/usr同一分区,那么,也可以仅使用一个软链接: :
# ln -s /usr/lib/syslinux/vesamenu.c32 /boot/syslinux/
This config uses the same menu design as the Arch Install CD: syslinux.cfg
The background file can be found here: splash.png
Config:
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 # Refer to http://syslinux.zytor.com/wiki/index.php/Doc/menu 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 ro INITRD ../initramfs-linux.img LABEL archfallback MENU LABEL Arch Linux Fallback LINUX ../vmlinuz-linux APPEND root=/dev/sda2 ro INITRD ../initramfs-linux-fallback.img
Since Syslinux 3.84 vesamenu.c32 supports the "MENU RESOLUTION $WIDTH $HEIGHT" directive.To use it, insert "MENU RESOLUTION 1440 900" into your config for a 1440x900 resolution.The background picture has to have exactly the right resolution however as syslinux will otherwise refuse to load the menu.
If you want to chainload other operating systems (such as Windows) or boot loaders, copy (or symlink) the chain.c32 module to the syslinux folder (for details, see the instructions in the previous section). Then, create a section in the configuration file:
LABEL windows MENU LABEL Windows COM32 chain.c32 APPEND hd0 3
hd0 3 is the third partition on the first BIOS drive - drives are counted from zero, but partitions are counted from one. For more details about chainloading, see [1].
If you have grub2 installed in your boot partition, you can chainload it by using:
LABEL grub2 MENU LABEL Grub2 COM32 chain.c32 append file=../grub/boot.img
This maybe required for booting from iso images.
使用下面的 LABEL章节部分,可加载(需要安装软件包:memtest86+,否则不起作用):
LABEL memtest MENU LABEL Memtest86+ LINUX ../memtest86+/memtest.bin
HDT (Hardware Detection Tool) displays hardware information. Like before, the .c32 file has to be copied or symlinked from /boot/syslinux/.For pci info either copy or symlink /usr/share/hwdata/pci.ids
to /boot/syslinux/pci.ids
LABEL hdt MENU LABEL Hardware Info COM32 hdt.c32
Use the following sections to reboot or power off your machine.
LABEL reboot MENU LABEL Reboot COM32 reboot.c32 LABEL poweroff MENU LABEL Power Off COMBOOT poweroff.com
You can type in the LABEL name of the entry that you want to boot (as per your syslinux.cfg). If you used the example configs just type
boot: arch
If you get an error that the config file could not be loaded you can pass your needed boot parameters, e.g.:
boot: ../vmlinuz-linux root=/dev/sda2 ro initrd=../initramfs-linux.img
If you don't have access to 'boot:' in ramfs, and therefore temporarily unable to boot kernel again
1) create temp directory, in order to mount your root partition (if it doesn't exist already)
mkdir -p /new_root
2) mount / under /new_root (in case /boot/ is on same partition, otherwise you'll need to mount them both)
mount /dev/sd[a-z][1-9] /new_root
3) use 'vi' and edit syslinux.cfg again to suit your needs and save file;
4) reboot
Certain motherboard manufacturers have less compatibility for booting from USB devices than others. While an ext4 formatted usb drive may boot on a more recent computer, some computers may hang if the boot partition containing the kernel and initrd are not on a fat16 partition. to prevent an older machine from loading ldlinux and failing to read syslinux.cfg, use cfdisk to create a fat-16 partition (<=2GB) and format with
# pacman -S dosfstools # mkfs.msdos -F 16 /dev/sda1
then install and configure syslinux.
If you get this message, check if the partition that contains /boot
has the boot flag enabled. If the flag is enabled, then perhaps this partition starts at sector 1 rather than sector 63 or 2048. Check this with fdisk -l. If it starts at sector 1, you can move the partition(s) with gparted from a rescue disk. Or, if you have a separate boot partition, you can back up /boot with
cp -a /boot /boot.bak
and then boot up with the arch install disk. Next, use cfdisk to delete the /boot partition, and recreate it. This time it should begin at the proper sector, 63. Now mount your partitions and chroot into your mounted system, as described in the beginners guide. Restore /boot with the command
cp -a /boot.bak/* /boot
Check if /etc/fstab is correct. Then run
/usr/sbin/syslinux-install_update -iam
and reboot.
Solution: Make sure the partition that contains /boot has the boot flag enabled. Also, make sure the boot flag is not enabled on the windows partition. See the installation section above.
The MBR that comes with syslinux looks for the first active partition that has the boot flag set. The windows partition was likely found first and had the boot flag set. If you wanted you could use the MBR that windows or msdos fdisk provides.
You select a menu entry and it does nothing. It "refreshes" the menu
This usually means that you have an error in your configuration. Hit TAB
to edit your boot parameters. Alternatively, press ESC
and type in the LABEL of your boot entry (Example: arch)
ldlinux.sys has the immutable attribute set which prevents the file from being deleted or overwritten. This is because the sector location of the file must not change or else syslinux has to be reinstalled.To remove:
chattr -i /boot/syslinux/ldlinux.sys rm /boot/syslinux/ldlinux.sys