一、linux系統啟動流程介紹
我們來了解下linux系統的啟動流程:
首先linux要通過POST自檢過程(BIOS)-->如果想要做多塊啟動盤的話,還需要在bios中選擇啟動磁盤-->引導MBR(bootloader引導程序)-->加載initrd文件-->執行進程init-->顯示歡迎界面;
需要注意:
在linux的啟動流程中,加載內核文件時還需要借助別外兩個文件:
1)initrd,CentOS5上是用內存模擬的磁盤設備;
2)initramfs,CentOS6上是用內存模擬的文件系統;
在啟程的流程中,init主要通過調用/etc/inittab這個配置文件,然後再去執行/etc/rc.d/rc.sysinit的系統初始化腳本.
二、制作的詳細步驟
在宿主機上添加塊新磁盤,並將其命名:1111111111.vmdk,這是宿主機上的第二塊磁盤(/dev/sdb),而等到時候掛載到目標主機的時候,因為那裡只有這宿主機上(/dev/sdb)的這一塊磁盤,所以在目標主機上應該是/dev/sda這個名字,這是必須要清楚的。弄清楚之後在來做其它操作,第一個分區500M,用來裝引導程序;第二個分區15G,用來裝根文件系統。格式化完成後要將其掛載,將/dev/sdb1掛載到/mnt/boot下,將、dev/sda2掛載到/mnt/sysroot下.
1).給目標機磁盤分區:
2).將分區格式化:
1 2[root@xiaomazi ~]
# mke2fs -t ext4 /dev/sdb1
[root@xiaomazi ~]
# mke2fs -t ext4 /dev/sdb2
3).創建掛載目錄並將其掛載至/mnt/sysroot、/mnt/boot目錄下:
4). 安裝grub至目標磁盤(注意:boot在哪裡就在哪裡安裝grub.):
5). 復制內核和initrd文件:
6). 創建目標主機的根文件系統:
7).接著去移植bash、ls等命令至目標主機的根文件系統:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35[root@xiaomazi sysroot]
# vim bincp.sh
#!/bin/bash
#
target=
/mnt/sysroot
clearCmd() {
ifwhich $cmd &>
/dev/null
;
then
cmdPath=`
which
--skip-
alias
$cmd`
else
echo
"No such command"
return5
fi
}
cmdCopy() {
cmdDir=`
dirname
$1`
[ -d ${target}${cmdDir} ] ||
mkdir
-p ${target}${cmdDir}
[ -f ${target}${1} ] ||
cp
$1 ${target}${cmdDir}
}
libCopy() {
forlib
in
`ldd $1 |
grep
-o
"/[^[:space:]]\{1,\}"
`;
do
libDir=`
dirname
$lib`
[ -d ${target}${libDir} ] ||
mkdir
-p ${target}${libDir}
[ -f ${target}${lib} ] ||
cp
$lib ${target}${libDir}
done
}
whiletrue;
do
read
-p
"Enter a command: "
cmd
if
[
"$cmd"
==
'quit'
] ;
then
echo
"quit"
exit0
fi
clearCmd $cmd
[$? -eq5 ] &&
continue
cmdCopy $cmdPath
libCopy $cmdPath
done
執行腳本:
1 2 3 4 5 6 7[root@xiaomazi ~]
# chmod +x bincp.sh 給執行權限
[root@xiaomazi ~]
# sh -n bincp.sh 測試語法錯誤
[root@xiaomazi ~]
# sh bincp.sh
Enter a
command
:
bash
給目標機一個
bash
命令
Enter a
command
: quit
quit
[root@xiaomazi ~]
#
8).使用tree /mnt/sysroot 命令,查看庫文件等文件是否存在:
I.執行bincp.sh腳本給目標機可執行命令:ls,cat,vi,cp,mv,mkdir,touch.
II.給bash創建個軟連接: