N25-第十周

1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)

一、内核空间详细过程如下:
    POST –> BootSequence(BIOS) –> Bootloader(MBR) –> kernel(ramdisk) –> rootfs(只读) –> /sbin/init(systemd)
    1.POST:(power on system test)加电自检
        负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测。
        ROM: BIOS(Basic Input and Output System) ,即基本输入输出系统,它是装载ZA在一个硬件芯片 CMOS 之上,加电过程就是给CMOS通电,然后启动其上的BIOS程序,BIOS程序会根据CMOS上面的一些配置信息去读取其他硬件设备信息并检测其是否存在并能正常运行,之后进行硬件设备的初始化。

    2.Boot Sequnence
    按次序查找引导设备,第一个有引导程序的设备为本次启动设备,即:bootloader ;

        1)bootloader: 引导加载器,引导程序
        Linux:
        LILO:LInux LOader
        GRUB: GRand Unified Bootloader
            GRUB 0.X: Grub Legacy,
            GRUB 1.X: Grub2
        grub功能 :功能丰富,提供一个菜单,允许用户选择要启动系统或不同的内核版本; 把用户选定的内核装载到内存中的特定空间RAM中,解压、展开,并把系统控制权移交给内核 ;

        2)bootloader装在MBR中:Master Boot Record(主引导记录)
            512bytes :
                446bytes: bootloader,
                64bytes: 分区表
                2bytes: 55AA(有效标识)

        3)GRUB(2各阶段)
        bootloader : 1st stage
        Partitioon :1.5 stage  filesystem driver
        Partitioon :2nd stage  分区文件在/boot/grub上

    3.Kernel:加载系统内核,执行系统初始化信息
        1) 自身初始化 :
        · 探测可识别到的所有硬件设备
        · 加载硬件驱动程序(可能借助于ramdisk加载驱动 )
        · 以只读方式挂载根文件系统
        · 运行用户空间的第一个应用程序:/sbin/init
        2)ramdisk :
        内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
        ·ramdisk–> ramfs 提高速度(完成对真正根文件系统的驱动加载)

        CentOS 5: initrd, 工具程序:mkinitrd
        CentOS 6;7: initramfs,工具程序:mkinitrd,dracut

    一旦启动了init,内核就不管了,所有的后续操作都是由init去加载运行用户空间的应用程序来完成各种各样的工作,只有当这些应用程序完成系统调用或者系统发生中断时需要特权操作时,内核才会参与;剩余的其他过程都不在参与,而是由用户空间的程序来完成。
    启动用户空间的第一个执行程序/sbin/init, 完成系统初始化
    在内核、硬件及驱动信息加载完毕后,内核会呼叫用户空间中的第一个执行程序/sbin/init,init程序主要功能是准备软件运行环境,包括系统的主机名称、网络配置、文件系统各式等其他服务的启动管理。而这些所有的操作都是通过init的配置文件来定义。


二、用户空间启动流程
    设置默认运行级别-->运行系统初始化脚本,完成系统初始化-->关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务-->设置登录终端-->[启动图形终端]
    1.运行级别:为了系统的运行或维护等目的而设定的机制
        0-6:7个级别
        0:关机,shutdown
        1:单用户模式(single user),root用户 无需认证  维护模式
        2:多用户模式(multi user),会启动网络功能,但不会启动NFS 维护模式
        3:多用户模式(multi user),完全功能,文本界面(only)
        4:预留模式;目前无特别使用目的,同三级别功能使用
        5:多用户模式(multi user),完全功能,图形界面
        6:重启,reboot

        默认级别:3或者5
        级别切换: init #

    2.系统初始化的脚本文件:/etc/rc.d/rc.sysinit 
        1.设置主机名;
        2.设置欢迎信息;
        3.激活udev和selinux
        4.挂载/etc/fstab文件中定义的所有文件系统
        5.检测根文件系统,并以读写方式重新挂载根文件系统
        6.设置系统时钟
        7.根据/etc/sysctl.conf文件的设置,来设置内核参数
        8.激活lvm及软raid设备
        9.激活swap设备
        10.加载额外设备的驱动程序;
        11.清理操作
    3. 关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务
        根据运行级别的不同,系统会运行rc0.d到rc6.d中的响应的脚本程序,来完成相应的初始化工作和启动相应的服务。
    执行/etc/rc.d/rc.local
    4. 启动终端

2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;
  (1) 为硬盘新建两个主分区;并为其安装grub;
  (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;
  (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;
  (4) 为grub提供配置文件;

  (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

添加硬盘创建分区:
[root@dodo ~]# cat /proc/partitions 
major minor  #blocks  name

   8       16   20971520 sdb
   8       17   10490413 sdb1
   8       18   10474380 sdb2
   8        0   20971520 sda
   8        1     512000 sda1
   8        2   20458496 sda2
 253        0   18423808 dm-0
 253        1    2031616 dm-1

[root@dodo /]# mkfs.ext4 /dev/sdb1
[root@dodo /]# mkfs.ext4 /dev/sdb2

[root@dodo /]# mkdir /mnt/boot
[root@dodo /]# mount /dev/sdb1 /mnt
[root@dodo /]# mkdir /mnt/sysroot/{bin,proc,lib64,mnt,sbin,usr,tmp,etc,home,var,dev.media}
[root@dodo /]# mount /dev/sdb1 /mnt/sysroot

安装grub:
[root@dodo /]# grub-install --root-directory=/mnt /dev/sdb
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

复制内核文件和initramfs:
[root@dodo /]# cp /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/boot/vmlinuz
[root@dodo /]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img

编辑grub配置文件:
[root@dodo /]# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title CentOS-dodo
        root(hd0,0)
        kernel /vmlinuz ro root=/dev/sda2  selinux=0 init=/bin/bash
        initrd /initramfs.img

为rootfs提供bash、ls、cat程序及所依赖的库文件:
[root@dodo mnt]# cp /bin/{bash,ls,cat}  /mnt/sysroot/bin
[root@dodo sysroot]# ldd /bin/{ls,cat,bash}
/bin/ls:
    linux-vdso.so.1 =>  (0x00007fff74dff000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f9994022000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f9993e1a000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007f9993c15000)
    libacl.so.1 => /lib64/libacl.so.1 (0x00007f9993a0d000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f9993679000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f9993474000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f999424f000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9993257000)
    libattr.so.1 => /lib64/libattr.so.1 (0x00007f9993052000)
/bin/cat:
    linux-vdso.so.1 =>  (0x00007fff64fb1000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f58726f8000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5872a9a000)
/bin/bash:
    linux-vdso.so.1 =>  (0x00007fffe1d44000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f715b19a000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f715af96000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f715ac01000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f715b3c9000)
[root@dodo mnt]# cp /lib64/libselinux.so.1 /mnt/sysroot/lib64
[root@dodo mnt]# cp /lib64/librt.so.1 /mnt/sysroot/lib64
[root@dodo mnt]# cp /lib64/libcap.so.2 /mnt/sysroot/lib64
[root@dodo mnt]# cp /lib64/libacl.so.1 /mnt/sysroot/lib64
[root@dodo mnt]# cp /lib64/libc.so.6 /mnt/sysroot/lib64
[root@dodo mnt]# cp /lib64/libdl.so.2 /mnt/sysroot/lib64
[root@dodo mnt]# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64
[root@dodo mnt]# cp /lib64/libattr.so.1 /mnt/sysroot/lib64
[root@dodo mnt]# cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64

[root@dodo sysroot]# sync

3、制作一个kickstart文件以及一个引导镜像。描述其过程。

通过编辑/root/anaconda-ks.cfg为模板的文件
#version=DEVEL
# System authorization information 认证方式
auth --enableshadow --passalgo=sha512
# Use CDROM installation media 光盘
cdrom
# Use graphical install 图形化安装
graphical
# Run the Setup Agent on first boot 第一次启动时设置系统的向导
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts 键盘
keyboard --vckeymap=us --xlayouts='us'
# System language 系统语言
lang en_US.UTF-8

# Network information 网络服务
network  --bootproto=dhcp --device=ens33 --ipv6=auto --activate
network  --hostname=localhost.localdomain

# Root password 管理员密码
rootpw --iscrypted $6$tvsSxwFwiO2Ekcq1$8jRMyxa3cXqXwEN/HKzfcNG9vEi7XBWCr..rI3Id.mMzHq8uL4F15K9YgqN3N1sLoUI3nEtnaF5YGjZPsgs/E0
# System services 同步时间服务
services --enabled="chronyd"
# System timezone 时区
timezone Asia/Shanghai --isUtc
# X Window System configuration information 窗口配置化信息
xconfig  --startxonboot
# System bootloader configuration 定义BootLoader的安装位置设置级相关配置
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information 清空磁盘分区
clearpart --none --initlabel 

%packages 程序包
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11
chrony
kexec-tools

#结束自动化部署
%end 

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --notempty
pwpolicy luks --minlen=6 --minquality=50 --notstrict --nochanges --notempty
%end

或安装system-config-kickstart,图形自动生成ks文件

1.复制安装系统光盘引导文件和配置好的ksdodo.cfg文件到/dodoroot/isolinux目录
    cp -rf  /mnt/isolinux   /dodoroot/isolinux
    cp /boot/ksdodo.cfg /dodoroot/isolinux/
2.在isolinux.cfg中指明kickstart文件位置,可以实现完全自动化安装。也可以在“boot:”提示符下手动指定
   append initrd=initrd.img ks=cdrom:/isolinux/ksdodo.cfg
3.创建ISO启动镜像 mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 7 dodo"  -c isolinux/boot.cat -b isolinux/isolinux.bin -o isolinux/boot.iso dodoroot/

4、写一个脚本
  (1) 能接受四个参数:start, stop, restart, status
   start: 输出“starting 脚本名 finished.”
   …

  (2) 其它任意参数,均报错退出;  

#!/bin/bash
#判断
#author:dodo

case $1 in
    start)
    echo "start $0 finished."
;;
stop)
echo "stop $0 finished."
    ;;
    restart)
    echo "restart $0 finished."
;;
status)
echo "status $0 ok."
;;
*)
echo "error"
exit 1
;;
esac

5、写一个脚本,判断给定的用户是否登录了当前系统;
  (1) 如果登录了,则显示用户登录,脚本终止;

  (2) 每3秒钟,查看一次用户是否登录;

#!/bin/bash
#判断用户 
#author:dodo   
[ "$#" -lt 1 ] && echo "Please inter a username" && exit 1
! (id $1 &>/dev/null) && echo "Error: No user" && exit 2
while true;do
        if who | grep "^$1\>" &>/dev/null ; then
                    echo "$1 is login"      
        break
                else
                echo "Waiting 3sec,I will be check"     
        sleep 3

        fi
done

6、写一个脚本,显示用户选定要查看的信息;

   cpu) display cpu info
   mem) display memory info
   disk) display disk info
   quit) quit

   非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

#!/bin/bash
#查询硬件状态 
#author:dodo 
cat << EOF
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
EOF

while true;do
read -p "please choose:" choose
case ${choose} in
cpu)
    lscpu
    ;;
mem)
    free -m
    ;;
disk)
    df -HT
    ;;
quit)
    exit
    ;;
*)
    echo “Error!Please choose again!!”
    continue

esac
done

7、写一个脚本
  (1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;
  (2) 提示用户输入一个用户名或输入“quit”退出;
    当输入的是用户名,则调用函数显示用户信息;

    当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:

#!/bin/bash
#查询用户及shell 
#author:dodo 

user_id () {

if id $username &> /dev/null; then
             grep "^$username" /etc/passwd | awk -F: '{print "UID is:"$3, " Shell is:"$7}'
else
         echo "none user" 
fi

}

while true;do
read -p "please enter username or quit:" username
if [ $username == "quit" ];then
       exit 0
    else
       user_id $username
fi
done

原创文章,作者:lyj821202,如若转载,请注明出处:http://www.178linux.com/69879

(0)
lyj821202lyj821202
上一篇 2017-05-30
下一篇 2017-05-30

相关推荐

  • 第5周作业

    1、显示当前系统上root、fedora或user1用户的默认shell     ~]# egrep "^(root|fedora|user1)" /etc/passwd 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,如:hello();  …

    Linux干货 2017-01-07
  • Hadoop实战实例

     Hadoop 是Google MapReduce的一个Java实现。MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同java程序员可以不考虑内存泄露一样, MapReduce的run-time系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器…

    Linux干货 2015-04-13
  • httpd2.4 应用

    练习:  (1)基于主机名实现三个虚拟主机     (2) 每虚拟主机使用独立的访问日志和错误日志 (3) 第三个虚拟主机的/admin要进行用户访问认证  (4) 在第二个虚拟主机上提供/status; (5) 在第三个虚拟主机提供路径别名/bbs,访问其它文件系统路径; (6) 尝试使用混合类型…

    Linux干货 2016-10-09
  • Vim编辑器解析

    vim编辑器 概述:   VIM即ViIMproved:vi的增强版 ,vim是模式化的编辑。   vi:Visual lnterface,是一种文本编辑器,所谓文本编辑数据是基于字符编码的文件,常见的编码 有ASCII编码,UNICODE编码。 种类:   行编辑器:所谓行编辑器是指一行行来编辑处理的工具   全屏编…

    Linux干货 2016-08-10
  • 任务计划和本地系统的默认邮件

    一、前言 二、本地mail的使用方法 三、at /batch 四、cron 五、小结   一、前言 linux 中执行任务计划有三种命令:at ,batch ,cron.其中,at,batch 是一次性执行,而crontab,则是周期性执行; 作业执行完成后,会通过邮件通知给作业提交者;因此,以下就从邮件说起。 二、邮件服务 Centos ,默认会…

    Linux干货 2015-05-13
  • iptables/netfilter入门到进阶

    一、iptables/netfilter的简介: iptables:规则管理工具;该系统工具有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfi…

    Linux干货 2017-05-03