diy自己的linux

  1. 準備一臺liunx的機器,我用的是liunx虛擬機,Centos6.8的鏡像。

  2. 單獨加載一塊硬盤,我加載了一塊20G的硬盤,然后用fdisk /dev/sdb進行分區,sdb1用來作為將來系統的/boot分區,所有100M就可以了,sdb2用來作為將來系統的/分區,我給了10G。然后將兩個分區格式化為ext4系統。

  3. mkdir /mnt/boot

    mkdir /mnt/sdc2

    mount /dev/sdb1 /mnt/boot

    mount /dev/sdb2 /mnt/sdc2

    wKioL1fT4zWRWZhsAABMXri2n-Q444.jpg

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

wKioL1fT5YnwHc9RAAASxJCMQNQ554.jpg

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

wKiom1fT58Cxsv0CAAAaYZZ4cMM678.jpg

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

wKiom1fT6S-AnlWEAAAoy9TbgIo778.jpg

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

第二行:內核的名字

第三行:將來從第一塊硬盤第一個扇區啟動

第四行:啟動內核文件,只讀,/目錄在/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目錄中了

原創文章,作者:zebra930,如若轉載,請注明出處:http://www.www58058.com/45213

(0)
zebra930zebra930
上一篇 2016-09-13
下一篇 2016-09-13

相關推薦

  • shell編程之條件判斷和find查詢

    使用read 來把輸入值分配給一個或多個shell 變量: -p 指定要顯示的提示 -t TIMEOUT read 從標準輸入中讀取值,給每個單詞分配一個變量 所有剩余單詞都被分配給最后一個變量 read -p “Enter a filename: “ FILE   條件選擇if語句  多分支 if  CONDITION1 ; …

    Linux干貨 2016-08-18
  • M20 – 1- 第二周(2):課堂練習與作業

    課堂練習: 1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件和目錄 [root@centos6 ~]# ls /var/l*[[:digit:]]*[[:lower:]] ls: cannot access /var/l*[[:digit:]]*[[:lower:…

    Linux干貨 2016-08-02
  • ?grub應用之提供單獨bash系統

    grub應用之提供單獨bash系統     1.掛載新硬盤,并創建好三個分區,第一分區為boot分區,第三分區為根分區              2.創建掛載目錄,并掛boot分區   &n…

    Linux干貨 2017-01-13
  • Linux中的shell腳本編程——基礎篇

    概述:       shell腳本在Linux系統管理員的運維工作中非常重要。shell腳本能夠幫助我們很方便的管理服務器,因為我們可以指定一個任務計劃,定時的去執行某一個腳本以滿足我們的需求。本篇將從編程基礎、腳本基本格式、變量、運算、條件測試這幾個方面詳細介紹shell腳本編程的基礎內容,也是我們必須要掌握熟練的內容。 一、…

    Linux干貨 2016-08-15
  • CentOS6主機啟動流程

    CentOS6主機啟動流程 流程 一臺Linux主機從開機到登錄界面提示輸入賬號密碼的時間中進行了好多動作,了解這些動作有助于了解Linux系統的過程,并能夠對開機過程出現的故障進行troubleshooting。 主機啟動后最先運行的是主板階段,一旦電源開啟,主板進行POST加點自檢動作,自檢完成后無故障,主板會讀取BIOS信息,根據BIOS信息中的Boo…

    Linux干貨 2017-05-13
  • 淺談DNS基本原理以及實現方法(一)

     DNS(Domain Name System,域名系統),是目前互聯網上最不可或缺的服務器之一,我們在互聯網從訪問一個網站,到發送一封電子郵件,再到定位域中的域控制器,無時無刻不再使用著DNS為我們提供的服務,那為什么我們會需要這樣一個服務那?帶著這樣一個疑問讓我們先來認識一下什么是DNS吧  DNS最核心的工作就是域名解析,也就是把計…

    Linux干貨 2015-12-15
欧美性久久久久