準備一臺liunx的機器,我用的是liunx虛擬機
單獨加載一塊硬盤,我加載了一塊20G的硬盤,然后用fdisk /dev/sdb進行分區,sdb1用來作為將來系統的/boot分區,所有100M就可以了,sdb2用來作為將來系統的/分區,我給了10G。然后將兩個分區格式化為ext4系統。
mkdir /mnt/boot
mkdir /mnt/sdc2
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sdc2
4.執行grub-install命令,黃色箭頭是指將來要作為/ 的目錄,紅色箭頭是表示將grub相關文件寫入/sdb磁盤中(grub相關文件是用來引導啟動內核的關鍵文件)
5.拷貝內核文件和文件系統文件到/boot
6.編輯/mnt/boot/grub/grub.conf文件
第一行:出現列表時,背景圖片的路徑(圖片的制作方法請看我相關的文章)
第二行:內核的名字
第三行:將來從第一塊硬盤第一個扇區啟動
第四行:啟動內核文件,只讀,/目錄在/dev/sda2分區 此時selinux關閉 init程序讀取/bin/bash
第五行:根目錄可用前的一個臨時文件系統,initrd與內核綁定在一起,并作為內核引導過程的一部分進行加載。內核然后會將這個 initrd文件作為其兩階段引導過程的一部分來加載模塊,這樣才能稍后使用真正的文件系統,并掛載實際的根文件系統。
7.寫掛載文件
8.在/mnt/sdc2/下建根目錄中的文件夾
9.利用腳本拷一些命令到新的目錄下(在/mnt/sdc2下執行此命令)
腳本內容如下:
#!/bin/bash
ch_root="/mnt/sdc2"
[ ! -d $ch_root ] && mkdir $ch_root
bincopy() {
if which $1 &>/dev/null; then
local cmd_path=`which –skip-alias $1`
local bin_dir=`dirname $cmd_path`
[ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
[ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
return 0
else
echo "Command not found."
return 1
fi
}
ch_root="/mnt/sdc2"
[ ! -d $ch_root ] && mkdir $ch_root
bincopy() {
if which $1 &>/dev/null; then
local cmd_path=`which –skip-alias $1`
local bin_dir=`dirname $cmd_path`
[ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
[ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
return 0
else
echo "Command not found."
return 1
fi
}
libcopy() {
local lib_list=$(ldd `which –skip-alias $1` | grep -Eo '/[^[:space:]]+')
for loop in $lib_list;do
local lib_dir=`dirname $loop`
[ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
[ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
done
}
read -p "Please input a command or quit: " command
while [ "$command" != "quit" ];do
if bincopy $command ;then
libcopy $command
fi
read -p "Please input a command or quit: " command
done
10.我們此時可以將此塊硬盤取下,掛載到一個新的liunx系統中去,測試是否能正常啟動
新虛擬機
11.啟動新的虛擬機
此時,我們可以看到內核的名字是zebralinux,也就是我們在/mnt/boot/grub/grub.conf中title所對應的行,背景圖片也被換了,說明暫時系統是好的,可以繼續進行
因為我們制定init=/bin/bash,所有開機后執行的第一個程序就進入到bash中,在此界面中我們可以測試其他命令,有些命令應該可用,有些有依賴其他文件的命令或許此刻或用不了,我們只是做了個簡單linux。
我們第一次mount時,sda1沒有被掛載上。當我們掛載時,會報錯,但仍能被掛載上。之后,我們就可以進入到/下的目錄和/boot目錄中了
原創文章,作者:zebra930,如若轉載,請注明出處:http://www.www58058.com/46096