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