第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(內存)中的特定空間中,解壓,展開,而后把系統控制權移交給內核。現在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 21:16
下一篇 2017-01-03 22:23

相關推薦

  • 文件查找命令之locate、find簡析

    文件查找命令之locate、find簡析    在工作中經常會在文件系統上查找符合條件的文件,今天學習了文件查找命令,在此簡析locate和find兩個文件查找工具。 一、雜項知識整理 1、find的選項-user的實質是通過UID查找,如果兩個用戶的UID相同,其會顯示兩個用戶的所有符合條件的文件。 2、查找時-name "*…

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

    1. 列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [oracle@ocp ~]$ who root     pts/1        2016-06-26 …

    Linux干貨 2016-06-26
  • 14 用戶組和權限管理4

    14 用戶組和權限管理4 一、雜項知識整理 1、groups 查看用戶所屬組列表 [user1@localhost ~]$ groups user3 user1 2、文件屬性:-rw-r–r–. 1 root root 0 8月   3 07:56 cgroup.clone_children &…

    Linux干貨 2016-08-04
  • LINUX用戶建立秘鑰認證實現SHELL腳本管理,分發,部署

    環境介紹 SSH Server [root@vm1 ~]# ifconfig |awk '/broadcast/{print $2}' 192.168.99.241 SSH Client [root@vm2 ~]# ifconfig |awk '…

    Linux干貨 2017-01-05
  • 馬哥教育網絡班21期+第13周課程練習

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程) 1)共享名為shared,工作組為magedu; 2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名; 3)添加samba用戶gentoo,centos和u…

    Linux干貨 2016-10-24
  • 馬哥教育面授班22期:第一天課程練習

    Linux發展史:        1984年:Richard Stallman發起GNU項目和自由軟件基金會創建開源的UNIX實用工具版本        創建通用公共許可證(GPL)        1991年:Linux Torvalds發…

    Linux干貨 2017-05-16

評論列表(1條)

  • luoweiro
    luoweiro 2017-02-23 07:55

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

欧美性久久久久