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配置文件還是不夠了解。