一、系统流程分析

    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