基于宿主机制作一个简单的可启动的linux
一:创建磁盘分区,并格式化
1.1 在宿主机上找个空白磁盘,分成两个区:
命令:[root@station34 ~]# fsdisk /dev/sdd
如分成sdd1,sdd2 这 2个分区
1.2 格式化这两个分区:
命令: mke2fs -t ext4 /dev/sdd1
1.3 分别将这两个分区挂载至 /mnt/boot,/mnt/sysroot,
命令:[root@station34 ~]# mount /dev/sdd1 /mnt/boot
[root@station34 ~]#mount /dev/sdd2 /mnt/sysroot
二:在目标磁盘中安装grub
安装grub有两种方式:
第一种方式:
在grub命令行下
#grub
grub> root (hd#,#)
grub> setup (hd#)
grub> quit
第二种方式 # grub -install --root-directory=/ /dev/sda
我们这边使用第2种方式安装,如图
三:复制内核和initrd文件到目标磁盘
四:为目标主机创建根文件系统
我们来为目标主机创建一些必要的目录:
在/mnt/sysroot下创建
etc/rc.d,usr,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root这些目录
五:为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配置如下:
六:配置简单的init文件
配置/mnt/sysroot/sbin/init文件
使目标机开机显示欢迎信息,开机挂载sysfs proc两个伪文件系统等
init配置如下:
七:从宿主机上复制一些命令至目标主机
我们先来建个复制命令的脚本,方便以后统一从宿主机上复制命令至目标机
[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
八:启动目标机
做完上述操作后,执行下sync,使内存数据读入硬盘中
[root@station34 ~]# sync
把宿主机关机,启动目标机装载sdd这个磁盘,
如图启动
九:为目标机配置网卡
复制网卡驱动至目标机中:
第一种方法:
在目标机中直接配置
先安装网卡驱动
然后设置ip:ifconfig etho 172.16.251.35/16
第二种方法:
在init配置文件中配置
使之开机自动装载网卡驱动,并配置ip地址
init配置如下:
重新启动目标机
至此,一个简单的linux已经制作完成,并已装载配置好ip!