linux系統裁剪


linux系統裁剪

1、簡介

  最近為了更加了解linux系統的啟動過程,通過對系統進行裁剪的的方式來了解整個啟動流程。這里記錄下過程。

2、環境介紹

  vmware12 + centos6.5 + xshell

3、具體步驟

  開始具體步驟前,確保已創建一台虛擬機,如圖所示。接下來開始具體步驟。

(1)添加磁盤

  為虛擬機添加磁盤用語存儲裁剪后的系統文件及其配置文件。磁盤准備1.1G即可

(2)對新添的磁盤分區格式化並掛載

  添加磁盤后,啟動虛擬機。執行fdisk -l命令查看當前磁盤信息。其中/dev/sdb既是所添加的磁盤,但現在還沒有分區。

  通過執行指令fdisk /dev/sdb進入分區命令行,如圖依次填寫指令,實現對磁盤的分區操作。

  按w保存分區信息后,再次執行fdisk -l命令查看分區信息。

  對/dev/sdb選定文件系統並格式化

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

  

  在/mnt/目錄下,新建文件夾boot和sysroot后,cd到mnt目錄下,執行掛載操作

mount /dev/sdb1 boot/
mount /dev/sdb2 sysroot/

  

(3)安裝引導程序到設備/dev/sdb1中,指定其為系統啟動盤

grub-install --root-directory=/mnt /dev/sdb1

(4)將內核及其依賴拷貝到指定目錄中

cp /boot/vmlinuz-2.6.32-431.el6.x86_64 boot/vmlinuz
cp /boot/initramfs-2.6.32-431.el6.x86_64.img boot/initramfs.img

(5)編寫grub.conf文件

  在目錄/mnt/boot/grub/下,新建grub.conf文件並填寫如下內容

default=0
timeout=5
title tiny linux
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
    initrd /initramfs.img

(6)配置裁剪系統所需的工具包

  編寫腳本,參考別人博客https://blog.csdn.net/kingolie/article/details/53428541,將文件保存為/root/script.sh

#!/bin/bash
#
target=/mnt/sysroot

clearCmd(){
if which $cmd &> /dev/null;then
cmdPath=`which --skip-alias $cmd`
        else
             echo "No such command"
            return 5
        fi

}

 cmdCopy(){
         cmdDir=`dirname $1`
        [ -d ${target}${cmdDir} ] || mkdir -p ${target}${cmdDir}
        [ -f ${target}${1} ] && echo -e "\033[31mThe ${1} exist!\033[0m" && return 5
        [ -f ${target}${1} ] || cp $1 ${target}${cmdDir}
        echo -e "\033[32mCopy ${1} success.\033[0m"
}

libCopy(){
        for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`;do
                libDir=`dirname $lib`
                [ -d ${target}${libDir} ] || mkdir -p ${target}${libDir}
                [ -f ${target}${lib} ] && echo -e "\033[31mThe ${lib} exist!\033[0m" && continue
                [ -f ${target}${lib} ] || cp $lib ${target}${libDir}
                echo -e "\033[32mCopy ${lib} success.\033[0m"
        done

}

while true;do
        read -p "Enter a command: " cmd
        if [ "$cmd" == "quit" ];then
                echo "quit"
                exit 0
        fi
        clearCmd $cmd
        [ $? -eq 5 ]&& continue

        cmdCopy $cmdPath
        libCopy $cmdPath
done

  運行腳本bash /root/script.sh,為裁剪后的系統添加指令極其依賴

bash
ls
cat
insmod
rmmod
mount
umount
ifconfig
ip
ping
route
chkconfig

  

 4、到此步驟系統已經裁剪完成,需要測試一下。

  通過vmware新建一個不帶系統的虛擬機,並添加之前1.1G的磁盤,在Centos6.5目錄下找到TinyLinux.vmdk文件即可

  添加完成之后,將圖上的8G磁盤移除,

  點擊啟動后,即可看到如下的畫面證明系統裁剪成功

5、配置Tiny Linux網絡接口

  將最小系統關機后,重新啟動centos6.5並把1.1G磁盤重新掛載到指定目錄中

mount /dev/sdb1 /mnt/boot/
mount /dev/sdb2 /mnt/sysroot/

(1)復制網卡模塊驅動到Tiny Linux系統中

網卡驅動所在路徑:

/lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/igb/igb.ko 

 在Tiny Linux的sysroot目錄下創建目錄

mkdir /mnt/sysroot/lib/modules

cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/igb/igb.ko /mnt/sysroot/lib/modules/

(2)為Tiny Linux配置/sbin/init啟動網絡服務和其他重要服務

vim /mnt/sysroot/sbin/init
chmod +x /mnt/sysroot/sbin/init

  init內容為

#!/bin/bash
#
echo -e "\tWelcome to \033[34mKingOlie Tiny \033[0mLinux"
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
insmod /lib/modules/igb.ko
[ $? -eq 0 ] && echo -e "Loaded igb module \033[60G[ \033[32mOK\033[0m ]"
ifconfig lo 127.0.0.0/8
ifconfig eth0 192.168.24.131/24       
mount -n -o remount,rw /dev/sda2 /
/bin/bash

(3)修改/mnt/boot/grub/grub.conf文件,將init由原來的bash修改為sbin下的init

default=0
timeout=5
title Tiny Linux
        root (hd0,0)
        kernel /vmlinuz ro root=/dev/sda2  quiet selinux=0 init=/sbin/init
        initrd /initramfs.img

6、完成以上步驟即可啟動Tiny Linux

  (1)通過執行ping命令實現網絡的接通,但只能訪問同網段的網絡,對於外網不能ping通。

  (2)利用route配置網絡路由,即可實現對外網的訪問。

7、總結

  本文主要對centos6.5系統進行裁剪,通過裁剪過程中涉及的步驟對linux啟動的整個過程有所了解,但對於grub配置文件還是不夠了解。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM