经常升级内核的情况下,偶尔还是会出现一些问题的。
譬如 grub2-mkconfig 的时候,/boot
是单独的分区,且忘记挂载了。
譬如 Gentoo 下 copy 新内核到 /boot
目录的时候,忘记修改配置了,且手快的删除了旧内核。
更甚者,直接忘记 copy 新内核到 /boot
下,就兴冲冲的去修改 Grub2 or Syslinux 的配置去了。- -!
等等。
此时就需要手动在 bootloader 界面去输入了
Grub2
grub> set root=hd0,0
grub> linux /boot/3.14.4-gentoo root=/dev/sda2
grub> boot
hd0,0
修改为自己的 grub2 所在分区。sda2
则为根分区所在的目录,忘记路径的时候可以按 tab
来提示。
Syslinux
syslinux 就相对简单了,直接
boot: LINUX /boot/3.14.4-gento root=/dev/sda2
当然,也要善用 tab
。
如果你连 Grub2 或 Syslinux的界面也进不去的话,那么恭喜,通过 liveusb 进去 chroot 后,重装这两者之一吧。
Goodluck
------------------------
使用 Syslinux 替换掉 Grub
自从几个月前的工作机的 Grub2 用 Syslinux 替换掉后,今天家用台式机的 Grub2 也替换成 Syslinux 了。主要是因为现在的 Syslinux 配置简单,功能强大,可以引导基于 DOS 的各种工具。
废话不多说,安装:
emerge -av syslinux
说明:
- SYSLINUX - FAT 文件系统引导
- EXTLINUX - ext2/3/4 及 btrfs等文件系统引导
- PXELINUX - Network PXE bootloader
- ISOLINUX - ISO-9660 (CDROM) bootloader
操作:
对于 /boot
独立分区的用户,需将 /boot
分区设置为 active:
fdisk /dev/sda
Command (m for help): a
Partition number (1-4): 1
Command (m for help): p
...
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 206847 102400 83 Linux
/dev/sda2 206848 122882047 61337600 7 HPFS/NTFS/exFAT
/dev/sda3 122882048 225282047 51200000 83 Linux
/dev/sda4 225282048 250066943 12392448 83 Linux
Command (m for help): w
...
写 MBR:
dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/mbr.bin of=/dev/sda
如果是 GPT,则:
dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/gptmbr.bin of=/dev/sda
接下来就是引导文件安装,由于我的 /boot 是独立分区,且是 ext2 文件系统,所以我使用的是 extlinux。
mount /boot
mkdir /boot/extlinux
extlinux --install /boot/extlinux
ln -snf . /boot/boot
需要用到的一些模块:
cp /usr/share/syslinux/{menu.c32,memdisk,libcom32.c32,libutil.c32} /boot/extlinux/
如果你有windows linux双系统,则再:
cp /usr/share/syslinux/chain.c32 /boot/extlinux/
各文件系统的配置文件:
- SYSLINUX: syslinux.cfg
- EXTLINUX: extlinux.conf
- ISOLINUX: isolinux.cfg
extlinux.conf 配置如下
touch /boot/extlinux/extlinux.conf
UI menu.c32
PROMPT 0
MENU TITLE Boot Menu
TIMEOUT 50
DEFAULT gentoo
LABEL gentoo
MENU LABEL Gentoo Linux 3.11.0
LINUX /boot/3.11.0-gentoo
APPEND root=/dev/sda3 radeon.audio=1 radeon.dpm=1
LABEL gentoo-old
MENU LABEL Gentoo Linux 3.10.10
LINUX /boot/3.10.10-gentoo
APPEND root=/dev/sda3
APPEND 指的是后面的命令接到上面 LINUX 行的后面,一般一些额外的 kernel 命令放入 APPEND 行。
如果有 windows 系统,则:
LABEL windows
MENU LABEL Windows 7 Ultimate
COM32 chain.c32
APPEND hd0 2
这里我使用的是文本启动菜单,即 UI menu.c32
,你也可以使用图形启动菜单 UI vesamenu.c32
。
具体的用法,可以参考:http://git.kernel.org/cgit/boot/syslinux/syslinux.git/tree/doc/menu.txt。
技巧:
-
无法删除 ldlinux.sys
chattr -i /boot/syslinux/ldlinux.sys; rm /boot/syslinux/ldlinux.sys
-
启动 Syslinux 出错
别急,可以按
tab
来编辑你的启动命令,按ESC
再回车来启动。 -
测试新内核
启动到 Syslinux菜单后,按
tab
,输入:boot: LINUX /boot/3.11.0-gentoo root=/dev/sda3
参考:
No comments:
Post a Comment