步 骤:
1、在线添加一块20G的硬盘
2、分两个分区/boot100M / 剩下的全部分给根
3、格式化为ext4文件系统
4、挂载/boot 和/
5、生成/boot 下文件
6、用脚本复制命令和命令所使用的库文件
7、复制网卡设备到/下
8、创建根下目录
9、复制完成,拔掉硬盘,放在一个新的虚拟机上用硬盘启动。
10、配置自制linux的网络功能。
具体实现如下:
1、 添加一块20G的硬盘(自制linux很小,20G足够用了)
(1)点击右键设置
建议:该块磁盘单独放在一个地方,命名方式尽量自己手动写,手动命名需要在后面主动加上后缀.vmdk
(2) 在线加硬盘,不能立即识别,需要执行下面命令,如果第一条命令,不成功再执行第二条命令
echo '- --'>/sys/class/scsi_host/host0/scan
echo '- - -'>/sys/class/scsi_host/host2/scan
2、分区
分两个主分区/boot 100M,剩下的全部分给/
lsblk 查看自己所加的硬盘是sd#,我的是/dev/sde ,所以我对/dev/sde分区
分区
lsblk查看分区
3、格式化文件系统
mkfs.ext4 /dev/sde1
mkfs.ext4 /dev/sde2
4、挂载两个分区
mkdir /mnt/boot
mkdir /mnt/sysroot
mount /dev/sde1 /mnt/boot/
mount /dev/sde2 /mnt/sysroot/
df 查看挂载情况
5、生成/boot下文件
/boot的启动系统文件,所以非常重要
进入当前linux的/boot下
那么新建的硬盘的/mnt/boot下也应当有相应的文件
(1)cp /boot/initramfs-2.6.32-696.el6.x86_64.img /mnt/boot/
(2)cp /boot/vmlinuz-2.6.32-696.el6.x86_64 /mnt/boot/
(3)生成grub
grub-install --root-directory=/mnt /dev/sde
解释:--root-directory=/mnt 指定boot所在的目录下
/mnt/boot ,所以boot所在的目录为/mnt
已生成grub文件
(4) grub目录下的文件还少了grub.conf,需手动写
经对比,可以看出/mnt/boot/grub 下与当前系统相比少了grub.conf文件
vim /mnt/boot/grub/grub.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
default=0
timeout=5
title linux-mini
kernel
/vmlinuz-2
.6.32-696.el6.x86_64 root=UUID=8dea6d66-5374-4f21-9388-6b721be4fd80 init=
/bin/bash
selinux=0
initrd
/initramfs-2
.6.32-696.el6.x86_64.img
#第一行 0 表示默认选择第一个内核
#第二行 开机倒计时时间
#第三行 linux的名称,可以自己命名
#第四行 内核文件 root=XXX 写出自己的根所在的硬盘,UUID一般不会变
#如果写成/dev/sde2 ,当在新的系统中的时候就不一定是/dev/sde2,
#可能就是/dev/sda2,所以写UUID最可靠,第一个进程init 改为/bin/bash
#第五行 ramdisk
|
到此/boot 下的文件已全部生成
6、用脚本复制命令和命令所使用的库文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#!/bin/bash
# ---------------------------------------------------------------
# Filename: copycmd.sh
# Revision: 1.0
# Date: 2017-09-14
# Author: gm
# Website:
# Description:cope file
# -------------------------------------------------------------
clear
#复制命令从操作
cp1(){
local
order=`
which
$1|
tail
-n 1`
local
dir
=`
dirname
$order`
mkdir
-p
/mnt/sysroot/
$
dir
&>
/dev/null
cp
$order
/mnt/sysroot/
$
dir
&>
/dev/null
echo
-n $order
echo
-e
"\033[1;32m ------> \033[0m\c"
echo
-n
"/mnt/sysroot"
$order
echo
-e
"\033[1;32m 复制成功\033[0m"
}
#复制命令调用
cporder(){
if
cd
/mnt/sysroot
&>
/dev/null
;
then
cp1 $1
else
mkdir
/mnt/sysroot
&>
/dev/null
cp1 $1
fi
}
#复制库文件
cplib(){
ldd $(
which
$1|
tail
-n1)|
egrep
-o
"/.*/.*\.[0-9]+"
|
while
read
file
;
do
local
dir
=`
dirname
$
file
`
mkdir
-p
/mnt/sysroot/
$
dir
&>
/dev/null
cp
$
file
/mnt/sysroot/
$
dir
&>
/dev/null
echo
-n $
file
echo
-e
"\033[1;32m ------> \033[0m\c"
echo
-n
"/mnt/sysroot"
$
file
echo
-e
"\033[1;32m 复制成功\033[0m"
done
}
#提示信息
ec(){
echo
'***************************************************************************
***************************************************************************
**************** 请输入一个可执行的指令 ***************************
**************** ***************************
**************** ***************************
**************** ***************************
**************** q 或quit 退出 ***************************
***************************************************************************
***************************************************************************
'
}
while
true
;
do
ec
read
-p
"请输入命令 : "
ord
if
[ -n $ord ];
then
case
$ord
in
q|quit)
exit
;;
*)
if
which
$ord&>
/dev/null
;
then
cporder $ord
cplib $ord
else
echo
"没有这个命令存在或者是一个内部命令"
fi
;;
esac
fi
done
|
执行结果如下:
复制命令:ls ,cp ,ping,insmod,ifconfig,ip,cat,vim,bash,hostname,reboot,lsmod ,rmmod,modprobe等
7、复制网卡设备到/下
想要自制的linux具有网络功能,需要复制网卡相关的文件
locate e1000
找到 /lib/modules-XXXX.e1000.ko
cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib6
8、创建根下一级目录
cd /mnt/sysroot
mkdir{etc,bin,sbin,tmp,var,sys,proc,opt,home,root,boot,dev,mnt,media}
9、复制完成,拔掉硬盘,放在一个新的虚拟机上用硬盘启动。
创建一个新的虚拟机,移除原来的硬盘,把刚刚创建的硬盘添加上,
网络适配器 设置桥接模式
开启虚拟机
10、配置自制linux的网络功能。
insmod /lib64/e1000.ko
ip a a 172.17.100.100/16 dev eth0
ip a 查看地址
用另一台同网络的电脑ping 该地址,由于在bash下,所以,如果用这台主机ping的话,ctrl+c不会中断