基于宿主机制作一个简单的可启动的linux

基于宿主机制作一个简单的可启动的linux

一:创建磁盘分区,并格式化

    1.1 在宿主机上找个空白磁盘,分成两个区:

              命令:[root@station34 ~]# fsdisk  /dev/sdd

              如分成sdd1,sdd2 这 2个分区


    1.2 格式化这两个分区:

           命令: mke2fs  -t ext4  /dev/sdd1 wKiom1MUXdyCu_QVAAAwLY0vHes786.jpgwKioL1MUXcLRPt_ZAAAmm9-XWV4019.jpg

     1.3 分别将这两个分区挂载至 /mnt/boot,/mnt/sysroot,

       命令:[root@station34 ~]# mount /dev/sdd1   /mnt/boot

           [root@station34 ~]#mount  /dev/sdd2   /mnt/sysrootwKioL1MUXerhLwtXAAAzbYhVrRs907.jpg


二:在目标磁盘中安装grub

        安装grub有两种方式:

           第一种方式:

             在grub命令行下

              #grub

              grub> root (hd#,#)

              grub> setup (hd#)

              grub> quit

          第二种方式 # grub -install --root-directory=/      /dev/sda

  我们这边使用第2种方式安装,如图

wKiom1MUXiGx_m5vAAE0Mn3UwL8779.jpg


三:复制内核和initrd文件到目标磁盘

wKiom1MUXjnCdc6sAACbRvs0qi4071.jpg


四:为目标主机创建根文件系统

      我们来为目标主机创建一些必要的目录:

      在/mnt/sysroot下创建  

 etc/rc.d,usr,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root这些目录

wKioL1MUXjHDR2DSAABqnRxZuGs036.jpg


五:为grub提供配置文件

    在/mnt/boot/grub/下创建grub.conf配置文件

    grub.conf配置文件语法说明:

        default  =# :指定默认启动的内核或OS;

        timeout =# :等待用户选择要启动的内核或OS的时长,单位为秒

        splashimage=/path/to/splashimage_file:指定使用的背景图片

        hiddenmenu:隐藏菜单

          title

              root(hd0,0)

                   (Device,Part)

       Device表示方式:在grub中,统统以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始编号

       Part表示方式:代表分区,从0开始编号

              kernel           指定内核文件及传递给内核的参数

                  参数:ro root=/path/to/DEVICE quiet

               initrd

                initrd文件:通常以.img作为文件名后缀

grub.conf配置如下:

wKiom1MUX1vx9cXYAAB8SLYj2uw718.jpg


六:配置简单的init文件

          配置/mnt/sysroot/sbin/init文件

                 使目标机开机显示欢迎信息,开机挂载sysfs  proc两个伪文件系统等

             init配置如下:

wKiom1MUX3KRTqGaAACFEQzHYRI369.jpg


七:从宿主机上复制一些命令至目标主机

     我们先来建个复制命令的脚本,方便以后统一从宿主机上复制命令至目标机

                   [root@station34 ~]#   vim cpcmd.sh

代码如下:

#!/bin/bash
target=/mnt/sysroot
clearCmd() {
if which $cmd&> /dev/null;then
   cmdPath=`which --skip-alias $cmd`
else
echo "Nosuch command"
return 5
fi
}
cmdCopy() {
cmdDir=`dirname$1`
[ -d${target}${cmdDir} ]|| mkdir -p ${target}${cmdDir}
[ -f${target}${1} ] || cp $1 ${target}${cmdDir}
}
libCopy() {
       for lib in `ldd $1 | grep -o"/[^[:space:]]\{1,\}" `;do
          libDir=`dirname $lib`
        [ -d ${target}${libDir} ] || mkdir -p${target}${libDir}
       [ -f ${target}${lib} ] || cp $lib${target}${libDir}
done
}
while true;do
read -p"Enter a command:  " cmd
    if [ "$cmd" == "quit" ];then
          echo "quit"
        exit 6
fi
clearCmd $cmd
cmdCopy $cmdPath
libCopy $cmdPath
done


     创建好之后,给脚本以执行权限  [root@station34 ~]#  chmod +x  cpcmd.sh


    执行此脚本,复制一些命令进目标机:ls,cat,mkdir,mv,bash,mount,umount,insmod,rmmod,ifconfig,ip,ping,passwd等命令,根据自己个人需要复制即可。

         复制完成后,我们可以切换至该目录下,看命令是否可用

                     [root@station34 ~]  chroot  /mnt/sysroot

wKioL1MUX3agH9uDAABtxbWmU6M749.jpg


八:启动目标机

           做完上述操作后,执行下sync,使内存数据读入硬盘中

                   [root@station34 ~]#  sync

           把宿主机关机,启动目标机装载sdd这个磁盘,

如图启动

wKiom1MUX7eRPwVYAAEdSgqlPb8190.jpg


九:为目标机配置网卡

        复制网卡驱动至目标机中:

wKiom1MUX_vB96U1AACEH4fXdmk049.jpg

第一种方法:

               在目标机中直接配置

                先安装网卡驱动

wKioL1MUYIOxbnRuAAAjdvew690379.jpg

wKioL1MUYJHCqcQDAAG15GVmJ_4152.jpg

               然后设置ip:ifconfig etho 172.16.251.35/16

wKioL1MUYAbCQ6N3AAIR0K5zMIQ014.jpg


第二种方法:

               在init配置文件中配置

                使之开机自动装载网卡驱动,并配置ip地址

init配置如下:      wKioL1MUYLPBYTDQAAEV6v-9jSo629.jpg

重新启动目标机

wKioL1MUYOmA9YMXAALkQhvKRX4039.jpg


至此,一个简单的linux已经制作完成,并已装载配置好ip!

你可能感兴趣的:(linux,系统裁剪)