制作Linux啟動系統

先系統中有一塊空閑磁盤,將其劃分為兩個分區/dev/sdb1和/dev/sdb2,/dev/sdb1做/boot分區,/dev/sdb2做/分區
1 . 新分區格式化文件系統

mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2

2 . mkdir /app/boot -p 創建/dev/sdb1分區的掛載點
3 . mount /dev/sdb1 /app/boot 將sdb1分區掛載到/app/boot上
4 . grub-install --root-directory=/app /dev/sdb 安裝sdb磁盤的grub到/app/boot下,即為/sdb1磁盤分區上
5 . ls /app/boot grub文件已生成
6 . hexdump -c -n 512 /dev/sdb 查看/dev/sdb的512字節
7 . cd /app/boot
8 . cp /boot/vmlinuz-2.6.32-696.el6.x86_64 /boot/initramfs-2.6.32-696.el6.x86_64.img /app/boot 拷貝本系統的vmlinuz內核文件和initramfs虛擬磁盤文件到sdb1分區的/app/boot文件中
9 . vim /app/boot/grub/grub.conf

default=0
timeout=5
title danran
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 root=UUID=57dcc7f1-6df9-4748-b5c7-9c75a4d45f32  selinux=0 init=/bin/bash   \\/dev/sdb2的UUID,且為新系統的/分區,系統啟動不啟動/sbin/init進程,而是啟動/bin/bash為第一啟動進程        
initrd /initramfs-2.6.32-696.el6.x86_64.img

10 . mkdir /app/rootfs
11 . mount /dev/sdb2 /app/rootfs 掛載sdb磁盤的根分區/dev/sdb2到/app/rootfs
12 . cd /app/rootfs
13 . mkdir (root,bin,sbin,lib,lib64,var,usr,dev,etc,proc,sys,home) -pv
14 . vim /app/cmdcp.sh 編輯命令拷貝腳本

vim cmdcp.sh 
    
    #!bin/bash
    #ch_root="/app/sysroot"
    
    [ ! -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 -f $cmd_path ${ch_root}${bin_dir}
            return 0
        else
            echo "Command not found"
        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 ${cn_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
            [ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
        done
    }

    read -p "Please input copy path: " path
    ch_root=$path
    
    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

15 . bash /app/cmdcp.sh 拷貝以下命令到/app/rootfs/bin

Please input copy path: /app/rootfs/bin
Please input a command or quit: ls
Please input a command or quit: ifconfig
Please input a command or quit: cpp
Please input a command or quit: cp
Please input a command or quit: mv
Please input a command or quit: cat
Please input a command or quit: vi
Please input a command or quit: tree
Please input a command or quit: reboot
Please input a command or quit: bash
Please input a command or quit: ping
Please input a command or quit: lsblk
Please input a command or quit: ip
Please input a command or quit: insmod
Please input a command or quit: lsmod
Please input a command or quit: rmmod
Please input a command or quit: quit                        
  • 拷貝網卡驅動模塊

16 . ethtool -i eth0 查看eth0網卡的設備信息
17 . locate e1000.ko 查看e1000.ko驅動模塊的路徑信息
18 . cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /app/rootfs/lib 拷貝e1000.ko網卡模塊到/app/rootfs/lib文件
19 . 關閉系統,拔出/dev/sdb磁盤,然后插入沒有安裝系統的新主機上啟動即可
20 . 新主機掛載磁盤
21 . vim /sbin/init(開機自動運行)

#!/bin/bash
....
圖1
圖1

圖2
圖2

圖3
圖3

圖4
圖4

拷貝網卡設備驅動模塊
圖5
圖5

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容