一、系统流程分析
1、内核设计风格:
单内核设计:Linux(LWP,轻量级)
模块化设计,核心:ko(kernel object),so(共享);
微内核设计:Windows,Solaris(线程)
2、RedHat,SUSE:
核心:动态加载各种外围的内核模块;
内核:/lib/modules/“内核版本号命名的目录”/;如,内核版本vmlinuz-2.6.32、/lib/modules/2.6.32/;
3、内核如何访问设备
内核和设备之间需要桥接设备,来生成内核访问设备所需要的文件。当内核能够完成对根设备的访问时,内核即可从桥接根设备中脱离出来,完成根设备切换;
a)RHEL5完成根切换的命令:chroot /PATH/TO/TEMPROOT [COMMAND...]
chroot:run command or interactive shell with special root directory;
b)显示二进制文件件所依赖的共享库命令:ldd /PATH/TO/BINARY_FILE
ldd:print shared library dependencies;
如:cp /bin/bash /test/virrrot/bin
chroot /test/virrrot(仍然报错,因为文件系统需要共享库)
ldd /bin/bash
cp /lib/libtermcap.so.2/test/virrrot/lib
cp /lib/libdl.so.2/test/virrrot/lib
cp /lib/libc.so.6/test/virrrot/lib
cp /lib/ld-linux.so.2/test/virrrot/lib
chroot /test/virrrot(切换成功,作用:可以把某个用户锁定在某个根下)
c)RHEL6内核Shell是nash,完成根切换的命令是swich_root;
4、内核和设备之间需要桥接设备,它可以把物理内存的空间模拟成硬盘使用,并装载到内核中:
RedHat5: ramdisk-->initrd
RedHat6: ramfs-->initramfs
5、所以PC机OS(Linux)的启动流程:
POST-->BIOS(Boot Sequence)-->MBR(bootloader,446)-->Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab);
Kernel和initrd是被bootloader装载的,initrd展开后被Kerne使用,Kernel借助initrd里的驱动、模块等,最终访问到/;
二、系统启动流程grub详解
1、系统启动的服务不同:
运行级别:0-6
0:halt,关机
1: single user mode,直接以管理员身份切入(可用s,S,single切换,可用于破解管理员密码)
2:multi user mode,(不启用NFS)
3: multi user mode, text mode
4:reserved
5: multi user mode, graphic mode
6: reboot
2、运行级别和内核查看命令
查看运行级别:
runlevel:
who -r
查看内核release号:
uname -r
3、Linux的bootloader(MBR):
LILO: LInux LOader
GRUB: GRand Unified Bootloader
Stage1: MBR
Stage1_5: 识别不同的文件系统
Stage2: /boot/grub/
4、/boot/grub/grub.conf文件
default=0 # 设定默认启动的title的编号,从0开始
timeout=5 # 等待用户选择的超时时长,单位是秒
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz # grub的背景图片
hiddenmenu # 隐藏菜单
password --md5 $1$HKXJ51$B9Z8A.X//XA.AtzU1.KuG. #grub密码,grub加盐密码命令:grub-md5-crypt;
title Red Hat Enterprise Linux Server (2.6.18-308.el5) # 内核标题,或操作系统名称,字符串,可自由修改;
root (hd0,0) # 内核文件所在的设备;对grub而言,所有类型硬盘一律hd,格式为(hd#,N);hd#, #表示第几个磁盘;最后的N表示对应磁盘的分区;
kernel /vmlinuz-2.6.18-308.el5 ro root=/dev/vol0/root rhgb quiet # 内核文件路径,及传递给内核的参数
initrd /initrd-2.6.18-308.el5.img # ramdisk文件路径(安装系统最后生成的文件)
password --md5 $1$HKXJ51$B9Z8A.X//XA.AtzU1.KuG. #设置装载内核密码
title Install Red Hat Enterprise Linux 5
root (hd0,0)
kernel /vmlinuz-5 ks=http://172.16.0.1/workstation.cfg ksdevice=eth0 noipv6
initrd /initrd-5
password --md5 $1$FSUEU/$uhUUc8USBK5QAXc.BfW4m.
三、如何安装或修复grub
1、模拟破坏MBR:
dd if=/dev/zero of=/dev/sda count=1 bs=512
sync
2、修复或安装grub stage1:
# grub
grub> root (hd0,0) -->自己判定boot磁盘
grub> setup (hd0)
quit
3、安装grub第二种方式:# grub-install --root-directory=/path/to/boot's_parent_dir /PATH/TO/DEVICE
4、如果系统内有多块磁盘,如何给其他磁盘安装grub:
首先是配置好分区表,并且安装grub的分区要挂载,如:# grub-install --root-directory=/mnt /dev/hda;
5、grub的配置文件被算坏或删除的系统恢复:
grub> find (hd#,N)/+按tab键
grub> root (hd#,N)
grub> kernel /PATH/TO/KERNEL_FILE
grub> initrd /PATH/TO/INITRD_FILE
grub> boot