系统启动与引导修复
一、系统运行级别
1、linux系统共有七个运行级别
- linux中可以使用runlevel来查看运行级别
[root@centos ~]# runlevel
N 3
上一个运行级别 当前运行级别
- 手动更改运行级别
[root@centos ~]# init 5
[root@centos ~]# runlevel
3 5
2、系统默认运行级别
系统默认运行级别,依赖于 /etc/inittab 文件
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
# 系统会先调用 /etc/init/rcS.conf
# Individual runlevels are started by /etc/init/rc.conf
# 再调用 /etc/init/rc.conf ,在不同的运行级别启动不同的服务
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
# 通过这个配置文件判断 Ctrl+Alt+Delete 热启动键是否可用
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
# 判断系统可以启动的本地终端数量,及终端的基本设置(如颜色)
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
# 这就是系统的默认运行级别,也就是系统开机后直接进入哪个运行级别,注意这里的默认运行级别只能写 3 或 5,其他的级别要不就是关机重启,要不就是保留或单用户, 都不能作为系统默认运行级别的。
3、 /etc/rc.d/rc.local
- 这个配置文件会在用户登陆之前读取,这个文件中写入什么命令,在每次系统启动时都会执行一次。也就是说,我如果有任何需要在系统启动就运行的工作,只需要写入/etc/rc.d/rc.local 这个配置文件即可。
[root@centos ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Dec 2 23:15 /etc/rc.local -> rc.d/rc.local #该文件是 rc.d/rc.local 的软连接
#我们可以在文件中写下如下命令:
/etc/rc.d/init.d/httpd start # 如果写入 RPM 包安装的 apache 的启动命令, apache 服务就会开机时自动启动了。
二、启动引导程序
早期的 Lilo 引导程序已经不是很常见了,grub 相比来讲有很多优势。如下:
- 支持更多的文件系统
- grub 的主程序可以直接在文件系统中查找内核文件;
- 在系统启动时,可以利用 grub 的交互界面编辑和修改启动选项
- 可以动态的修改 grub 的配置文件,这样在修改配置文件之后不需要重新安装 grub,而只需要重新启动就可以生效了
1 /boot/grub 目录
grub 的作用有以下几个:
- 第一是加载操作系统的内核;
- 第二是拥有一个可以让用户选择的菜单, 来选择到底启动哪个系统
- 第三还可以调用其他的启动引导程序,来实现多系统引导
[root@centos grub]# ll
total 274
#grub 中硬盘的设备文件名与系统的设备文件名的对应文件
-rw-r--r--. 1 root root 63 Dec 2 23:19 device.map
#ext2/ext3 文件系统的 stage 1.5 文件
-rw-r--r--. 1 root root 13428 Dec 2 23:19 e2fs_stage1_5
#FAT 文件系统的 stage 1.5 文件
-rw-r--r--. 1 root root 12636 Dec 2 23:19 fat_stage1_5
#FFS 文件系统的 stage 1.5 文件
-rw-r--r--. 1 root root 11780 Dec 2 23:19 ffs_stage1_5
grub 的配置文件
-rw-------. 1 root root 835 Dec 2 23:19 grub.conf
#iso9660 文件系统的 Stage 1.5 文件
-rw-r--r--. 1 root root 11772 Dec 2 23:19 iso9660_stage1_5
jfs 文件系统的 Stage 1.5 文件
-rw-r--r--. 1 root root 13284 Dec 2 23:19 jfs_stage1_5
#grub 的配置文件。和 grub.conf 是软链接,所以两个文件修改哪个都可以
lrwxrwxrwx. 1 root root 11 Dec 2 23:19 menu.lst -> ./grub.conf
#minix 文件系统的 Stage 1.5 文件
-rw-r--r--. 1 root root 11972 Dec 2 23:19 minix_stage1_5
#reiserfs 文件系统的 Stage 1.5 文件
-rw-r--r--. 1 root root 14428 Dec 2 23:19 reiserfs_stage1_5
# 系统启动时, grub 程序的背景图像
-rw-r--r--. 1 root root 1341 Nov 15 2010 splash.xpm.gz
# 安装到引导扇区中的 stage1 的备份文件
-rw-r--r--. 1 root root 512 Dec 2 23:19 stage1
#stage2 的备份文件
-rw-r--r--. 1 root root 126148 Dec 2 23:19 stage2
#UFS 文件系统的 Stage 1.5 文件
-rw-r--r--. 1 root root 12040 Dec 2 23:19 ufs2_stage1_5
#vstafs 文件系统的 Stage 1.5 文件
-rw-r--r--. 1 root root 11380 Dec 2 23:19 vstafs_stage1_5
#xfs 文件系统的 Stage 1.5 文件
-rw-r--r--. 1 root root 13980 Dec 2 23:19 xfs_stage1_5
2、grub 的配置文件
[root@centos grub]# vim /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root nomodeset rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.el6.x86_64.img
- default=0
默认启动第一个系统。也就是如果在等待时间结束后,用户没有选择进入哪一个系统,那么 系统会默认进入第一个系统。如果有多系统并存,那么每个系统都会有自己的 title 字段,如果想要 默认进入第二个系统,这里就可以设为 default=1。 - timeout=5
等待时间,默认是 5 秒。也就是进入系统时,如果 5 秒内用户没有按下任意键,那么系统会 进入 default 字段定义的系统。当然可以手工修改这个等待时间,如果 timeout=0 则不会等待直接进入系统,timeout=-1 则是一直等待用户输入,而不会自动进入系统。 - splashimage=(hd0,0)/grub/splash.xpm.gz
这里是指定 grub 启动时的背景图像文件的保存位置的。已经说过了 hd(0,0)代表第一个硬盘的第一个分区,而一般的系统安装时/boot 分区就是第一个分区,所以这个背景图像的实际位置就是/boot/grub/splash.xpm.gz。 - hiddenmenu 隐藏菜单。
启动时默认只能看到读秒,而不能看到菜单,如果想要看到菜单需要按任意键。 如果注释了这句话,那么启动时就能直接看到菜单了。
以上就是 grub 的整体设置,下面我们介绍 CentOS 系统的启动设置:
title CentOS 6 (2.6.32-642.el6.x86_64)
#title 就是标题的意思,也就是说在 title 后面写入的是什么,那么系统启动时在 grub 的启动菜单中看到的就是什么。
root (hd0,0)
#是指启动程序的保存分区。在系统中,/boot 分区是独立划分的,而且设备文件名为/dev/sda1,所以在 grub 中,就被描述为 hd(0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 #指定了内核文件的位置,这里的/是指/boot 分区
ro # 启动时以只读方式挂载根文件系统,这是为了不让启动过程影响磁盘内的文件系统
root=/dev/mapper/vg_centos-lv_root # 指定根文件系统的所在位置
rd_NO_LUKS # 禁用 LUKS,LUKS 用于给磁盘加密。
LANG=en_US.UTF-8 #指定语言
rd_NO_MD #禁用软 RAID
KEYBOARDTYPE=pc KEYTABLE=us #键盘类型
rd_NO_DM #禁用硬 RAID
rhgb #用图片来代替启动过程中的文字信息。启动完成 之后可以使用 dmesg 命令来查看这些文字信息。
quiet #隐藏启动信息,只显示重要信息。
3、grub 加密
我们使用命令生成加密密码字串,这个字串是采用 md5 加密的,就是你的密码经 md5 编码之后的。 我们会利用这个加密密码字串来加密 grub 配置文件。
[root@centos grub]# grub-md5-crypt
Password:
Retype password:
$1$OhHNh0$KGd1RTlTKKj7nEPeL6azJ1
grub 菜单整体加密,整体加密后,如果想进入 grub 编辑界面必须输入正确的密码,操作如下
[root@centos grub]# vim /boot/grub/grub.conf
default=0
timeout=5
password --md5 $1$OhHNh0$KGd1RTlTKKj7nEPeL6azJ1
三、系统修复模式
1、单用户模式
Linux 的单用户模式有些类似 Windows 的安全模式, 只启动最少的程序用于系统修复。在单用户模式(运行级别为 1)中,Linux 引导进入根 shell,网络被禁用,只有少数进程运行。单用户模式可以用来修改文件系统损坏、还原配置文件、移动用户数据等。
1)进入单用户模式
按 e 进入grup菜单,选择第二项,再按 e ,输入 1 回车 再按 b 启动
2、单用户模式常见的错误修复
- 遗忘 root 密码 这是管理员最容易犯的错误,那么应该如何修复呢?当然是使用单用户模式进行修复了,进入单用户模式最大的特点就是不需要输入用户名和密码就能登录。既然已经登录了单用户模式,那么直接 给 root 用户设定新密码即可。
命令如下:
[root@centos /]# passwd root - 修改系统默认运行级别 如果我们把系统的默认运行级别修改错误,比如改为了 0 或 6,系统就不能正常启动了。这时也可以利用单用户模式进行修复,只要直接修改默认运行级别配置文件/etc/inittab,把系统默认运行 级别修改回来即可。
命令如下:
[root@centos /]# vim /etc/inittab id:3:initdefault:
把默认运行级别修改为 3 或 5 。注意系统的默认运行级别只能使用 3 或 5 绝大多数系统错误都可以通过单用户模式进行修复,理论上是只要能够进入单用户模式,那么系统错误就可以被单用户模式修复。
3、光盘修复模式
1)进入光盘修复模式
如何进入光盘修复模式呢首先你需要有系统光盘,或系统修复光盘。我们这里只需要把 CentOS 6.x 的第一张光盘放入光驱,然后重启系统。修改 BIOS 的启动顺序,让系统从光盘启动。下面的针对的是虚拟机。
2)、 光盘修复模式常见的错误修复
我们在光盘修复模式中主要可以修复什么错误呢?其实能在单用户模式中修复的错误,都能在光盘修复模式中修复。当然还可以修复一些在单用户模式下无法修复的错误.
- 重要系统文件丢失,导致系统无法启动 如果系统中的重要系统文件丢失,当然会导致系统无法正常启动。这时也可以利用光盘修复模式修复。我们假设把/etc/inittab 文件丢失了,我们通过系统启动过程知道这个文件是定义系统默认运行级别的,如果丢失了这个文件,系统当然不能正常启动,这时就需要进入光盘修复模式中了,然后需要利用 chroot 命令的作用是“change root directory”改变系统根目录的意思。也就是可以把根目录暂时移动到某个目录当中。我们是通过光盘启动的光盘修复模式,所以我们现在所在的根目录不是真正的系统根目录,而是光盘的模拟根目录。系统根目录被当成外来设备放在了/mnt/sysimage/目录中。 这时就需要 chroot 命令把我们现在的所在目录移动成真正的系统根目录。
bash-4.1# chroot /mnt/sysimage # 改变主目录,发现有的时候已经是正常的根目录,就无需切换。
sh-4.1# cd /root # 进入 root 目录。因为默认进入的是 / 目录,如果不进入 root ,一会提取的 inittab 文件会报错
sh-4.1# rpm -qf /etc/inittab initscripts-9.03.31-2.el6.centos.i686 # 查询下 /etc/inittab 文件属于哪个包,如果文件丢失,可以通过其他命令查询。或者上网查询。
sh-4.1# mkdir /mnt/cdrom # 建立挂载点
sh-4.1# mount /dev/sr0 /mnt/cdrom # 挂载光盘
sh-4.1# rpm2cpio /mnt/cdrom/Packages/initscripts-9.03.31-2.el6.centos.i686.rpm |cpio -iduv ./etc/inittab # 提取 inittab 文件到当前目录
sh-4.1# cp etc/inittab /etc/inittab #复制 inittab 文件到指定位置