一、CentOS啟動流程
POST –> Boot Sequence(BIOS) –> Boot Loader (MBR) –> Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init –>(/etc/inittab, /etc/init/*.conf) –> 設定運行級別 –> 系統初始化腳本 –> 關閉或啟動對應級別下的服務 –> 啟動終端
1.POST:加電自檢,檢查硬件設備是否存在
用于實現POST的代碼在主板上ROM(CMOS)芯片上
BIOS:Basic Input and Output System 基本上輸入輸出系統,固化在ROM芯片上
2.Boot Sequence:
按次序查找各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備;
bootloader:引導加載器,程序;
提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本; 把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而后把系統控制權移交給內核;
(1)Windows上引導加載器:ntloader
(2)Linux上引導加載器:
LILO:短小精悍的linux加載器,1024柱面之后無法加載,現在多用于安卓手機啟動
GRUB:Grand Uniform Bootloader統一引導加載器
GRUB 0.X(CentOS 5/6):Grub Legacy
GRUB 1.X(CentOS 7):Grub2,完全重寫,設計理念上很大改變
3.Kernel實現功能
kernel自身初始化,實現功能
—> 探測可識別到的所有硬件設備;
—> 加載硬件驅動程序;(有可能會借助于ramdisk加載驅動)
—> 以只讀方式掛載根文件系統;
—> 運行用戶空間的第一個應用程序:/sbin/init
4./sbin/init管理用戶空間服務進程
init程序的在不同CentOS版本上類型:
CentOS 5及以前:SysV init 配置文件:/etc/inittab
CentOS 6:Ubantu研發的Upstart 配置文件:/etc/inittab /etc/init/*.conf
CentOS 7:Systemd 配置文件:/usr/lib/systemd/system/, /etc/systemd/system/
二、為運行于虛擬機上的Centos 6 添加一塊新硬盤,提供兩個主分區;
1.為硬盤新建兩個主分區;并為其安裝Grub
echo “- - -” > /sys/class/scsi_host/hos0/scan #掃描新添加的硬盤
fdisk /dev/sdb #將新硬盤分區
mkfs.ext4 /dev/sdb1 #格式化分區
mkfs.ext4 /dev/sdb2
mount /dev/sdb2 /mnt/minilinux/ #第二個分區為rootfs
mkdir -v /mnt/minilinux/{etc,bin,sbin,lib,lib64,var,proc,usr,sys,boot,dev,tmp} #創建rootfs所需目錄
mount /dev/sdb1 /mnt/minilinux/boot/ #掛載第一分區為啟動分區
grub-install --root-directory=/mnt/minilinux /dev/sdb #安裝grub
[root@N5 桌面]# ls /mnt/minilinux/boot/grub/ #查看grub是否安裝成功
device.map iso9660_stage1_5 stage1 xfs_stage1_5
e2fs_stage1_5 jfs_stage1_5 stage2
fat_stage1_5 minix_stage1_5 ufs2_stage1_5
ffs_stage1_5 reiserfs_stage1_5 vstafs_stage1_5
2.為硬盤的第一個主分區提供內核和ramdisk文件;為第二個分區提供rootfs
cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/minilinux/boot/initramfs.img #復制ramdisk文件
cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/minilinux/boot/vmlinuz #復制kernel文件
3.為rootfs提供bash、ls、cat程序及所依賴的庫文件;
cp /bin/{bash,ls,cat} /mnt/minilinux/bin/ #復制程序主文件
cp $(ldd /bin/{bash,ls,cat} |grep -o "/.*\.[0-9]") /mnt/minilinux/lib64/ #復制程序依賴庫文件
[root@N5 桌面]# chroot /mnt/minilinux/ #chroot測試
bash-4.1# ls
bin boot dev etc lib lib64 lost+found proc sbin sys tmp usr var
bash-4.1# exit
4.為grub提供配置文件
vi /mnt/minilinux/boot/grub/grub.conf #創建grub配置文件,并寫入如下配置;
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Minilinux
root (hd0,0)
kernel /vmlinuz root=/dev/sda2 selinux=0 init=/bin/bash quiet
initrd /initramfs.img
注:如不在內核啟動參數里寫入selinux=0,可能會導致無法開機
5.將新的硬盤設為第一啟動項并能正常啟動目標主機
新建一個虛擬機并設置硬盤為現有硬盤
啟動后Grub正常
正常開機
三、制作一個Kickstart文件以及一個引導鏡像,描述其過程
1.制作Ks文件
yum -y install system-config-kickstart #安裝Kickstart程序
[root@N4 桌面]# system-config-kickstart #使用Kickstart圖形化工具
設置為http方式安裝系統
2.創建引導鏡像
[root@N4 桌面]# mkdir /root/miniboot
[root@N4 桌面]# cp -r /media/CentOS_6.5_Final/isolinux/ /root/miniboot/
[root@N4 桌面]# cp /root/ks.cfg /root/miniboot/
[root@N4 桌面]# vi /root/miniboot/isolinux/isolinux.cfg
#將第一個label修改為如下配置
label linux
menu label ^Auto Ks Network Install
menu default
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks.cfg
#創建iso鏡像文件
[root@N4 桌面]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 miniboot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso /root/miniboot/
3.新建一個虛擬機進行測試
可以看到第一項已經被改為Auto Ks Network Install,回車進入
已經開始自動安裝了
四、寫一個腳本
(1) 能接受四個參數:start, stop, restart, status
start: 輸出“starting 腳本名 finished.” …
(2) 其它任意參數,均報錯退出; #!/bin/bash
case $1 in
start)
echo "starting $0 finished"
;;
stop)
echo "stop $0 finished"
;;
restart)
echo "restart $0 finished"
;;
status)
echo "status"
;;
*)
echo "error"
exit 1
;;
esac
五、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
(1) 如果登錄了,則顯示用戶登錄,腳本終止;
(2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash
if [ $# -lt 1 ];then
echo "please input '$0 username'"
exit 1
fi
while true;do
if who | grep $1 &>/dev/null ;then
echo "user $1 is loggin"
exit 0
fi
sleep 3
done
六、寫一個腳本,顯示用戶選定要查看的信息;
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
#!/bin/bash
cat <<EOF
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
EOF
echo
read -p "please input your choice: " input
while true;do
case $input in
cpu)
lscpu
exit 0
;;
mem)
free -m
exit 0
;;
disk)
fdisk -l
exit 0
;;
quit)
exit 0
;;
*)
echo "argument error"
read -p "please input your choice: " input
;;
esac
done
七、寫一個腳本
(1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
(2) 提示用戶輸入一個用戶名或輸入“quit”退出;
當輸入的是用戶名,則調用函數顯示用戶信息;
當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
#!/bin/bash
userinfo () {
echo
grep $user /etc/passwd | awk -F: '{print "Uid is "$3" Shell is "$7}'
echo
}
while true;do
read -p "Please input username or quit: " user
if [ $user == "quit" ];then
exit 0
elif id $user &>/dev/null;then
userinfo
else
echo "user not exist,input agin"
fi
done
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87812