分享

Linux系统裁剪(2)之Linux系统裁剪

 qweertt4747 2017-02-07
 

 


1.这里使用交叉编译的思想,我在Redhat6.4上添加一个硬盘,将该硬盘分区以及安装好MBR之后,再将其挂载到另一个新建的虚拟机上,注意该虚拟机在创建时我只使用了这一个处理好的硬盘。


2.怎么添加新硬盘就不赘述了,现在默认以及添加好了,下面要执行的步骤是分区、格式化、挂载、安装grub、创建“根分区”、挂载至新系统。


3.给sdd(我的虚拟机有四块硬盘,这个是第四块)硬盘分区,然后格式化,我划分了两个分区,一个100M用于boot分区,一个1G用来模拟根分区,如下:



分区以后,查看一下,应该如下所示:



4.格式化硬盘



5.在宿主机上创建两个目录,用于挂载这两个分区。分别是/mnt/boot和/mnt/sysroot



6.为精剪的小系统创建根目录下的相关文件,这里我使用一个简单的for命令去创建。



7.复制内核文件意见所需的基本设备驱动文件


8.安装移植shell程序,这里我使用马哥(马永亮)提供的一个移植脚本bincp.sh,非常好用。其实移植一个命令只需要将该命令以及该命令的的库文件移植过去就可以了,命令ldd。

  1. #!/bin/bash  
  2. #  
  3. target=/mnt/sysroot  
  4.   
  5. clearCmd() {  
  6.   if which $cmd &> /dev/null; then  
  7.         cmdPath=`which --skip-alias $cmd`  
  8.   else  
  9.         echo "No such command"  
  10.         return 5  
  11.   fi  
  12. }  
  13.   
  14. cmdCopy() {  
  15.         cmdDir=`dirname $1`  
  16.         [ -d ${target}${cmdDir} ] || mkdir -p ${target}${cmdDir}  
  17.         [ -f ${target}${1} ] || cp $1 ${target}${cmdDir}  
  18. }  
  19.   
  20. libCopy() {  
  21.         for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`; do  
  22.                 libDir=`dirname $lib`  
  23.                 [ -d ${target}${libDir} ] || mkdir -p ${target}${libDir}  
  24.                 [ -f ${target}${lib} ] || cp $lib ${target}${libDir}  
  25.         done  
  26. }  
  27.   
  28. while true; do  
  29.   read -p "Enter a command: " cmd  
  30.   if [ "$cmd" == 'quit' ] ;then  
  31.         echo "quit"  
  32.         exit 0  
  33.   fi  
  34.   clearCmd $cmd  
  35.   [ $? -eq 5 ] && continue  
  36.   
  37.   cmdCopy $cmdPath  
  38.   libCopy $cmdPath  
  39. done  

这里至少要移植一个bash命令,其余的用到的话可以来移植,为了后面还要添加网卡模块,因此我在这里移植了一下几个命令:bash,ls,cat,ifconfig,insmod,rmmod,route,ping等命令。


9.安装grub(安装方法前面目录有详细步骤和说明)



10.创建grub.conf文件,具体步骤和说明复习之前的章节,vi /mnt/boot/grub/grub.conf,内容如下:



我们给引导文件创建了一个名字:New Minimal Linux OS Powered by Redhat6.4,这样方便我们查看,另外需要注意的一点,当内核装载进内存,并且展开驱动设备的“文件系统”,会以只读方式(ro)挂载根分区,然后进行系统初始化流程,默认会去找./sbin/init,但是我们这里使用一个shell脚本来替代,即可进入系统。只不过这里需要指定init参数,并且一定要在该行的最后,如果系统都没有挂载好,有怎么能找到/bin/bash这个可执行文件呢。将宿主机挂起,然后创建一个新的虚拟机,使用这块硬盘,然后启动如下:



现在可以成功进入系统了,而且启动速度特别快,也就3秒左右。后面来说下加入网卡模块,然后让这个小型的linux系统可以上网。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多