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.www58058.com/69879

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

相關推薦

  • 采用二進制包安裝mysql

    本文是在CentOS7系統平臺下安裝Mysql5.6.26版本數據庫的操作說明,如有錯誤,請指正。 系統平臺:CentOS-7-x86_64    數據庫版本:mysql-5.6.26   Mysql鏡像文件下載地址:http://dev.mysql.com/downloads/mirrors.html 本次演示的Mysql安裝…

    Linux干貨 2017-05-04
  • raid5創建

    創建分區并改類型 創建raid5   創建把文件系統 生成配置文件    

    2017-12-17
  • Linux DNS服務系列之主從復制、子域授權和轉發、view配置詳解

    前言 上文我們講解了DNS服務的原理及正反向解析配置,相信大家對DNS服務已經有了初步了解。接下來,讓我們進一步了解DNS服務的其它功能,本文將詳解主從復制、子域授權和轉發以及view的相關配置。 主從服務器配置 主從服務器關系 如果公司內DNS服務器負載過重或者為了實現冗余這一類功能就需要用到一個備份DNS服務器,備份服務器和主DNS服務器就形成了主從關系…

    Linux干貨 2015-04-13
  • 馬哥教育網絡班22期+第1周課程練習

    week1作業: 1.描述計算機的組成及其功能。    計算機的組成:    CPU:控制器、運算器、寄存器、CPU緩存(RAM,一級、二級、三級緩存)    控制器(Control):是整個計算機的中樞神經,其功能是對程序規 定的控制信息進行解釋,根據其要求進行控制,…

    Linux干貨 2016-08-15
  • 馬哥教育網絡班21期-第七周課程練習

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@localhost ~…

    Linux干貨 2016-08-29
  • shell中的位置參數變量

    要了解位置變量,首先要知道什么是變量?  變量就是讓某一個特定的字符串來代表不固定的內容,簡單理解就是用一個簡單的“字眼”來替代另一個比較復雜或者容易變動的數據。 而什么又是位置變量呢?  位置變量就是bash將傳遞給腳本的參數,按照位置不同,保存在不同的位置變量中,以便于腳本調用這些變量。 位置參數變量: $1, $2, ……

    Linux干貨 2016-08-12
欧美性久久久久