天天看點

linux系統裁剪

linux系統裁剪

1、簡介

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

2、環境介紹

  vmware12 + centos6.5 + xshell

3、具體步驟

  開始具體步驟前,確定已建立一台虛拟機,如圖所示。接下來開始具體步驟。

linux系統裁剪

(1)添加磁盤

  為虛拟機添加磁盤用語存儲裁剪後的系統檔案及其配置檔案。磁盤準備1.1G即可

linux系統裁剪

(2)對新添的磁盤分區格式化并挂載

  添加磁盤後,啟動虛拟機。執行fdisk -l指令檢視目前磁盤資訊。其中/dev/sdb既是所添加的磁盤,但現在還沒有分區。

linux系統裁剪
  通過執行指令fdisk /dev/sdb進入分區指令行,如圖依次填寫指令,實作對磁盤的分區操作。
linux系統裁剪
linux系統裁剪
  按w儲存分區資訊後,再次執行fdisk -l指令檢視分區資訊。
linux系統裁剪
  對/dev/sdb標明檔案系統并格式化

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

  

linux系統裁剪
linux系統裁剪

  在/mnt/目錄下,建立檔案夾boot和sysroot後,cd到mnt目錄下,執行挂載操作

mount /dev/sdb1 boot/
mount /dev/sdb2 sysroot/
      
linux系統裁剪

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

grub-install --root-directory=/mnt /dev/sdb1      
linux系統裁剪

(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      
linux系統裁剪

(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檔案即可

linux系統裁剪

  添加完成之後,将圖上的8G磁盤移除,

linux系統裁剪

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

linux系統裁剪

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通。

linux系統裁剪

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

linux系統裁剪

7、總結

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