第10周作業(上)

第10周作業

1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)。
CentOS系統啟動詳細的過程如下(以CentOS7為例):

  • 加電自檢(POST)
    按下電源開關,BIOS系統隨即開始加電自檢,檢查CPU、內存、主板及各接口、硬盤、鍵盤、光驅等,檢測它們的好壞。

  • 讀取啟動順序
    檢查完成后,BIOS會根據預先設定好的啟動順序去挨個尋找可引導設備,它找到的第一個有引導程序的設備成為本次啟動的引導設備。

  • 主引導記錄(MBR)
    BIOS程序會自動去讀取可引導設備中具有引導作用的代碼部分,即通常所說的主引導記錄(MBR),共512字節大小,由446字節的bootloader,64字節的分區表,2字節的結束標志組成。

    • GRUB
      現主流的GRUB版本為grub 1.x,即grub2。它的代碼不能完全裝于MBR扇區中,所以將它分為兩段,一起來完成系統的引導工作。工作過程分以以下幾個階段:

    • stage1
      這一階段的代碼位于MBR中,BIOS讀取MBR中的boogloader代碼,這段代碼不包含文件系統的驅動,但它可以識別到stage2位于哪個分區中,但因為不包含文件系統的驅動所以stage1無法直接訪問stage2所在的分區,因此就有了stage1_5,以構建stage1和stage2通信的橋梁。

    • stage1_5
      這個階段的代碼位于MBR后的63個扇區之中,它的作用是提供各種文件系統的驅動文件,以便stage1中的程度可以和stage2所在的分區通信進而找到stage2所存儲的內核文件和rootfs的文件系統驅動。

    • stage2
      因為此時GRUB已可識別stage2所在的文件系統,所以這個階段它會找到grub的配置文件(/boot/grub2/grub.cfg),并根據其中的設定給用戶提供一個可選擇的菜單,用于選擇想要啟動的系統或內核版本。同時stage2即/boot/目錄下還提供了Linux系統內核文件(vmlinuz文件)和虛擬文件系統文件(initramfs)等其它核心文件。
      待用戶選擇了相應的系統或等待超時后,系統啟動進入下一個階段。

    • Bootloader
      提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本,把用戶選定的內核裝載到RAM(內存)中的特定空間中,解壓,展開,而后把系統控制權移交給內核?,F在Linux中流行的bootloader程序是grub,它的工作過程是這樣的:

  • 系統內核加載
    在用戶選擇了要啟動的系統后,這時bootloader程序會將/boot下的內核文件、虛擬文件系統文件加載至內存中解壓并運行,至此bootloader的工作已圓滿完成。接下來的工作將由Linux內核來完成。
    內核首先探測所有可識別的硬件設備,然后加載驅動,有的設備驅動可能需要借助虛擬根文件系統來裝載。
    由于現在很多硬件驅動都是以模塊的形式存在的,如usb,raid,lvm,scsi,sata。此時的內核還不具備驅動這些設備的能力。(正如我們經??吹礁鱈inux發行版它們的/boot分區文件系統不會是lvm或raid,大多為單獨的一個分區)這時就需要用到initramfs這個虛擬的根文件系統,這樣就可以借助這個虛擬的根文件系統來加載各模塊驅動,進而可以掛載各設備,包括磁盤上真實的根文件系統。此階段使用的是只讀掛載。

  • 啟動systemd
    在系統核心將硬件識別及驅動加載完成后主機硬件已經準備就緒。此時內核會主動啟動系統第一個程序:systemd。systemd的主要功能是完成以下任務:

    • 掛載/etc/fstab里所有的文件系統(local-fs.target+swap.target)

    • 偵測硬件,加載所需要的核心模塊(sysinit.target)

    • 加載主要的外圍硬件設備驅動程序和防火墻相關任務(basic.target)

    • 加載multi-user.target相關的服務,如tty登錄界面等

    • 加載圖形界面相關的服務

當登錄終端tty或者圖形界面加載完成以后,至此,整個系統的啟動工作即已完成。

2、為運行于虛擬機上的CentOS 6添加一塊新硬盤,提供兩個主分區。
(1) 為硬盤新建兩個主分區;并為其安裝grub。
(2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs。
(3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件。
(4) 為grub提供配置文件。
(5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機。

這題糾結了很久,浪費了大量的時間,做了幾十遍,但總是會碰到提示according mtab /dev/sda2 已經掛載的錯誤提示,導致系統不能正常啟動,找了很多同學做的作業,以及搜索錯誤提示信息,但都沒個準確的說法和解決辦法。但唯一做成的一次其步驟如下,和馬哥視頻中的也只是個別步驟的順序不同。(總結一點:當理論還不足以撐起隨便折騰的欲望時,請使用前人的方法,完全照抄然后加以熟練。)

新增硬盤為系統中識別為sdb,相關步驟如下:

fdisk /dev/sdb #然后創建兩個主分區(sdb1,sdb2,sdb3),并且創建一個swap分區,因為宿主機有swap分區,強烈建議和宿主環境保持一致
mke2fs -t ext4 /dev/sdb1   #給新分區創建ext4文件系統
mke2fs -t   ext4 /dev/sdb3 #給新分區創建ext4文件系統
mkswap /dev/sdb2 #啟用swap分區
mkdir /mnt/boot     #給新分區創建掛載點
mkdir /mnt/sysroot  #給新分區創建掛載點
mount /dev/sdb1 /mnt/boot  #將新分區掛載至/mnt/boot,作用類似于/boot分區
mount /dev/sdb2 /mnt/sysroot # 將新分區掛載至/mnt/sysroot,用于后面構建新系統的rootfs
grub-install --root-directory=/mnt /dev/sdb  #root-directory指定根所在的位置,不要指定/mnt/boot,gurb會自動去找指定路徑下的boot目錄的,/dev/sdb 用于指定想將grub安裝到哪個設備上。
cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/  #為新硬盤第一分區提供內核文件
 cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot/  #為新硬盤第一分區提供ramdisk文件
 mkdir -pv /mnt/sysroot/{bin,sbin,lib,lib64,etc,home,root,media,mnt,dev,tmp} #為第二分區提供rootfs
 cp /bin/{bash,ls,cat} /mnt/sysroot/bin  #將/bin目錄下的bash,ls,cat程序復制到/mnt/sysroot/bin目錄中
cp `ldd /bin/{bash,ls,cat} | grep -o "/lib64/.*[[:space:]]" | sort -u` /mnt/sysroot/lib64   #將bash,ls,cat所依賴的庫文件一同復制到新rootfs中的lib64目錄中
cp /boot/grub/splash.xpm.gz /mnt/boot/grub/  #提供開機畫面背景圖片(此處使用原系統中的圖片)
cp /etc/grub.conf /mnt/boot/grub/  #給新的grub提供配置文件
vim /mnt/boot/grub/grub.conf   #編輯新硬盤中的grub配置文件 ,修改kernel處的root=/dev/sda2,硬盤編號為BIOS識別的順序,第一個識別到的編號為a,這里這塊硬盤在此系統中實際為sdb,但把它拿到一臺沒有硬盤的機器上去,它就成了sda。數字2表示為硬盤上的第2個分區,然后保存退出,關機,將硬盤卸載,然后以此硬盤新建虛擬機,以驗證配置結果。以下為grub.conf文件需要發動的配置的說明:
title CentOS 6 (2.6.32-642.el6.x86_64) Test_OS   #在此處添加了"Test_OS"
        root (hd0,0)   #只有一塊硬盤的情況下,其編號即為0,這里的root實際是指grub的根,是指grub stage2和kernel文件所在的分區,我們將grub stage2和kernel文件放置在了新增硬盤的第一分區,在grub中編號從0開始。
        kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda3 selinux=0 init
=/bin/bash  #此處指定文件系統的根所在的位置,在Linux系統中分區編號是從開始的,我們把根文件系統建立在這塊硬盤上的第3個分區上了,并同時關閉了selinux,將指定init程序為/bin/bash
        initrd /initramfs-2.6.32-642.el6.x86_64.img  #此處指定虛擬文件系統文件的位置。
最后新建虛擬機并指定使用這塊新增的虛擬磁盤,然后啟動虛擬機,即可進入系統,并以bash程序初始化系統,只有ls和cat指令以及bash內置指令可以使用

3、制作一個kickstart文件以及一個引導鏡像。描述其過程。
可以使用系統安裝過程中生成的文件(/root/anaconda-ks.cfg)加以修改或者使用圖形化的kickstart工具來完成kickstart文件的制作。圖形化kickstart工具需要先安裝system-config-kickstart軟件包。以下是使用圖形化工具生成的一份文件,全部選項配置完成以后,將文件保存為ks.cfg了,詳細內容如下:

[root@localhost ~]# more ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled  #關閉防火墻
# Install OS instead of upgrade
install   #指定安裝類型為全新安裝
# Use CDROM installation media
cdrom  #安裝方式配置為從光驅安裝
# Root password
rootpw --iscrypted $1$2xS8GSnM$IHzs2YYbCRGvcJmNxQ51W0  #加密后的root賬號密碼,配置時輸入明文密碼,并啟用加密選項
# System authorization information
auth  --useshadow  --passalgo=sha512  #指定root密碼加密方式
# Use graphical install
graphical  #使用圖形化方式進行安裝
firstboot --disable   #第一次啟動的時候禁用代理
# System keyboard
keyboard us  #設定鍵盤為美式鍵盤
# System language
lang en_US #設定系統語言為美式英語
# SELinux configuration
selinux --disabled #關閉selinux
# Installation logging level
logging --level=info  #設定anaconda日志級別
# Reboot after installation
reboot  #設定安裝完成后系統自動重啟
# System timezone
timezone  Asia/Shanghai  #設定系統時區為上海
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on  #設定網卡開機自啟,并使用dhcp獲取ip
# System bootloader configuration
bootloader --location=mbr  #設定bootloader的安裝位置,安裝到mbr中
# Partition clearing information
clearpart --all  #設定清理磁盤上所有分區信息
# Disk partitioning information
part / --fstype="ext4" --size=20000    #按需要自定義分區
part /boot --fstype="ext4" --size=500
part swap --fstype="swap" --size=2000

%packages      #選擇要安裝的軟件包
@chinese-support
@desktop-platform-devel
@development
@eclipse
@emacs
@hardware-monitoring
@internet-browser
@kde-desktop
@network-tools
@perl-runtime
@ruby-runtime
@x11

%end

bash    56

制作引導鏡像:
先將光盤鏡像文件掛載至光驅,然后將除Packages和repodata之外的目錄全部copy至某目錄下,如/tmp/myiso;
然后使用如下指令生成名為boot.iso的引導鏡像,放置于/boot目錄下。

mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.catlog -o /root/boot.iso /tmp/myiso/

原創文章,作者:N24_lantian,如若轉載,請注明出處:http://www.www58058.com/65727

(0)
N24_lantianN24_lantian
上一篇 2017-01-03
下一篇 2017-01-03

相關推薦

  • 網絡配置詳解(一)

    Linux網絡屬性配置      ifcfg命令家族:ifconfig, route, netstat      ifconfig命令:      ifconfig [INTERFACE]      # ifconfig -a 顯示所有接口…

    Linux干貨 2017-01-02
  • 文本處理工具-awk

    文本處理工具awk awk的名字由來:創始人Aho, Weinberger, Kernighan三人的首字母 有多種版本:New awk(nawk),GNU awk(gawk)  一.gawk   模式掃描和處理語言   基本用法: awk [options] ‘program’ var=value…

    Linux干貨 2016-11-29
  • MariaDB安裝與配置

    MariaDB安裝與配置  本文是基于CentOS7.2系統來進行mariadb的安裝與配置,安裝前請關閉selinux和在iptables規則中開放3306端口,在此次我們直接清空了iptables規則。 Iptables –F vim /etc/selinux/config #SELINUX=enforcing ##注釋掉此項## #SELIN…

    Linux干貨 2017-02-18
  • mariadb基礎應用

    mariadb基礎應用 一、 前言 MariaDB is one of the most popular database servers in the world. It’s made by the original developers of MySQL and guaranteed to stay open source. Notable users …

    Linux干貨 2016-12-16
  • 腳本練習

      1、寫一個腳本,使用ping命令探測10.1.8.1-10.1.8.10之間所有主機的在線狀態,在線的主機使用綠色顯示,不在線的主機使用紅色顯示。     #!/bin/bash     #Test host whether onlin…

    Linux干貨 2016-12-18
  • 馬哥教育網絡班21期+第1周課程練習

    一、計算機原理及組成部分 數學家馮·諾依曼,按不同功能把計算機分成了五大組成部分:運算器、控制器、存儲器、輸入設備、輸入出設備。 現代計算機把運算器和控制器集成在一起,稱為CPU,主要進行各種數據運算和對各種命令進行解釋;存儲器被分為兩類,一類以內存為代表的隨機存儲設備,主要特點是速度快,容量有限,斷電后信息就消失,另一類是硬盤為代表的外部存儲設備,容量大,…

    Linux干貨 2016-06-26

評論列表(1條)

  • luoweiro
    luoweiro 2017-02-23 07:55

    對于開機啟動流程其實是一個非常重要的知識,尤其是在面試過程中經常會被問到,所以這部分希望能通過自己的理解圖解出來。

欧美性久久久久