简化版linux操作系统:包括MBR引导,GRUB菜单,kernel,init进程,inittab表以及rc.sysinit。

我们知道在linux中,只要该系统有内核、应用、以及库文件该系统就能运行。在Vmware 虚拟环境中如何给一个新系统的硬盘这些内容呢?首先要有一台能正常运行的linux机器,为该机器添加一块新硬盘,再将新系统需要的文件拷贝到新硬盘上,再将新硬盘取出,安装到新机器上,这样新机器所需的系统文件就存在自己的硬盘上,该系统就可以使用。

 

1.为宿主机添加一块硬盘,用来存放新系统所需文件

image

将新磁盘对应的文件存放到一个位置E盘下

image

启动系统,查看磁盘信息

image

对新磁盘/dev/sdb进行分区

image

添加一个100M大小的boot分区

image

再添加一个1G大小的根分区

image

显示分区情况

image

将/dev/sdb1分区变为引导分区

image

分别格式化两个分区

image

image

新建挂载点/mnt/boot  ,  /mnt/sysroot,将新磁盘的引导分区,根分区挂载上。

image

image

比较宿主机和新硬盘的引导分区中文件

image 

因此要在新硬盘上新建MBR和GRUB第二段。

grub-install  --root-directory=/mnt   /dev/sdb

--root-directory=/mnt 表明要在/mnt/boot下创建grub的第二段,它会自动查找/mnt/下的boot,所以不能写/mnt/boot。

/dev/sdb 表明要在该磁盘上创建MBR。

image

再次查看新磁盘的引导分区

image

这样,MBR创建成功,grub引导的第一部分在MBR中,已经创建成功。grub的第二部分中的grub目录创建成功,但是在新磁盘的引导分区中还缺少一个grub菜单:/mnt/boot/grub/grub.conf,该菜单中记录有系统内核文件vmlinuz和驱动文件initrd,所以要先有系统内核文件vmlinuz和驱动文件initrd。由于新机器和宿主机的硬件一样,所以我们可以直接使用宿主机的内核和驱动。

将宿主机的内核和驱动拷贝到新磁盘的引导分区下:

image

image

内核和驱动已经有了,下面要新建grub菜单了位置在 /mnt/boot/grub/grub.conf

image

注意,此处的root (hd0,0)说明引导分区在第一块硬盘的第一个分区上。因为在新机器上,该磁盘就是第一块磁盘。

同理,root=/dev/sda2表示将根交给第一块硬盘的第二个分区。

image

 

grub菜单有了,下面要创建init进程,查找宿主机上的init进程的位置:which init

image

所以在根目录下应该有sbin目录,查看宿主机的根下都有哪些目录

image

在新磁盘的/mnt/sysroot下创建部分对应的目录:bin boot dev etc home lib proc root sbin sys tmp usr var

image

更改权限

image

将/sbin/init拷贝到新磁盘的/sbin目录下

image

由于init进程要调用库文件,所以查看宿主机的init进程调用的库文件的位置,并将它们复制到新磁盘的对应目录下

image

image

现在init进程可以运行了,下一步要读取inittab表,在/mnt/sysroot/etc/下创建文件inittab(复制宿主机的/etc/inittab)

image

使用底行命令 m,n  d删除里面的部分内容,只保留一行:系统初始化脚本

image

现在新磁盘中还没有rc.d目录和rc.sysinit文件

image

编辑rc.d/rc.sysinit

image

修改/mnt/sysroot/etc/rc.d/rc.sysinit

image

image

新系统中还没有/bin/bash脚本文件,复制宿主机的文件

image

查看/bin/bash的系统调用:ldd  /bin/bash

image

将需要的文件拷贝到新磁盘对应的位置,由于前面拷贝过init进程的库文件,可能会出现重复的情况,覆盖即可

image

 

执行sync命令,保存内存文件到硬盘。然后关闭宿主机,取出新硬盘。在虚拟环境下,可以新建虚拟机,来使用刚刚从宿主机上取下的硬盘

image

新建虚拟机,并移除硬盘

image

添加一块新硬盘

image

选择使用已经存在的硬盘

image

选择从宿主机上拆下来的硬盘文件

image

启动该系统

image

image