Centos6和centos5
Linux: kernel+rootfs
kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
rootfs:程序和glibc
库:函数集合, function, 调用接口(头文件负责描述)
过程调用:procedure,无返回值
函数调用:function
程序:二进制执行文件
v
内核设计流派:
单内核(monolithic kernel):Linux
把所有功能集成于同一个程序
微内核(micro kernel):Windows, Solaris
每种功能使用一个单独子系统实现
Linux内核特点:/lib/modules
支持模块化:.ko(内核对象)
如:文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
模块查看:lsmod
模块安装:modprobe mod_name
模块卸载:modprobe -r mod_name
Rmmod
组成部分:
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:辅助的伪根系统,放置有一些必要的驱动模块(破坏也会导致系统无法启动)
CentOS 5: /boot/initrd-VERSION-release.img
CentOS 6,7: /boot/initramfs-VERSION-release.img
模块文件:/lib/modules/VERSION-release(大多数放置位置)
启动流程
Post加电自检—-MBR引导(446B引导记录+46B磁盘分区表+2B标记位)—-GRUB—-加载内核—-启动init进程
Post-mbrstage1-stage1.5-stage2/boot/grub-grub.conf(kernel.initrd)-/sbin/init–/etc/inittab-id:N(启动的默认级别)-/etc/rc.d/rc.sysinit(系统初始化脚本)-/etc/rc.d/rcN.d/service(服务脚本)-/etc/init.d-/etc/rc.d/rc.local(最后一个脚本)–login
CentOS6启动流程
1.加载BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4.核心执行init程序,并获取默认的运行信息
5.init程序执行/etc/rc.d/rc.sysinit文件
6.启动核心的外挂模块
7.init执行运行的各个批处理文件(scripts)
8.init执行/etc/rc.d/rc.local
9.执行/bin/login程序,等待用户登录
10.登录之后开始以Shell控制主机
如果/boot/initramfs-$(uname -r).img $(uname -r)被误删除用以下命令恢复
ramdisk文件的制作:
(1) mkinitrd命令
为当前正在使用的内核重新制作ramdisk文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令
为当前正在使用的内核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
init程序的类型:
SysV: init, CentOS 5之前
配置文件:/etc/inittab
vUpstart: init,CentOS 6
配置文件:/etc/inittab, /etc/init/*.conf
vSystemd:systemd, CentOS 7
配置文件:/usr/lib/systemd/system
/etc/systemd/system
运行级别
/sbin/init centos之前
为系统运行或维护等目的而设定,0-6,7个级别
0:关机
1:单用户模式(root自动登录),single 维护模式
2:多用户模式,启用网络功能,但不会启动NFS
3:多用户模式,正常模式,文本界面(字符界面)
4:预留级别:同3级别
5:多用户模式,正常模式,图形界面
6:重启
默认级别:3(字符界面) 5(图形界面)
切换级别:init #
查看级别:runlevel 或者 who -r
Centos6中/etc/inittab中定义了启动的默认级别 ,修改为3,那么启动的时候不加载图形界面,直接进入字符界面。(centos7不起作用)
在系统启动时,按任意键,看到系统进入一个界面,按a键进入编辑模式,可以定义用哪个界别进行启动
/etc/rc.d/rc.sysinit: 系统初始化脚本
(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作
rc N –> 意味着读取/etc/rc.d/rcN.d/
K*: K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
S*: S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
注:1、S*打头的文件,为系统开启服务的文件,K*打头的文件,为系统关闭的服务文件
2、如果服务之间有依赖关系,如A依赖于B,那么开启的时候,会先开启所依赖的B服务,在开启A服务,关闭的时候,则先关闭A服务,在关闭B服务
chkconfig命令 (操作服务)
v查看服务在所有级别的启动或关闭设定情形:
chkconfig [–list] [name]
–add name 添加
–del name 删除
–level LLLL:指定要设置的级别,省略时表示2345
–list name 在0-6级别该服务的开启状态
Xinetd管理的服务
Xinetd命令:管理一些在使用到该服务时,唤醒该服务的功能
瞬态服务被xinetd进程所管理
配置文件:/etc/xinetd.conf /etc/xinetd.d/<service>
用chkconfig 命令也可以管理瞬态服务的开启和关闭
例: chkconfig atd off |on
/etc/rc.d/rc.local 可以把需要开机启动的服务放在这个文件下,计算机开机就会自动启动,但是不能用service命令进行管理,可以kill #发送信号进行停止中断
Centos启动流程(grub)
在grub启动时,分为三个阶段,分别是1,1.5和2,阶段,介绍一下3个阶段
- stage1:加载MBR,bootloader
- Stage1——5:MBR之后的27个扇区,让stage1中的BootLoader能够识别stage2所在的分区上的文件系统
- Stage2:读取磁盘分区(/boot/grub/)
加载 / 需要找到/boot/grub/grub.conf 文件,若果丢失,系统无法启动
Grub.conf文件
Password –encrypted STRING 给用sha512算法给grub加密
实验:编写服务
- 编写服务脚本:vim testver
格式为:#!/bin/bash
#chkconfig : 35 99 00(35为运行级别,99为开启顺序,开启时最后开启00为关闭顺序,关闭时最先关闭)(开始号越大,关闭号则越小)
#description:This is a test service
Case $1 in
Start)
Echo testver is starting
;;
Stop)
Echo testver is stoping
;;
Restart)
Echo testver is stopped
Echo testver is starting
;;
Status)
[ -f /app/testver ] && echo testver is running || echo testver is stopped
- 添加服务:
Chmod +x testver
Chkconfig –add testver
实验:删除内核文件,重新安装
- 进入/boot目录,删除文件vmlinuz-`uname -r`
- Reboot
- 挂载光盘进入救援模式
- 创建目录,将光盘挂载到该目录下,
Mkdir /mnt/cdrom
Mount /dev/sr0 /mnt/cdrom
- 拷贝光盘中的/isolinux/vmlinuz文件到/boot目录下,并且改名
Cp /mnt/cdrom/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r`
- 重启就可以进入系统
实验删除initramfs文件
模拟/boot/initramfs-$(uname -r).img $(uname -r)文件被删除,机器启动不了,修复方法:
- 在centos6上删除/boot/initramfs-版本号.img 文件
- 重启系统
- 光盘启动,进入救援模式
- 开启一个shell,切换到根目录 ,生成该文件
Chroot /mnt/sysimage
Mkinitrd /boot/initramfs-`uname -r`.img `uname -r`
- exit,exit,重启系统
- 看到系统已经可以启动
实验:破坏MBR的前446个字节
- 模拟破坏:dd if=/dev/zero of=/dev/sda bs=1 count=446
- 查看破坏情况: hexdump -C -n 512 可以看到已经全部为0
- 重启系统,可以看到系统直接进入光盘启动页面
- 修复grub:
方法一:1、切根:chroot /mnt/sysimage
2、修复:grub-install –root-directory=DIR /dev/DISK
在这里–root-directory=DIR指的是boot分区的上一级目录,因为boot分区的上一级目录时/ 所以可以默认不谢,/dev/DISK指的是/boot所在的磁盘
Grub-install /dev/sda
方法二:1、输入 grub
2、root (hd0,0)写boot所在磁盘的位置
3、输入 setup (hd0)硬盘所在位置
用方法二进行修复的时候,需要用到stage1文件,需要确保该文件存在
- 重启恢复
实验:破坏1.5阶段
- 模拟破坏:dd if=/dev/zero of=/dev/sda bs=1 count=13000 skip=512 seek=512
- 进入救援模式,修复grub
- 切跟,执行grub-install /dev/sda 修复完成
- 修复完成之后,记得sync同步,等一会儿,等数据写完,在重启
- 重启完成
实验:在LVM中删除boot目录和/etc/fstab文件
- 删除rm -rf /boot /etc/fstab
- 进入救援模式
- Lvdisplay 可以看到逻辑卷处于不可活动的状态
- 激活LVM, #:vgchange -ay ; lvdisplay 可以看到已经激活
- 挂载逻辑卷
Mount /dev/VolGroup/lv_root /mnt/root
- 编辑/etc/fstab文件,将/挂载
/dev/VolGroup/lv_root / ext4 defaults 0 0
/dev/sda1 /boot ext4 defaults 0 0
- 将系统重启,并且进入救援模式,可以看到已经可以切换根目录了
- 将安装光盘进行挂载,挂载的时候会提示错误,是因为此时目录为只读模式,需要重新挂载为rw模式才可以使用
Mount -o remount,rw /mnt/sysimage
Mount /dev/cdrom /mnt/cdrom
- 挂载光盘完成后,就可以安装内核包
Rpm -ivh /mnt/cdrom/Package/kernel-XXX.rpm –root=/mnt/sysimage –force
- 此时切换根,进入/boot目录,可以看到一些文件已经安装成功
- 接下来,需要安装gurb 文件,
Grub-install /dev/sda
安装完成后,记得等一段时间,敲几遍syne 等数据写入完成
- 下面还缺失一个关键性文件,需要我们手动来建立,那就是conf
文件内容如下:
Default=0
Timeout=3
Title=yan
Kernel /vmlinuz-版本号 root=/dev/VolGroup/lv_root
Initrd /initramfs-版本号.img
保存退出
- 重启系统,可以看到系统修复完成,已经可以登录
- 将swap分区挂载
/dev/mapper/VolGroup/lv_swap swap swap defaults 0 0
挂载完成,用free命令查看,可以看到swap大小
/procmulu
内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出
/proc/sys
(1) sysctl命令用于查看或设定此目录中诸多参数
sysctl -w path.to.parameter=VALUE
sysctl -w kernel.hostname=mail.magedu.com
(2) echo命令通过重定向方式也可以修改大多数参数的值
echo “VALUE” > /proc/sys/path/to/parameter
echo “websrv” > /proc/sys/kernel/hostname
Sysctl命令
默认配置文件:/etc/sysctl.conf
- 设置参数
Sysctl -w parameter=VALUE
- 通过读取配置文件设置参数
Sysctl -p [/path/to/conf_file]
- 查看所有生效参数
Sysctl -a
常用的几个参数:
net.ipv4.ip_forward
net.ipv4.icmp_echo_ignore_all
vm.drop_caches
/sys目录:
sysfs:为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性
udev通过此路径下输出的信息动态为各设备创建所需要设备文件,udev是运行用户空间程序
专用工具:udevadmin, hotplug
udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下
编译安装内核
- 模块之间存在依赖性
内核组成部分:1、放在vmlinuz-版本号-release中
2、放在/lib/modules/版本号-内核架构中
运行中的内核命令:uname
Uname -r :显示内核版本
-n:显示节点号
-a:显示所有信息
lsmod命令:
显示由核心已经装载的内核模块
显示的内容来自于: /proc/modules文件
vmodinfo命令:
显示模块的详细描述信息
modinfo [ -k kernel ] [ modulename|filename… ]
-n: 只显示模块文件路径
-p: 显示模块参数
-a: author 作者
-d: description 描述
-l: license 许可证
lsmod |grep xfs;modinfo xfs
装载或卸载内核模块
modprobe命令:
vmodprobe [ -C config-file ] [ modulename ] [ module parame-ters… ]
v配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf
vmodprobe [ -r ] modulename.
depmod命令:
内核模块依赖关系文件及系统信息映射文件的生成工具
装载或卸载内核模块:
vinsmod命令:指定模块文件,不自动解决依赖模块
insmod [ filename ] [ module options… ]
insmod `modinfo –n exportfs`
lnsmod `modinfo –n xfs`
vrmmod命令:卸载模块
rmmod [ modulename ]
rmmod xfs
rmmod exportfs
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90780