N25_第十周作業

1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)

POST –> BootSequence(BIOS) –>Bootloader(MBR) –>Kernel(ramdisk)–>rootfs(readonly)–>switchroot–>/sbin/init(設置默認運行級別–>運行系統初始化腳本,完成系統初始化–>關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務–>設置登陸終端[啟動圖形界面])

1)加電自檢(POST),BIOS啟動引導階段;

     在該過程中實現硬件的初始化以及查找啟動介質;

     從MBR中裝載啟動引導管理器(GRUB)并運行該啟動引導管理;

     MBR才512bytes,所以現在很多都用UEFI,GPT方式咯

2)GRUB(Grand Uniform Bootloader)啟動引導階段;

   功能:提供一個菜單,允許用戶要選擇啟動的不同系統或內核版本,把其內核加載到RAM中的特定空間,解壓、展開,讓后控制權移交給kernel

     裝載stage1

     裝載stage1.5

     裝載stage2(因為MBR很小,所以這里沒有限制哦)

     讀取/boot/grub.conf文件并顯示啟動菜單;

     裝載所選的kernel和initrd文件到內存中

  PS:LILO:支持柱面1024,現在基本都用在android手機,不用再PC機了

3)內核階段:

    探測可識別到所有硬件設備

    加載各種硬件驅動程序;(有可能會借助于randisk加載驅動)

    以只讀方式掛載根文件系統

    運行用戶空間的第一個應用程序:/sbin/init

 ps: ramdisk:Linux 內核特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問:

ramdisk –> ramfs

initramfs — dracut,mkinitrd (CenetOS6,7

4)init用戶空間初始化階段:

     啟動/sbin/init程序;

     運行rc.sysinit腳本,設置系統環境,啟動swap分區,檢查和掛載文件系統;

     讀取/etc/inittab文件,運行在/et/rc.d/rc<#>.d中定義的不同運行級別的服務初始化腳本;

     打開字符終端1-6號控制臺/打開圖形顯示管理,設置登錄

   

  init程序:

CentOS 5 : /ect/inittab

CentOS 6 :Upstart

  /etc/inittab:這個文件已廢

  /etc/init/*.conf,

CentOS 7 : systemd

  配置文件:/usr/lib/systemd/system/, /etc/systemd/system/


2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;

  (1) 為硬盤新建兩個主分區;并為其安裝grub;

  (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;

  (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;

  (4) 為grub提供配置文件;

  (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;

    功能:在其他系統上制作一個完整的grub引導系統,并且能跑起來??!

    在虛擬機中另外添加磁盤,fdisk /dev/sdb  # 創建三個分區,boot,/,swap

    ~]#partx -a /dev/sdb

    ~]#mke2fs -t ext4 /dev/sdb1

    ~]#mke2fs -t ext4 /dev/sdb3

    ~]#mkswap /dev/sdb2

    注意:這個在centos7沒有做成功,centos6可以的

    注意:安裝grub引導時,必須要指定boot的,不能用當前系統

    ~]#mkdir /mnt/boot

    ~]#mount /dev/sdb1  /mnt/boot/

    安裝grub

    ~]#grub-install –root-directory=/mnt  /dev/sdb   ;指定根在什么地方,不能寫到/mnt/boot

    ~]#cd /mnt/boot ;有了第一階段和第二階段的文件,還差,配置文件、內核和rootfs

    ~]#cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz

    ~]#cp /boot/initramfs-2.6.32-431.el6.x86_64.img   /mnt/boot/initramfs.img

    ~]#vim /mnt/boot/grub/grub.conf ; 注意,下列信息 是配置后單獨分系統使用的,所以,sda,不是sdb

    default=0

    timeout=5

    title CentOS (smile)

            root (hd0,0)

            kernel /vmlinuz ro root=/dev/sda3  selinux=0  init=/bin/bash

            initrd /initramfs.img

    mkdir /mnt/sysroot

    mount /dev/sdb3 /mnt/sysroot

    cd /mnt/sysroot

    mkdir -pv  etc bin sbin lib lib64 usr home tmp mnt var proc root

    cp /bin/bash  /mnt/sysroot/bin

    ldd /bin/bash | grep "/lib[^[:space:]]*"  ;獲取這個命令依賴的庫文件

    注意:這里調用我寫的一個腳本,復制命令以及相關的依賴庫文件

    

    #!/bin/bash

    #

    #Athor:smile

    #Date:2017-1-22

    #Filename: copy_Command_Lib.sh

    #Pragram:

    #

    #  Copy enter "command" and "libraries" file

    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

    export PATH

     

    #指定的根路徑

    dir_path=/mnt/sysroot/  

     

    # 傳遞給函數可執行命令,復制命令程序和依賴庫文件到指定目錄 ,并且取掉絕對路徑

    f_copy_com_lib() {

     command_path=$(which  –skip-alias "$1" ) #命令取絕對路徑

     temp_dir=${command_path#*/} # 取掉絕對路徑/

     temp_dir=${temp_dir%/*} # 取掉后面的文件文件名

     mkdir -p $dir_path$temp_dir # 創建/mnt/sysroot下對應的的目錄

     cp -rf $command_path  $dir_path$temp_dir

     

    #獲取命令路徑要注意兩個問題:第一個要避開which查出結果有alias別名問題, which COM | grep -v "alias" 除去別名

     #第一步,查出命令路徑,第二步,去掉alias,第三步,查出命令所以來的庫,第四步,獲取庫的準確路徑

     for lib_file in $( ldd $(which –skip-alias  "$1"  ) | grep -o "/lib[^[:space:]]*") ; do

     temp_dir=${lib_file#*/} #取掉絕對路徑 ${string#*word}

     temp_dir=${temp_dir%/*} #去掉基名

     mkdir -p $dir_path$temp_dir #創建一個庫文件的路徑

     cp -rf $lib_file   $dir_path$temp_dir  #復制庫文件到指定的目錄中

     #echo "${a_library[$i]}" #let i++

     echo "$lib_file"

     echo

     done

    }

     

    while true ; do

     

    cat << EOF

    +++++++++++++++++++++++++++++++++++++++++++++++++

    command)Please enter the system existing  command

    quit) quit script

    +++++++++++++++++++++++++++++++++++++++++++++++++

    EOF

     

     read -p "Please enter existing command:" v_command

     if [ $v_command == "quit" ] ; then

     break

     fi

     #如果輸入的不存在的命令,處理

     if ! ( which $v_command &>/dev/null ) ; then

     echo "ERROR:command not found!"

     continue # 進行下一次循環

     fi

     f_copy_com_lib  $v_command

     

    done

    cp ….

    chroot  /mnt/sysroot   ;切換根命令 ,進行測試

    exit

    sync   ;同步到磁盤

    第二步:

    創建新的虛擬機,加載配置好的分區

blob.png

如果需要啊添加虛擬機的話,就能就在grub中添加引導記錄
mount /dev/sdb1   /mnt/boot

blob.png

blob.png

blob.png

blob.png


3、制作一個kickstart文件以及一個引導鏡像。描述其過程。

制作kickstart文件,我目前我喜歡去安裝一個文件系統,等系統安裝好了,在/root/anaconda-ks.cfg下獲取,再來針對改一改(自己能力弱吧,也可以在網上獲取的,CentOS6和CentOS7產生的kickstart文件還是有點不一樣,不過CentOS應該可以兼容的)

kickstart文件的模板

命令段

指定各種安裝前配置選項,如鍵盤類型

必備命令

可選命令

程序段

指明要安裝程序包,以及包組,也包括不安裝的包

%packages ;程序包開始了

@group_name

package

-package  ;指定不要的程序包

程序包

%end

腳本段

%pre:安裝前腳本

運行環境:運行安裝介質微型linux系統環境

%end

%post:安裝后腳本

運行環境:安裝后的運行環境

%end

有多種方式自動話實現安裝,引導光盤中,http和ftp網絡上,

用光盤下的最小引導系統單獨做成關盤鏡像:

~]# cp -rf  /media/isolinux   /mnt/myiso

~]# cp   myks.cfg  /mnt/myiso

mnt]# mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS 6.5 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/

#創建時,把制作好的myks.cfg文件 放在myiso目錄下,并且和isolinux目錄同一個

怎加載ks.cfg文件

boot:linux ip=192.168.10.19  netmask=255.255.255.0  ks=http://192.168.10.100/ks.cfg  ;前面的ip地址是配置當前主機的地址

boot: linux ks=cdrom:/path/to/ks_file


kickstart文件中各個字段的解讀:

authconfig:認證方式配置

authconfig –enableshadow –passalgo=sha512

bootloader:定義bootloader的安裝位置及相關配置

bootloader –location=mbr –driveorder=sda –append="crashkernel=auto rhgb quiet"

keyboard us 

lang:語言類型

part:分區

part /boot –fstype=ext4 –size=500

part pv.008002  –size=51200

clearpart:清除分區

   clearpart –none –drives=sda;清空磁盤分區

 volgroup:創建卷組

    volgroup myvg  –pesize=4096 pv.008002

 

 logvol:創建邏輯卷

  logvol /home –fstype=ext4 –name=lv_home –vgname=myvg –size=4122


rootpw:管理員密碼

rootpw –iscrypted $llll

生成密碼的方式:

~]#openssl passwd -1 -salt `openssl rand -hex4` 

timezone:時區

timezone Asia/Shanghai

可選命令

install OR upgrade:安裝或升級

text:安裝界面類型,text為tui,默認是gui

network:配置網絡接口

network –noboot yes –device eth0 –bootproto dhcp  –noipv6 

防火墻:firewall  –server=ssh 

firewall –disabled

selinux :SELinux(內核安全機制

selinux  disabled

  halt,poweroff 或者reboot,安裝后的行為

  repo:指明安裝時使用的repository

  repo –name="CentOS" –baseurl=cdrom:sr0  –cost=100 ;cost是開銷,默認是1000,這里比較優先 

  url:指明安裝時使用的 repository ,但為url格式

  url –url=http://192.168.10.102/cobbler/ks_mirror/CentOS-7.0-x86_64/


4、寫一個腳本

  (1) 能接受四個參數:start, stop, restart, status

   start: 輸出“starting 腳本名 finished.”

   …

  (2) 其它任意參數,均報錯退出;

blob.png

5、寫一個腳本,判斷給定的用戶是否登錄了當前系統;

  (1) 如果登錄了,則顯示用戶登錄,腳本終止;

  (2) 每3秒鐘,查看一次用戶是否登錄;

blob.png

6、寫一個腳本,顯示用戶選定要查看的信息;

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

   非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;

blob.png

blob.png

7、寫一個腳本

  (1) 用函數實現返回一個用戶的和SHELL;用戶名通過參數傳遞而來;

  (2) 提示用戶輸入一個用戶名或輸入“quit”退出;

    當輸入的是用戶名,則調用函數顯示用戶信息;

    當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit: 

blob.png

blob.png

原創文章,作者:不忘初衷,如若轉載,請注明出處:http://www.www58058.com/67426

(0)
不忘初衷不忘初衷
上一篇 2017-02-14
下一篇 2017-02-14

相關推薦

  • 初識shell腳本編程

    shell腳本基礎 shell腳本是包含一些命令或聲明,并符合一定格式的文本文件 一般格式要求: 1.首行shebang機制 #!/bin/bash #!/bin/python #!/usr/bin/perl 2.注釋信息 以#開頭,可寫明腳本用途,作者,版本,時間等 3.腳本正文內容, 創建shell腳本 以bash為例 第一行定格#!/bin/bash …

    Linux干貨 2016-08-15
  • MySQL高可用架構之Galera Cluster

    MySQL高可用架構之Galera Cluster 1、實驗準備及拓撲 至少需要三個節點 node1 192.168.150.137 node2 192.168.150.138 node3 192.168.150.139 mariadb版本為mariadb的支持galera cluster的分支版本 MariaDB-Galera-server-5.5.46 …

    Linux干貨 2017-03-31
  • N22-第二周博客作業

    1、Linux系統上常見的文件管理類命令有哪些,其常用的使用方法及其示例演示。 常見的文件類管理命令:cp,rm,mv cp復制文件和目錄: -f, –force 強制執行 -i 顯示交互信息,默認cp 帶-i選項 -r,-R 遞歸復制目錄 -s 創建一個符號鏈接而不復制文件 -d 復制符號鏈接本身 cp aa.link qqq 相當于創建qqq…

    Linux干貨 2016-08-22
  • vim文本編輯器和sed用法匯總

    1. Vim是一個類似于Vi的著名的功能強大、高度可定制的文本編輯器,在Vi的基礎上改進 和增加了很多特性。 VIM是純粹的自由軟件。 2. vim的三種工作模式: (1) 編輯模式:也叫命令模式,可以執行個各種快捷鍵的命令 (2) 插入模式:在文本文件中可以直接輸入內容。 (3) 末行模式:紅帽官方叫擴展命令行模式vim內置命令行接口  注:vi…

    Linux干貨 2016-08-12
  • Linux上功能強大的文本編輯工具—vim

    vim–Vi Improved是一款全屏文本編輯器 vi: Visual Interface,文本編輯器 可見,vim是vi的升級版,所以我們當然要學習vim! vim的功能強大,自然命令、用法也會種類繁多,想要用的得心應手自然是需要長期的實際操作的,正所謂工欲善其事必先利其器,我們要想能夠在linux上從容應對繁多的文本編輯,無疑vim編輯器是…

    Linux干貨 2016-08-12
  • 高級文件系統管理之mdadm與lvm的創建

    ※配置配額系統 磁盤配額就是管理員可以為用戶所能使用的磁盤空間進行配額限制,每一用戶只能使用最大配額范圍內的磁盤空間,比如一些網盤就是基于這個功能來做的,分配給用戶固定的空間,花錢買,可以將空間設置的更大。 功能作用 磁盤配額可以限制指定賬戶能夠使用的磁盤空間,這樣可以避免因某個用戶的過度的使用磁盤空間造成其它用戶無法運行或工作甚至影響系統運行。這個功能不止…

    Linux干貨 2016-08-27

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-03-30 14:09

    非常非常詳細,很棒。

欧美性久久久久