linux内核管理--之定制一个属于本身的小型系统


1、linux系统启动流程介绍
linux

  咱们来了解下linux系统的启动流程:
ios

     首先linux要经过POST自检过程(BIOS)-->若是想要作多块启动盘的话,还须要在bios中选择启动磁盘-->引导MBR(bootloader引导程序)-->加载initrd文件-->执行进程init-->显示欢迎界面;vim

  须要注意:bash

  在linux的启动流程中,加载内核文件时还须要借助别外两个文件:
ide

      1)initrd,CentOS5上是用内存模拟的磁盘设备;
测试

      2)initramfs,CentOS6上是用内存模拟的文件系统;
ui

  在启程的流程中,init主要经过调用/etc/inittab这个配置文件,而后再去执行/etc/rc.d/rc.sysinit的系统初始化脚本.spa


2、制做的详细步骤3d

   在宿主机上添加块新磁盘,并将其命名:1111111111.vmdk,这是宿主机上的第二块磁盘(/dev/sdb),而等到时候挂载到目标主机的时候,由于那里只有这宿主机上(/dev/sdb)的这一块磁盘,因此在目标主机上应该是/dev/sda这个名字,这是必需要清楚的。弄清楚以后在来作其它操做,第一个分区500M,用来装引导程序;第二个分区15G,用来装根文件系统。格式化完成后要将其挂载,将/dev/sdb1挂载到/mnt/boot下,将、dev/sda2挂载到/mnt/sysroot下.code



1).给目标机磁盘分区:

wKiom1MXGgjA2C8eAAJVRU-gN_8548.jpg

2).将分区格式化:

[root@xiaomazi ~]# mke2fs -t ext4 /dev/sdb1
[root@xiaomazi ~]# mke2fs -t ext4 /dev/sdb2


3).建立挂载目录并将其挂载至/mnt/sysroot/mnt/boot目录下:

wKiom1MXGiKAIkKLAAIPisnf1BU159.jpg


4). 安装grub至目标磁盘(注意:boot在哪里就在哪里安装grub.):

wKioL1MXGhCB2HPRAALj_IJIY6A602.jpg


5). 复制内核和initrd文件:

wKioL1MXGjmDgBHmAAFmmRiTCGo160.jpg


6). 建立目标主机的根文件系统:

wKiom1MXGo6wdh1eAANsb7hYxb0473.jpg

7).接着去移植bashls等命令至目标主机的根文件系统:

[root@xiaomazi sysroot]# vim bincp.sh
#!/bin/bash
#
target=/mnt/sysroot
clearCmd() {
ifwhich $cmd &> /dev/null; then
cmdPath=`which--skip-alias$cmd`
else
echo"No such command"
return5
fi
}
cmdCopy() {
cmdDir=`dirname$1`
[ -d ${target}${cmdDir} ] || mkdir-p ${target}${cmdDir}
[ -f ${target}${1} ] || cp$1 ${target}${cmdDir}
}
libCopy() {
forlib 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
}
whiletrue; do
read-p "Enter a command: "cmd
if[ "$cmd"== 'quit'] ;then
echo"quit"
exit0
fi
clearCmd $cmd
[$? -eq5 ] && continue
cmdCopy $cmdPath
libCopy $cmdPath
done

执行脚本:

[root@xiaomazi ~]# chmod +x bincp.sh 给执行权限
[root@xiaomazi ~]# sh -n bincp.sh 测试语法错误
[root@xiaomazi ~]# sh bincp.sh
Enter a command: bash给目标机一个bash命令
Enter a command: quit
quit
[root@xiaomazi ~]#


8).使用tree /mnt/sysroot 命令,查看库文件等文件是否存在:

wKioL1MXHGfTauOqAAIcyNcuSww564.jpg


I.执行bincp.sh脚本给目标机可执行命令:ls,cat,vi,cp,mv,mkdir,touch.

wKiom1MXHLbh7r-TAADFUPsn70M384.jpg


II.bash建立个软链接:

wKiom1MXHNaw8MG3AAKHQV4cthw668.jpg



9). 为目标机的grub提供配置文件:


I.注意这样写会有报错的,请看:

wKiom1MXHUnQYGBtAAHzkVqr0CY176.jpg


II.在新建虚拟机时候须要注意的地方:

wKiom1MXNwHQ5wo_AAGL5XHxSa0327.jpg

wKiom1MXLO7DFns2AAGIx18m1zU575.jpg


III.本身定义的系统名字,与等待时间:

wKiom1MXLSmjrTxZAAF7RBlCZj0195.jpg


IV.内核恐慌,没有找到init,在上面I中已经说明了,那里指的错误就是这个吆.

wKiom1MXLT6AtlziAAJiNT5YC2Q301.jpg


V.告诉系统找/bin/bash:

wKioL1MXLSuAuCw7AAGLaOXBpnI496.jpg


VI.在目标机上显示以下信息就能够了:

wKioL1MXLVrTf9LyAAM-_OBdbJg495.jpg



2.编写init脚本:

1).如何去写一个init脚本呢?

注意:init 通常都在/sbin目录下面:

咱们知道init要经过调用etc/inittab配置文件,而后再去执行/etc/rc.d/rc.sysinit的系统初始化脚本的,

如今就经过init脚原本完成它也是能够的.

[root@xiaomazi ~]# vim /mnt/sysroot/sbin/init

wKiom1MXRe-CfLVzAAJ8mfFQiVM083.jpg


2).在grub.conf文件中指定init脚本:

wKioL1MXLVvhKI_aAAF1T4svarg193.jpg


3).建立模块modules目录,以后将e1000.ko复制进目标主机的磁盘上,并复制命令之目标机:

wKiom1MXLYLxVf1tAALc45hczJ0906.jpg

4).在启动目标机后就会显示以下信息:

wKiom1MXRpuhLGCiAAPM4M-CcbE254.jpg


5).查看下网卡信息:

wKiom1MXRpzz_SQyAAIqlgvp62w481.jpg


6).测试配置好IP后,是否能ping通:

wKioL1MXRnWxz65bAAF1xaft8KY991.jpg


7).测试可否建立文件:

wKioL1MYVq_hQxPdAAB0cfYgsPk268.jpg






A smile is the most beautiful language!!!


j_0057.gifj_0057.gifj_0057.gif以本人的理解而写出博客,如如有错误,欢迎指出.j_0057.gifj_0057.gifj_0057.gif

                                                                       ---->小马子


                        ---->小马子

相关文章
相关标签/搜索