diy本身的linux

  1. 準備一臺liunx的機器,我用的是liunx虛擬機linux

  2. 單獨加載一塊硬盤,我加載了一塊20G的硬盤,而後用fdisk /dev/sdb進行分區,sdb1用來做爲未來系統的/boot分區,全部100M就能夠了,sdb2用來做爲未來系統的/分區,我給了10G。而後將兩個分區格式化爲ext4系統。bash

  3. mkdir /mnt/bootide

    mkdir /mnt/sdc2oop

    mount /dev/sdb1 /mnt/boot測試

    mount /dev/sdb2 /mnt/sdc2ui

    wKioL1fT4zWRWZhsAABMXri2n-Q444.jpg

4.執行grub-install命令,×××箭頭是指未來要做爲/ 的目錄,紅色箭頭是表示將grub相關文件寫入/sdb磁盤中(grub相關文件是用來引導啓動內核的關鍵文件)spa

wKioL1fT5YnwHc9RAAASxJCMQNQ554.jpg

5.拷貝內核文件和文件系統文件到/bootblog

wKiom1fT58Cxsv0CAAAaYZZ4cMM678.jpg

6.編輯/mnt/boot/grub/grub.conf文件圖片

wKiom1fT6S-AnlWEAAAoy9TbgIo778.jpg

第一行:出現列表時,背景圖片的路徑(圖片的製做方法請看我相關的文章)ip

第二行:內核的名字

第三行:未來從第一塊硬盤第一個扇區啓動

第四行:啓動內核文件,只讀,/目錄在/dev/sda2分區 此時selinux關閉 init程序讀取/bin/bash

第五行:根目錄可用前的一個臨時文件系統,initrd與內核綁定在一塊兒,並做爲內核引導過程的一部分進行加載。內核而後會將這個 initrd文件做爲其兩階段引導過程的一部分來加載模塊,這樣才能稍後使用真正的文件系統,並掛載實際的根文件系統。

7.寫掛載文件

wKiom1fT7QjC6H5IAAAbvfupWqs499.jpg

8.在/mnt/sdc2/下建根目錄中的文件夾

wKioL1fT8Z6C9lbvAAAcynQndHg665.jpg

9.利用腳本拷一些命令到新的目錄下(在/mnt/sdc2下執行此命令)

wKioL1fT8pmjB_ewAABi41IjshU563.jpg

腳本內容以下:


#!/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系統中去,測試是否能正常啓動

wKiom1fT86LSN4LHAACkVmE8E00759.jpg

新虛擬機

wKioL1fT9FTASiA3AAB7G9-yGXg617.jpg

11.啓動新的虛擬機

wKiom1fT9LTzV6DbAADcGxP6Tkk264.jpg

此時,咱們能夠看到內核的名字是zebralinux,也就是咱們在/mnt/boot/grub/grub.conf中title所對應的行,背景圖片也被換了,說明暫時系統是好的,能夠繼續進行

wKiom1fT9ZPAaCWIAAAcuaLhJAg278.jpg

由於咱們制定init=/bin/bash,全部開機後執行的第一個程序就進入到bash中,在此界面中咱們能夠測試其餘命令,有些命令應該可用,有些有依賴其餘文件的命令或許此刻或用不了,咱們只是作了個簡單linux。

wKioL1fT9xbgVaO9AADLtiIkPGc875.jpg咱們第一次mount時,sda1沒有被掛載上。當咱們掛載時,會報錯,但仍能被掛載上。以後,咱們就能夠進入到/下的目錄和/boot目錄中了

相關文章
相關標籤/搜索