Linux运维 第二阶段 (十)启动管理


启动管理:

1、 POST(power on selftesting)-->BIOS(boot sequence)-->bootloader(MBR)->kernel(initramfs,root fs)-->init(/sbin/init,redhat6upstart另一版本的init,ubuntu开发,并行启动进程,d-bus配置event-driven事件驱动,而传统风格redhat5是串行启动进程),/etc/inittab,/etc/init/*.conf)

/boot/vmlinuz-VERSION(核心)

/lib/modules/VERSION/*(内核模块.ko,装载模块insmodmodprobe

2.6内核之前(例如2.42.5奇数表示测试版,偶数表示稳定版);2.6内核之后(分成两条线,一部分2.6.17-->2.6.18.rc1-->.rc2—>.rc3(release candidate发行候选),另一部分2.6.17-->2.6.17.1-->.2-->.3

 

2、内核设计风格:

单内核(linux,所有功能靠一个进程,工作逻辑简单,lwp(line weight process))

微内核(windows,solaris,有子系统,需要用时调用子系统,支持线程)

 

3、  内核初始化:硬件探测;装载驱动(可能会从initramfs文件中装载驱动模块);以只读方式挂载根文件系统rootfs;启动用户空间中的第一个进程init

 

4redhat5/etc/inittab文件:id:RUNLEVEL:action:process(例如:id:3:initdefault:si::sysinit:/etc/rc.d/rc.sysinit

id(标识);

RUNLEVEL(在哪个级别运行此行);

action(在什么情况下执行此行,initdefault表示设定默认运行级别,sysinit表示系统初始化,wait表示等待级别切换至此级别时执行(可能会执行多次)ctrlaltdelpowerfailUPS电源才有意义,powerokwaitrespawn表示一旦程序终止会重新启动(6个虚拟终端及进入5级别时启动图形界面#mingetty  tty1也可手动执行));

process(要运行的程序)。

 

/etc/inittab文件的任务(redhat5):

设定默认运行级别;

运行系统初始化脚本;

运行指定运行级别对应目录下的脚本(/etc/rc.d/init.d/*/etc/rc.d/rc#.d/*);

设定ctrl+alt+del组合键的动作;

定义UPS电源在故障|恢复时的动作;

启动虚拟终端(2345级别);

启动图形终端(仅5级别);

 

5#runleveloutputprevious and current runlevel,查看上一次和当前运行级别)

#who -r--runlevelprint current runlevel

#uname -a--allprint all information

#uname -r--kernel-release

 

6#file  /etc/rc.d/rc.sysinitBourne-Againshell script text executable

#wc -l  /etc/rc.d/rc.sysinit668行,系统初始化脚本完成的任务如下,至关重要)

激活udevselinux

根据/etc/sysctl.conf文件,设定内核参数;

设定实时时钟;

装载键盘映射;

启用交换分区;

设置主机名;

根文件系统检测,并以读写方式重新挂载;

激活RAIDLVM设备;

启用磁盘配额;

检查并挂载其它FS/etc/fstab);

清理过期的锁和PID文件。

 

7#ls  /etc/rc3.d/{K##,S##}(关闭或启动的优先次序,数字越小,优先被选定,先关闭以K开头的文件再开启S开头的文件)

#ls /etc/rc.d/init.d/(服务类脚本:sysv/etc/rc.d/init.d/下的所有文件,start|stop|restart|status最起码有这四个参数,另reload|configtest))

脚本内容中靠两行来实现管理系统服务的(#chkconfig和#description),如下:

# chkconfig: RUNLEVELS  SS  KK(顶格必须有井号,其中RUNLEVELS默认运行级别,在哪些级别下启动,-表示没有级别,默认创建为S*开头的链接,除此之外的级别默认创建为K开头的链接,SSKK的和为99

# description:(用于说明此脚本的简单功能,\可续行,最多不要超过80个字符)

例如:

#vim /etc/rc.d/init.d/test

#!/bin/bash

#

# chkconfig: 2345  85  14

#description: Test service

case  $1  in

   start)

   echo "service is running..."

   ;; 

   stop)

   echo "service is stop..."

   ;; 

   restart)

   echo "service is stop..."

   echo "service is running..."

   ;; 

   *) 

   echo "unknow."

   ;; 

esac

#chmod 755  /etc/rc.d/init.d/test

#chkconfig --list  [SERVICE_NAME](查看所有独立守护进程相关服务,也可指定查看某服务)

#chkconfig --add|--del  SERVICE_NAME(创建或移除链接文件,K开头或S开头的文件)

#chkconfig --add  test

#chkconfig --list  test

#chkconfig [--level  RUNLEVELS]  SERVICE_NAME on|off(若不指定级别,默认为2345

#chkconfig --level  35  test on

#/etc/init.d/test  start

#/etc/init.d/test  restart

#service test  restart

 

8、用户空间访问,监测内核的方式:可在伪文件系统/proc/sys下修改内核特性(/sys/下某些文件可写,/proc/sys/下的大多数文件可写)

设定内核参数值的方式:

方式一:#echo  VALUE  > /proc/sys/TO/SOMEFILE

方式二:#sysctl  -w  kernel.FILENAME=”VALUE” configurekernel parameters at runtime/proc/sys/kernel/下的文件,注意/proc/sys下的路径用点隔开)

以上方式可立即生效但不能永久有效

1

#free -m

#echo 1  >  /proc/sys/vm/drop_caches(清空缓存)

#free -m

#echo “www.magedu.com”  > /proc/sys/kernel/hostname

2

#sysctl -w  vm.drop_caches=”1”

#sysctl -w  kernel.hostname=www.magedu.com

 

配置文件:/etc/sysctl.conf(修改此文件能永久有效,但无法立即生效)

#vim /etc/sysctl.conf

net.ipv4.ip_forward = 0改为1

#sysctl -pLoad in sysctl settings from the file specified or /etc/sysctl.conf,执行此句可立即生效)

#sysctl -a(显示所有内核参数值,688项,并非每个都能改)

 

9、内核模块管理:

#lsmodprogram to show thestatus of modules in the Linux Kernel,列出模块)

#modinfo MOD_NAMEprogram to show information about a Linux Kernel module

#modprobe MOD_NAME(装载模块,指定模块名)

#insmod /PATH/TO/MODULE_FILE(装载模块,需指定路径)

#modprobe -r  MOD_NAME--remove卸载模块)

#rmmod MOD_NAME(卸载模块)

#depmod /PATH/TO/MODULES_DIRprogram to generate modules.dep and map files生成模块依赖表)

注:内核中的功能除了核心功能之外,在编译时大多功能都有三种选择:不使用此功能;编译成内核模块;编译进内核

 

10boot loader(MBR)

LILOlinux loader,不支持>8G分区,应用于嵌入式系统中)

GRUBgrand unified bootloaderstage1(MBR),stage1.5(常见的不同类型的FS),stage2(/boot/grub)

#rpm -q  grub

#cat /etc/grub.conf(此文件链接到/boot/grub/grub.conf

default=0(设置默认启动的title编号,从0开始)

timeout=5(等待用户选择的超时时长,单位秒)

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gzgrub的背景图片)

hiddenmenu(隐藏菜单)

password --md5  加密的字符串(有此句开机编辑grub菜单需输入密码,如设置密码为redhat生成的加密字符串#openssl  passwd  -1 -salt  12345678  redhat

title Red Hat Enterprise Linux(2.6.32-358.el6.x86_64)(内核标题或OS名称,字符串,可自由修改)

 root  (hd0,0)(内核文件所在的设备,对grub而言,所有硬盘类型均为hd

  kernel/vmlinuz-2.6.32-358.el6.x86_64 ro……(内核文件路径及传送给内核的参数,#cat  /proc/cmdline发起进程的命令)

  initrd/initramfs-2.6.32-358.el6.x86_64.img(完整的linux系统的文件路径,注意/boot单独分区与不单独分区路径是不同的)

 

#dd if=/dev/zero  of=/dev/sda  bs=400 count=1(模拟损坏grub,注意bs不要超过446否则会损坏分区表)

#sync

修复步骤:

用光盘进入修复模式rescue installed system

#grub

>root (hd0,0)

>setup (hd0)

>quit

重启即可

 

制作grub启动图片:

#yum -y  install  gimp

#gimp &(在图形界面下打开此软件)

p_w_picpath-->scale p_w_picpath(大小调整为640*480,仅支持14色,否则不会正常显示,将图片保存为xpm格式)

#gzip -9  linux.xpm(最大限度压缩图片为linux.xpm.gz格式,并放至/boot/grub/下)

#vim /etc/grub.conf(更改配置文件中图片路径)

splashp_w_picpath=(hd0,0)/grub/linux.xpm.gz

 

制作一块虚拟磁盘,使得可在新建的虚拟机上启动:

在一有系统的正常的虚拟机上新建一块虚拟磁盘,注意store virtual disk as a single file,浏览保存至其它路径(本例添加的是IDE类型)

#fdisk /dev/sdasda1(20M),sda2(512M)

#partx /dev/sda

#mke2fs -j  /dev/sda1

#mke2fs -j  /dev/sda2

#mkdir /mnt/{boot,sysroot}

#mount /dev/sda1  /mnt/boot

#mount /dev/sda2  /mnt/sysroot

#ls /mnt/boot

#grub-install  --root-directory=/mnt  /dev/sdainstall GRUB on yourdrive,/mntboot的父目录,会自动查找)

#sync;sync

#ls /mnt/boot/grub

#vim /mnt/boot/grub/grub.conf

default=0

timeout=5

title mylinux

 root  (hd0,0)

 kernel  /vmlinuz

 initrd  /initramfs

#sync;sync

suspend挂起这台正常的虚拟机,新建一虚拟机,将此例新建的那块虚拟盘作为新虚拟机的唯一盘,启动看能否正常引导

 

grub配置文件破坏后启动系统,操作如下:

>find

>root (hd#,N)

>kernel /PATH/TO/KERNEL_FILE

>initrd /PATH/TO/INITRD_FILE

>boot(尝试启动系统)

 

 

 

 

以上是学习《马哥网络视频》做的笔记。

 

 





一、1、启动流程:

         》加载BIOS的硬件信息进行自我测试,并依据BIOS设置取得第一个可启动的设备;

         》读取每一个启动设备的MBR,加载MBR中的BOOTLOADERgrubspfdisk);

         》依据BOOTLOADER的设置加载kernelkernel会再进行系统检测,并采用kernel检测到的硬件信息,同时kernel会通过加载动态模块的形式加载硬件驱动;

         》内核启动系统的第一个进程/sbin/init

         》进程/sbin/init调用/etc/init/rcS.conf,再通过这个配置文件调用/etc/rc.d/rc.sysinit,从而进行系统初始化及软件执行的操作环境;

         /etc/init/rcS.conf调用/etc/inittab,从而确定系统默认运行级别,接着/etc/inittab调用/etc/init.rc.conf继而调用并执行/etc/rc.d/rc脚本文件并传入运行级别参数;

         /etc/rc.d/rc确认传入的运行级别,运行相应的运行级别目录/etc/rc[0-6].d/中的脚本,从而依据设定好的优先级别依次启动和关闭;

         》最后执行/etc/rc.d/rc.local中的程序,设定系统启动就运行的工作;

         》若是字符界面就已启动完毕,若图形界面调用x-windows接口。

         2MBR位于硬盘的0磁道、0柱面、1扇区,主要记录BOOTLOADER启动引导程序和分区表,其中启动引导程序占446byte,分区表占64byte,另2byte作结束标记,所以分区表共64byte,每个分区要占16byte,仅能划分4个主分区。

         BOOTLOADER的作用:最主要功能加载操作系统内核;提供菜单,来选择启动哪个操作系统;调用其它的BOOTLOADER,这是多系统启动的关键,注意windowsbootloader不能调用linuxbootloader

         3、常见的USBSATASCSI等硬盘设备驱动,特殊文件系统LVMRAID等的驱动,都以模块形式保存在/lib/modules/下;使用initramfs虚拟文件系统解决操作系统安装在SCSI硬盘上或采用LVM的文件系统的问题。

         4#runlevel      (查看系统运行级别,0:关机;1single单用户模式,用于系统修复;2:不完全的命令行模式,不含NFS服务;3:完全的命令行模式,标准字符界面;4:系统保留;5:图形模式;6:重启

         #init    0|1|2|3|5|6    (切换系统运行级别

         5grub:支持更多的文件系统;grub的主程序可直接在文件系统中查找内核文件;系统启动时利用grub的交互界面编辑和修改启动选项;可动态修改grub的配置文件,重新启动即生效,而不用重新安装grub

         grub的主程序分三个阶段来执行:

stage1:执行主程序(主程序位于bootloader中)用来启动stage1.5stage2

stage1.5:识别不同文件系统,它位于MBR之后的32K的空间中,这一段硬盘空间是空白无用的,而且是没有文件系统的,所以stage1能直接读取stage1.5,从而能识别不能的文件系统;

stage2:加载grub的配置文件(/boot/grub/grub.conf),然后根据配置文件中的定义,加载kernelinitramfs,继而kernel接管启动过程,继续自检加载硬件模块。

》系统中没grub,手工安装步骤:

#grub-install  --root-directory=/tdisk  /dev/sdb1

#vi  /boot/grub/gurb.conf

title  centos tdisk

root (hd1,0)

chainloader  +1      (使用当前分区的启动扇区启动系统

#grub

grub>root(hd0,0)     (设定grub的主目录,这里只能是(hd0,0),因为内核和文件系统安装在/dev/sda1

grub>find  /boot/grub/stage1

grub>find  /grub/stage1

grub>find  vmlinuz-2.6.32-279.3l6.i686

grub>set  (hd1,0)     (在tdisk分区的启动扇区安装grub

grub>quit

注:#grub-install  选项   设备文件名

          --root-directory=DIR        DIR是实际目录,手工指定grub相关文件的安装目录

MBR中的grub被覆盖,需重新安装grub

光盘修复模式:

sh-4.1#grub

grub>root  (hd0,0)

grub>setup (hd0,0)

grub>quit

grub加密

#grub-md5-crypt      (输两次密码生成加密字串

#vi  /boot/grub/grub.conf

timeout=5

password  --md5  此处放加密字串   (必须要将加密字串放在timeoutsplashp_w_picpath之间,此项仅在开机启动编辑grub时生效,有此项可以正常启动进入系统

splashp_w_picpath=……

 

title  centos (2.6……)

         lock    (在title字段下一行加lock代表锁死,必须输入正确的密码才能正常启动

三、内核模块管理

         内核模块保存位置:/lib/modules/$(uname  -r)/kernel/

         depmod命令会扫描系统中所有的内核模块,然后把结果放入modules.dep文件,后续的模块安装和删除都依赖这个文件中的内容,如模块所在位置的绝对路径,模块的依赖性。

#depmod  -a|-A|-n

-a          扫描所有模块

-A          扫描新模块,才更新modules.dep

-n          仅输出到屏幕,不写入modules.dep

#lsmod     (内核模块查看

#modprobe  选项  模块名

-l          列出所有模块

-f          强制加载模块

-r          删除模块

例:#depmod  -a

#modprobe  vfat

#lsmod |grep  vfat

#modprobe  -r vfat

四、系统修复模式:

         1、单用户模式:遗忘root密码;修改系统默认运行级别。

         2、光盘修复模式:多系统并存,grub被覆盖;重要系统文件丢失,导致系统无法启动。

         #chroot  /mnt/sysp_w_picpath        (光盘模式下默认根目录是光盘的模拟根目录,系统根目录被当作外来设备放在/mnt/sysp_w_picpath

 

注:本文由互联网收集整理(51CTO、360DOC、chinaunix、百度百科、兄弟连免费视频等)。