Linux系统裁剪

在虚拟机上完成的
1,新增虚拟磁盘,对磁盘分区格式化,并挂载

fdisk /dev/sdd
mkfs.ext4 /dev/sdd1
mkfs.ext4 /dev/sdd2
mkdir /mnt/{boot,sysroot}
mount /dev/sdd1 /mnt/boot
mount /dev/sdd2 /mnt/sysroot

2,创建根文件系统,移植需要的命令,函数库,内核模块

cd /mnt/sysroot
mkdir -pv etc boot usr/{bin,lib,lib64} lib/modules lib64 proc sys bin sbin var dev

移植命令脚本,移植命令就要移植相应的函数库

#!/bin/bash

while true;do
read -p "Enter a command: " comm
[ $comm == quit ]&&exit
commd=`which --skip-alias $comm`
dircommd=`dirname $commd`
if ! [ -e /mnt/sysroot$dircommd ];then
       mkdir -p /mnt/sysroot$dircommd
       cp $commd /mnt/sysroot$dircommd
       else
       cp $commd /mnt/sysroot$dircommd
fi
for i in `ldd $commd|egrep -o "/[^[:space:]]+"`;do
       if ! [ -e /mnt/sysroot`dirname $i` ];then
       mkdir -p /mnt/sysroot`dirname $i`
       cp $i /mnt/sysroot`dirname $i`
       else
       cp $i /mnt/sysroot`dirname $i`
       fi
done
done
~              
移植需要的内核模块

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

3,安装grub

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

4,准备内核和initrd文件

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

5,创建grub配置文件

vim /mnt/boot/grub/grub.conf

6,创建sbin/init

vim /mnt/sysroot/sbin/init
chmod a+x /mnt/sysroot/sbin/init;sync;sync

然后把磁盘(/dev/sdd)放到一个新的虚拟机上

然后就可以跑起来了