准备一台liunx的机器,我用的是liunx虚拟机linux
单独加载一块硬盘,我加载了一块20G的硬盘,而后用fdisk /dev/sdb进行分区,sdb1用来做为未来系统的/boot分区,全部100M就能够了,sdb2用来做为未来系统的/分区,我给了10G。而后将两个分区格式化为ext4系统。bash
mkdir /mnt/bootide
mkdir /mnt/sdc2oop
mount /dev/sdb1 /mnt/boot测试
mount /dev/sdb2 /mnt/sdc2ui
4.执行grub-install命令,×××箭头是指未来要做为/ 的目录,红色箭头是表示将grub相关文件写入/sdb磁盘中(grub相关文件是用来引导启动内核的关键文件)spa
5.拷贝内核文件和文件系统文件到/bootblog
6.编辑/mnt/boot/grub/grub.conf文件图片
第一行:出现列表时,背景图片的路径(图片的制做方法请看我相关的文章)ip
第二行:内核的名字
第三行:未来从第一块硬盘第一个扇区启动
第四行:启动内核文件,只读,/目录在/dev/sda2分区 此时selinux关闭 init程序读取/bin/bash
第五行:根目录可用前的一个临时文件系统,initrd与内核绑定在一块儿,并做为内核引导过程的一部分进行加载。内核而后会将这个 initrd文件做为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。
7.写挂载文件
8.在/mnt/sdc2/下建根目录中的文件夹
9.利用脚本拷一些命令到新的目录下(在/mnt/sdc2下执行此命令)
脚本内容以下:
#!/bin/bash
ch_root="/mnt/sdc2"
[ ! -d $ch_root ] && mkdir $ch_root
bincopy() {
if which $1 &>/dev/null; then
local cmd_path=`which --skip-alias $1`
local bin_dir=`dirname $cmd_path`
[ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
[ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
return 0
else
echo "Command not found."
return 1
fi
}
ch_root="/mnt/sdc2"
[ ! -d $ch_root ] && mkdir $ch_root
bincopy() {
if which $1 &>/dev/null; then
local cmd_path=`which --skip-alias $1`
local bin_dir=`dirname $cmd_path`
[ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
[ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
return 0
else
echo "Command not found."
return 1
fi
}
libcopy() {
local lib_list=$(ldd `which --skip-alias $1` | grep -Eo '/[^[:space:]]+')
for loop in $lib_list;do
local lib_dir=`dirname $loop`
[ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
[ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
done
}
read -p "Please input a command or quit: " command
while [ "$command" != "quit" ];do
if bincopy $command ;then
libcopy $command
fi
read -p "Please input a command or quit: " command
done
10.咱们此时能够将此块硬盘取下,挂载到一个新的liunx系统中去,测试是否能正常启动
新虚拟机
11.启动新的虚拟机
此时,咱们能够看到内核的名字是zebralinux,也就是咱们在/mnt/boot/grub/grub.conf中title所对应的行,背景图片也被换了,说明暂时系统是好的,能够继续进行
由于咱们制定init=/bin/bash,全部开机后执行的第一个程序就进入到bash中,在此界面中咱们能够测试其余命令,有些命令应该可用,有些有依赖其余文件的命令或许此刻或用不了,咱们只是作了个简单linux。
咱们第一次mount时,sda1没有被挂载上。当咱们挂载时,会报错,但仍能被挂载上。以后,咱们就能够进入到/下的目录和/boot目录中了