一、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創建個軟連接: