Linux Sysadmin–part4

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

A.POST加電自檢

主板在接通電源后,系統首先由POST程序來對內部各個設備進行檢查,自檢中如發現有錯誤,將按兩種情況處理:對于嚴重故障(致命性故障)則停機,此時由于各種初始化操作還沒完成,不能給出任何提示或信號;對于非嚴重故障則給出提示或聲音報警信號,等待用戶處理。

B.BIOS Sequence啟動引導階段

自檢通過之后,按次序查找各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備。一般電腦是按”F2″或”Del”鍵等等進入BIOS,在里面我們可以調整硬盤的啟動順序。找到第一個有引導程序的設備后,BIOS會找到設備中的MBR,讀取其中的Bootloader。

C.GRUP引導階段

這時候就可以看到我們的Centos系統了,但是一般都不需要操作,會自動啟動系統。其實我們也可以自己手動啟動系統的。

1).手動在grub命令行接口啟動系統:

grub> root (hd#,#)

grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE

grub> initrd /initramfs-VERSION-RELEASE.img

grub> boot

2).grub的命令行接口:

e: 編輯模式,用于編輯菜單;

c: 命令模式,交互式接口;

help: 獲取幫助列表

help KEYWORD: 詳細幫助信息

find (hd#,#)/PATH/TO/SOMEFILE:

root (hd#,#) 設定grup的根設備

kernel /PATH/TO/KERNEL_FILE: 設定本次啟動時用到的內核文件;額外還可以添加許多內核支持使用的cmdline參數;

例如:init=/path/to/init, selinux=0

initrd /PATH/TO/INITRAMFS_FILE: 設定為選定的內核提供額外文件的ramdisk;

boot: 引導啟動選定的內核;

3).配置文件:/boot/grub/grub.conf

配置項:

default=#: 設定默認啟動的菜單項;落單項(title)編號從0開始;

timeout=#:指定菜單項等待選項選擇的時長;

splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;

hiddenmenu:隱藏菜單;

password [–md5] STRING: 菜單編輯認證;

title TITLE:定義菜單項“標題”, 可出現多次;用來引導多個內核或者操作系統

root (hd#,#):grub查找stage2及kernel文件所在設備分區;為grub的“根”;

kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的內核

initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件;

password [–md5] STRING: 啟動選定的內核或操作系統時進行認證

D.kernel加載內核階段內核會自身初始化

探測可識別到的所有硬件設備;加載硬件驅動程序;(有可能會借助于ramdisk加載驅動)以只讀方式掛載根文件系統;運行用戶空間的第一個應用程序:/sbin/init5.init初始化階段內核加載完畢,會運行init程序,init進程起來后,系統啟動的控制權移交給init進程/sbin/init進程是所有進程的父進程,當init起來之后,它首先會讀取配置文件/etc/inittab,進行以下工作:

1).執行系統初始化腳本(/etc/rc.d/rc.sysinit),對系統進行基本的配置,以讀寫方式掛載根文件系統及其它文件系統,到此系統基本算運行起來了,后面需要進行運行級別的確定及相應服務的啟動;

2).確定啟動后進入的運行級別;

3).執行/etc/rc.d/rc,該文件定義了服務啟動的順序是先K后S,而具體的每個運行級別的服務狀態是放在/etc/rc.d/rcn.d(n=0~6)目錄下,所有的文件均鏈接至/etc/init.d下的相應文件。

4).有關key sequence的設置

5).有關UPS的腳本定義

6).啟動虛擬終端/sbin/mingetty

7).在運行級別5上運行X配置文件:/etc/inittab每行定義一種action以及與之對應的processid:runlevels:action:processid:一個任務的標識符;runlevels:在哪些級別啟動此任務;#,###,可以為空,表示所有級別;action:在什么條件下啟動此任務;process:任務;(腳本或程序)action:wait:等待切換至此任務所在的級別時執行一次;respawn:一旦此任務終止,就自動重新啟動之;initdefault:設定默認運行級別;此時,process省略;sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit腳本;K*:要停止的服務;K##*,優先級,數字越小,越是優先關閉;依賴的服務先關閉,而后關閉被依賴的;S*:要啟動的服務;S##*,優先級,數字越小,越是優先啟動;被依賴的服務先啟動,而依賴的服務后啟動;chkconfig命令:管控/etc/init.d/每個服務腳本在各級別下的啟動或關閉狀態;查看:chkconfig –list [name]添加:chkconfig –add name刪除:chkconfig –del name修改指定的鏈接類型:chkconfig [–level LEVELS] name–level LEVELS:指定要控制的級別;默認為2345;

init命令:

級別切換:init #

級別查看:who -r

注:正常級別下,最后啟動的一個服務S99local沒有鏈接至/etc/init.d下的某腳本,而是鏈接至了/etc/rc.d/rc.local (/etc/rc.local)腳本;因此,不便或不需寫為服務腳本的程序期望能開機自動運行時,直接放置于此腳本文件中即可。

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

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

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

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

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

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

~]# cat /proc/partitions

major minor? #blocks? name

8? ? ? 16? 83886080 sdb

8? ? ? 17? 10485760 sdb1

8? ? ? 18? ? ? ? ? 1 sdb2

8? ? ? 21? ? 5242880 sdb5

8? ? ? 22? ? 5242880 sdb6

8? ? ? 23? ? 5242880 sdb7

8? ? ? 24? ? 5242880 sdb8

8? ? ? 25? ? 5242880 sdb9

8? ? ? ? 0? 125829120 sda

8? ? ? ? 1? ? 1048576 sda1

8? ? ? ? 2? 124779520 sda2

8? ? ? 32? ? 5242880 sdc

8? ? ? 33? ? 2097152 sdc1

8? ? ? 34? ? 2097152 sdc2

8? ? ? 48? ? 5242880 sdd

8? ? ? 49? ? 5241856 sdd1

8? ? ? 64? ? 5242880 sde

8? ? ? 65? ? 5241856 sde1

11? ? ? ? 0? ? 8086528 sr0

253? ? ? ? 0? 52428800 dm-0

253? ? ? ? 1? ? 2097152 dm-1

253? ? ? ? 2? 70246400 dm-2

[root@ronny1 ~]# mke2fs -t ext4 /dev/sdc1

[root@ronny1 ~]# mke2fs -t ext4 /dev/sdc2

###準備boot目錄###

[root@ronny1 ~]# mkdir /mydata/boot

[root@ronny1 ~]# mount /dev/sdc1 /mydata/boot

[root@ronny1 ~]# ls /mydata/boot

lost+found

###安裝grub###

[root@ronny1 ~]# grub-install –root-directory=/mnt /dev/sdc

Probing devices to guess BIOS drives. This may take a long time.

Installation finished. No error reported.

[root@ronny1 ~]# ls /mydata/boot

grub? lost+found

###復制內核文件和initramfs###

[root@ronny1 ~]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mydata/boot/vmlinuz

[root@ronny1 ~]# cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mydata/boot/initramfs.img

###添加grub配置文件###

[root@ronny1 ~]# vim /mydata/boot/grub/grub.conf

default=0

timeout=5

title CentOS-HAN

root(hd0,0)

kernel /vmlinuz ro root=/dev/sdc2

initrd /initramfs.img

###此處: root配置rootfs根分區###

###準備根目錄結構和程序###

[root@ronny1 ~]# mkdir /mydata/sysroot

[root@ronny1 ~]# mount /dev/sdc2 /mydata/sysroot

[root@ronny1~]# cd /mydata/sysroot

[root@ronny1 sysroot]# mkdir -pv etc bin sbin lib lib64 dev proc sys tmp var usr home root mnt media

mkdir: created directory `etc’

mkdir: created directory `bin’

mkdir: created directory `sbin’

mkdir: created directory `lib’

mkdir: created directory `lib64′

mkdir: created directory `dev’

mkdir: created directory `proc’

mkdir: created directory `sys’

mkdir: created directory `tmp’

mkdir: created directory `var’

mkdir: created directory `usr’

mkdir: created directory `home’

mkdir: created directory `root’

mkdir: created directory `mnt’

mkdir: created directory `media’

[root@ronny1 sysroot]# cp /bin/bash /mydata/sysroot/bin/

[root@ronny1 sysroot]# ldd /bin/bash

linux-vdso.so.1 =>? (0x00007ffdb9371000)

libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003787200000)

libdl.so.2 => /lib64/libdl.so.2 (0x000000377f600000)

libc.so.6 => /lib64/libc.so.6 (0x000000377fa00000)

/lib64/ld-linux-x86-64.so.2 (0x000000377f200000)

[root@ronny1 sysroot]# cp /lib64/libtinfo.so.5 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/libdl.so.2 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/libc.so.6 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/ld-linux-x86-64.so.2 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /bin/ls /mydata/sysroot/bin/

[root@ronny1 ~]# ls /mydata/sysroot/bin

bash ?ls

[root@ronny1 sysroot]# cp /lib64/libselinux.so.1 /mydata/sysroot/lib64/? [root@ronny1 sysroot]# cp /lib64/libacl.so.1 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/libattr.so.1 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/libpcre.so.1 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/libpthread.so.0 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# ls /mydata/sysroot/lib64

ld-linux-x86-64.so.2? libc.so.6? ? libpthread.so.0

libacl.so.1? ? ? ? ? libdl.so.2? ? libselinux.so.1

libattr.so.1? ? ? ? ? libpcre.so.1? libtinfo.so.5

###測試命令###

[root@ronny1 sysroot]# chroot /mydata/sysroot

bash-4.1# ls

bin? etc? lib? ? lost+found? mnt? root? sys? usr

dev? home? lib64? media? ? ? proc? sbin? tmp? var

bash-4.1# exit

exit

[root@ronny1 sysroot]# sync

[root@ronny1 sysroot]# sync

[root@ronny1 sysroot]# sync

###修改init程序,指定init程序(bash)###

default=0

timeout=5

title CentOS-HAN

root(hd0,0)

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

initrd /initramfs.img

[root@ronny1 sysroot]# sync

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

1. 準備系統iso鏡像目錄(centos7.2)

[root@ronny1 ~]# mkdir /mnt/cdrom

[root@ronny1 ~]# mount /dev/sr0 /mnt/cdrom

mount: /dev/sr0 is write-protected, mounting read-only

[root@ronny1 ~]# mkdir /mnt/iso

[root@ronny1 ~]# cd /mnt/cdrom

[root@ronny1 cdrom]# cp -frav * /mnt/iso

[root@ronny1 cdrom]# cp .discinfo /mnt/iso

2. 定制kickstart

[root@ronny1 ~]# yum -y install system-config-kickstart

[root@ronny1 ~]# system-config-kickstart

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

[root@ronny1 ~]# ksvalidator ks.cfg

3. 整合鏡像文件和ks文件,并修改相關配置

[root@ronny1 ~]# cd /mnt/iso

[root@ronny1 iso]# vim isolinux/isolinux.cfg

定制啟動標簽 ,指定ks位置

label custom

menu label ^Install CentOS 7

menu default

kernel vmlinuz

append initrd=initrd.img inst.ks=cdrom:/isolinux/ks.cfg inst.stage2=hd:LABEL=CENTOS7 quiet

其中,需要把其它啟動項中的menu default去掉,加在上面的自定義啟動項中,這樣當你從光盤啟動時,才會默認選擇該項,并且有倒計時,由于默認的光盤倒計時時間太久了,為600秒,我們把timeout 600改成timeout 100,這樣默認就是10秒倒計時了。

拷貝ks文件到光盤根目錄

[root@ronny1 iso]# cp /root/ks.cfg isolinux/

[root@ronny1 iso]# ls isolinux/

boot.cat? grub.conf? isolinux.bin? ks.cfg? splash.png? upgrade.img? vmlinuz

boot.msg? initrd.img? isolinux.cfg? memtest? TRANS.TBL? vesamenu.c32

4. 重新打包ISO

[root@ronny1 iso]mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V “CentOS 7 x86_64 boot” -c isolinux/boot.cat -b isolinux/isolinux.bin -o? /root/boot.iso ?iso/

5. 加載新生成的鏡像,并啟動

使用Xshell 將生成的boot.iso ?copy到windows系統下,就可以用虛擬機引導啟動了。

四、寫一個腳本

(1) 能接受四個參數:start, stop, restart, status start: 輸出“starting 腳本名 finished.” …

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

#!/bin/bash

#description:

case $1 in

start)

echo “staring $0 finished”

;;

stop)

echo “stop $0 finished”

;;

restart)

echo “restart $0 finished”

;;

status)

echo “status? $0 finished”

;;

*)

echo “error”

exit 1

;;

esac

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

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

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

#!/bin/bash

#description:

while true; do

if who |grep $1 &> /dev/null;then

echo “$1 is login”

exit 0

fi

sleep 3

done

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

cpu) display cpu info

mem) display memory info

disk) display disk info

quit) quit

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

#!/bin/bash

#description:display cpu,memory,disk info

cat << EOF

cpu)display cpu info

mem)display memory info

disk)display disk info

quit)quit

EOF

read -p “please input your choice ” choice

while true;do

case $choice in

cpu)

lscpu

exit 0

;;

mem)

free -m

exit 0

;;

disk)

fdisk -l

exit 0

;;

quit)

echo “quit”

exit 0

;;

*)

echo “Error please input cpu,mem,disk,quit”

read -p “please input your choice ” choice

;;

esac

done

7、寫一個腳本

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

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

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

當用戶輸入quit,則退出腳本;

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

userinfo() {

if id “$username” &> /dev/null; then

grep “^$username\>” /etc/passwd | cut -d: -f3,7

else

echo “No such user.”

fi

}

read -p “please input one username or quit: ” username

while true;do

if [ $username == “quit” ];then

exit

else

userinfo

read -p “please input one username or quit: ” username

fi

done

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87723

(0)
N27_ronnyN27_ronny
上一篇 2017-10-10 09:56
下一篇 2017-10-10 15:02

相關推薦

  • Homework Week-2 Linux文件管理

    1、Linux上的文件管理命令都有哪些,其常用的使用方法及其相關示例演示。 文件管理工具:cp, mv, rm         cp命令:copy  源文件  目標文件                單源復制:cp [O…

    Linux干貨 2016-08-22
  • ip,ss,htop,vmstat,until,while,ping命令使用. N28

    第六周(2018-1.1 – 2018-1.7)

    2018-01-08
  • LVS 之 初識LVS

    LVS 之 初識LVS LVS 之 初識LVS 0x00 概述 0x01 LVS拓撲結構圖: lvs集群類型中的術語 : 0x02 lvs-type lvs-nat lvs-dr lvs-tun lvs-fullnat : 0x03 調度算法(scheduler) 0x00 概述 LVS : Linux Virtual Server lvs 工作在 IOS …

    2017-05-11
  • 如何自建系統內部 yum 倉庫

       準備:     a.素材:一套centos6.9和一套centos7.3的ISO鏡像光盤     環境:1.centos6.9和centos7.3,安裝好的系統各一套(土豪隨意 )     b.建立前請關閉防火墻,防止防火墻的干擾     &n…

    2017-08-05
  • Linux文件查找之find命令詳解

    文件查找 文件查找就是在在文件系統上查找符合條件的文件; 文件查找分為: 實時查找:遍歷所有文件進行條件匹配 非實時查找:根據所以查找 locate: 1、查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db 2、locate屬于非實時查找,依賴于事先構建的索引; 索引的構建是在系統較為空閑時自動進行(周期性任務);管理員手…

    Linux干貨 2016-08-18
  • N22-第八周作業

    第八周 1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。      集線器的主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點集中在以它為中心的節點上。它工作于OSI(開放系統互聯參考模型)參考模型第一層,即“物理層”。    &n…

    Linux干貨 2016-10-09
欧美性久久久久