Linux内核是由单内核和支持动态装卸载功能化模块(.ko: kernel object)组成,所有的模块都必须依托与内核才能运行,并且所有的模块和内核版本对应使用,不能跨版本使用.
Linux内核 内核的功能:
进程管理:task_struct, scheduler 分配进程的CPU及内存资源使用
内存管理:内存分配管理
I/O管理:中断及中断处理
文件系统:ext3, ext4, reiserfs, xfs
驱动程序:驱动硬件设备
安全相关: SELinux
通用软件,平台类的软件
一, Linux系统的初始化流程:POST --> BIOS (Boot Sequence) --> MBR(bootloader) --> GRUB(bootloader (stage1: mbr; stage2: grub目录中)) -->Kernel (CentOS5: initrd, CentOS6: initramfs) --> /sbin/init (CentOS5:/etc/inittab, CentOS6: /etc/inittab, /etc/init/*.conf)
POST:ROM(开机自检)+RAM
BIOS: Boot Sequence
MBR: 存储于0磁道总共512字节大小的引导文件.其中 446字节的bootloader引导加载器,64字节设备分区表,2字节5A效验
GRUB: initrd或initramfs独立于内核的一个根文件系统,帮助内核初始化,挂载根.在安装时生成基础硬件信息.
kernel文件:基本磁盘分区
/sbin/init在redhat和centos中内核启动以后由init做为所有用户进程的父进程,负责管理用户空间的进程.所以init的PID为1,可执行文件位于/sbin/init
/etc/inittab 启动配置文件
/etc/rc.d/rc.sysinit脚本 启动
/lib/modules/ 内核模块
二,GRUB: GRand Unified Bootloader.Redhat6使用的一种BooTLoader,MBR中的前 446 个字节,它的作用是引导启动内核。
1,GRUB程序的组成,位于文件/boot/grub/,主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5组成。
1st stage: 位于MBR中,为了引导2nd stage
1.5 stage: 位于boot基本磁盘分区中,为识别内核文件所在的文件系统提供文件系统识别扩展
2nd stage: 位于boot基本磁盘分区中,GRUB的引导程序 配置文件grub.conf
2,Grub的功能:
(1)选择要启动的内核或系统;能隐藏选择界面
(2)提供交互式接口 e: 编辑模式 a:传递参数 c:grub命令行模式 p:输入密码,设置了密码才会出现该选项
编辑模式:b:启动引导 e:选择编辑的项 c:命令行模式 o:新建在上方一行 O:下方新建一行 d:删除选择的行
(3)提供基于密码的保护,密码保护的两种模式
单独保护启用内核映像使用密码;
定义在相应的全局段title上使用密码进入编辑模式
grub-md5-crypt:生成MD5加密密码
3,grub.conf:配置文件的定义
default=0 #指定默认启动的内核或OS; timeout=5 #等待用户选择要启动的内核或OS的时长,单位为秒; splashimage=(hd0,0)/grub/splash.xpm.gz #指定使用的背景图片 hiddenmenu #隐藏菜单 password --md5 *** #说明设置进入编辑模式密码为MD5加密 title CentOS (2.6.32-431.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_jt-lv_root nomodeset rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_jt/lv_root rd_LVM_LV=vg_jt/lv_swap KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-431.el6.x86_64.img
title: 操作系统或内核的标题.在title前加入password字段则对进入编辑模式加密码,在title后加入password则只对启动系统映象加密码
root: 设定内核文件所在的分区为grub的根(不是操作系统的根)
kernel: 定义要使用的内核文件,ro标识开始定义内核的根及相关quiet为结束标识,可附加传递给内核的启动参数,
initrd: 指定为内核提供额外驱动等功能的ram disk或ram fs文件
三, init相关配置和功能 /etc/inittab:
CentOS5: 每一行定义一个操作
CentOS6: upstart 脚本
1,配置文件: 每行定义一种操作:id:5:initdefault:
1,id: 操作的ID 2,runlevels: 在哪些级别下执行此操作 3,action: 动作常用的有initdefault,sysinit,wait,等 initdefault: 设置默认运行级别,无需定义操作 sysinit:指定系统初始化脚本 si::sysinit:/etc/rc.d/rc.sysinit (id:si 所有级别 动作为sysinit 操作为:/etc/rc.d/rc.sysinit) wait: 等待系统切换至此级别时运行一次; ctrlaltdel: 定义组合键被按下时要运行的命令; respawn: 当指定操作进程被关闭时立即再启动一次; tty1:2345:respawn:/sbin/mingetty tty1 4,process: 操作
2,init要完成的任务:
(1)设定默认运行级别
(2)指定系统运行的初始化脚本
(3)启动指定级别下的要启动的服务,并关闭需要停止的服务
/etc/rc.d/ 脚本文件内有被注释的chkconfig -** ** 定义启动顺序会被chkconfig命令读取. /etc/rc.d/rcN.d (0-6)内S##代表启动脚本,K##关闭脚本.在chkconfig 里查看服务对应级别的开启和关闭 rc0.d代表0级别的启动服务连接文件
rc1.d代表1级别的启动服务连接文件
rc2.d代表2级别的启动服务连接文件
rc3.d代表3级别的启动服务连接文件
rc4.d代表4级别的启动服务连接文件
rc5.d代表5级别的启动服务连接文件
rc6.d代表6级别的启动服务连接文件
运行级别: 0-6: 7个级别
0:关机
1: 单用户模式, 直接以root用户登录(不用输入root密码)
2:多用户模式,不支持NFS文件系统
3:完全多用户模式,文本模式
4:预留级别
5:完全多用户模式,图形模式
6:重启 /etc/init.d/
(4)定义CtrlAltDel组合键的动作
(5)初始化终端:
终端:对应的是设备
/dev/tty#, /dev/ttyS#, /dev/console, /dev/pts/#
调用登录入口:login-->/etc/issue
启动图形终端:
X-Window, 桌面管理器
(6)系统初始化脚本/etc/rc.d/rc.sysinit
(7)设置主机名
(8)打印文本欢迎信息
(9)激活SELinux和udev(探测装载额外硬件设备)
(10)激活swap
(11)挂载/etc/fstab定义的本地文件系统
(12)检测根文件系统并对其以读写方式重新挂载
(13)设置系统时钟
(14)装载键盘映射
(15)根据/etc/sysctl.conf设置内核参数
(16)激活RAID和LVM设备
(17)清理操作
四,启动故障修复
1,在日常使用中可能会出现忘记root用户密码的情况,在系统启动级别中1级别是可以不用输入密码进入系统.就可以利用这个特性去修改root密码
(1)在系统尚未启动按↑↓键进入GRUB编辑模式修改启动级别
init的级别1的表示方式:1, s, single, S
单用户模式几乎不会启动任何服务,且不需要用户登录;但是会执行/etc/rc.d/rc.sysinit脚本;
如是连/etc/rc.d/rc.sysinit文件也不加载,则传递 emergency
(2)回车到GRUB选择界面按B保存修改并启动
(3)进入系统修改root密码
(4)修改密码以后不需要重启,使用init命令切换运行级别即可:
# init [0-6]
查看运行级别:
# runlevel
# who -r
2,grub配置丢失bootloader并未损坏的情况,在grub中添加原配置文件信息
(1)在系统尚未启动按↑↓键进入GRUB选择C进入grub命令行模式
(2)设置系统引导必须的root,kernel,initrd信息
grub配置丢失后在grub中添加原配置文件信息 grub> root (hd0,0) grub> kernel /vmlinuz-2.6.32-431.el6.x86_64(grub中原配置文件信息,tab键可以找到的文件) ro root=/dev/vg0/root quiet grub> initrd /initramfs-2.6.32-431.el6.x86_64.img(initrd通常为cpio归档,并使用gzip压缩;通常以.img作为文件名后缀;,tab键可以找到的文件) grub> boot
3,grub程序损坏丢失,grub的安装:
(1)进入安装模式选择rescue installed system(救援已安装系统)
(2)/mnt/sysimage 修复光盘在硬盘上检测到的根并挂载到这个目录
(3)chroot /mnt/sysimage 切换到这个需要修复的根系统
(4)第一种方式:
# grub grub> root (hd#,#) grub> setup (hd#) grub> quit
第二种方式:
# grub-install --root-directory=/ /dev/sda
指定根目录 指定磁盘硬件
五, 根据自己的需求制作一个简单的可启动的Linux,:
1、给将要制作的目标磁盘分区挂载到宿主机上:/dev/sdb1, /dev/sdb2
/dev/sdb1 挂载至 /mnt/boot #bootloader不能识别lvm,xfs等高级文件系统
/dev/sdb2 挂载至 /mnt/sysroot #挂载内核系统根文件系统
2、安装grub至目标磁盘
# grub-install --root-directory=/mnt /dev/sdb
3、复制内核和initrd文件
# cp /boot/vmlinuz-VERSION /mnt/boot/vmlinuz
# cp /boot/initramfs-VERSION.img /mnt/boot/initramfs.img
4、创建目标主机的根文件系统
# mkdir -pv /mnt/sysroot/{etc/rc.d, usr, var, proc, sys, dev, lib, lib64, bin, sbin, boot, srv, mnt, media, home, root}
5,利用脚本接着去移植bash等程序至目标主机的根文件系统;
6、为grub提供配置文件最基础的title,root,kernel,initrd信息
# vim /mnt/boot/grub/grub.conf default=0 timeout=5 title MageEdu Little Linux root (hd0,0) kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/bin/bash initrd /initramfs.img
本文出自 “颜色” 博客,谢绝转载!