CentOS6.10自制LINUX系统(vmware环境)

 

1、准备一块干净的新磁盘(vmware)

 

2、扫描磁盘scandisk

	echo - - - > /sys/class/scsi_host/host0/scan
	echo - - - > /sys/class/scsi_host/host1/scan
	echo - - - > /sys/class/scsi_host/host2/scan
	lsblk查看磁盘是否添加成功:

 

3、创建磁盘分区

	使用fdisk /dev/sdb创建2个分区,一个当/(20G),一个当/boot(1G),分区后的结果如下:

 

4、格式化文件系统mkfs.ext4

	mkfs.ext4 /dev/sdb1
	mkfs.ext4 /dev/sdb2
	使用blkid命令查看文件系统类型是否正确,如下图:

 

5、创建新磁盘的boot挂载点

	mkdir /mnt/boot

 

6、mount /dev/sdb1 /mnt/boot/

	sdb1:换到其它系统时,就变成sda1,即/

 

7、安装grub

	grub-install --root-directory=/mnt/ /dev/sdb
	--root-directory=/mnt/  :指定系统的根,必须是boot文件夹的上一级目录
	ls /mnt/boot/grub/ 查看是否生成grub的1、1.5和2阶段的文件,如下图:

 

8、同步grub信息到磁盘

	sync  为确保可靠同步,可以多软几次sync

 

9、拷贝原磁盘中的vmlinuz和initramfs到/mnt/boot/

	cp /boot/vmlinuz-2.6.32-754.el6.x86_64 /boot/initramfs-2.6.32-754.el6.x86_64.img /mnt/boot/  ,如下图:

 

10、把vmlinuz和initramfs修改成简单的名称,方便后面使用

	cd /mnt/boot/
	mv vmlinuz-2.6.32-754.el6.x86_64 vmlinuz
	mv initramfs-2.6.32-754.el6.x86_64.img initramfs.img

 

11、手动编辑grub.conf文件(必要的内容)

	vim /mnt/boot/grub/grub.conf
	default=0
	timeout=5
	title customlinux
	kernel /vmlinuz root=/dev/sda2 selinux=0 init=/bin/bash
	initrd /initramfs.img

	#init=/bin/bash:指定系统启动的第一个进程

 

12、创建新磁盘的/挂载点

	mkdir /mnt/root

 

13、mount /dev/sdb2 /mnt/root/

 

14、创建/根目录下的文件夹

	for DIR in `ls /`;do mkdir /mnt/root/$DIR ;done  结果如下:

 

15、使用copycmd.sh脚本拷贝需要的命令到/mnt/root下

	测试拷贝的命令:ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid,bash,vi,echo,umount
	
	cat copycmd.sh:
	read -p "Pls input  copycmd directory: " copydir
	[ -d $copydir ] || mkdir -p $copydir

	while true
	do
		read -p "Pls input a copycmd or quit: " name
		if [ "$name" == "quit" ];then
				exit
		else
				#cp $name ${copydir}${newdir}
				newname=`which $name|sed -rn 's#.*/([^/].*)#\1#p'`
				newdir=`which $name|sed -rn 's#(^/.*/).*$#\1#p'`
				if [ ! -f ${copydir}`which $name` ];then
						mkdir -p ${copydir}${newdir} &> /dev/null
						\cp `which $name` ${copydir}${newdir}
				fi

				ldd `which --skip-alias $name` | while read line
				do
						testname=`echo $line | sed -rn 's/(.*) =>.*$/\1/p'`
						if [ "$testname" == "linux-vdso.so.1" ];then
								continue
						else
								cmd=`echo $line | sed -rn 's#.*/(.*) .*$#\1#p'`
								cmddir=`echo $line | sed -rn 's#.*(/.*/).*$#\1#p'`
								\cp -aL ${cmddir}${cmd} ${copydir}$cmddir &> /dev/null
						fi
				done
			fi
	done
	
	#注意:copycmd的目标地址一定要填/mnt/root(新磁盘的/目录)
	复制命令的结果如下:

 

16、复制网卡驱动e1000.ko

	1)	locate e1000  查找驱动的源地址
	2)	cp `locate e1000.ko` /mnt/root/lib/
	3)	ls /mnt/root/lib/
	结果如下:

 

17、 磁盘同步

	sync
	sync

 

18、切根后测试一个复制的命令是否正确

	chroot /mnt/root 
	#注意:如果没有出现提示符“bash-4.1#”,则上面的步骤有错误,如下图:

 

19、测试一下新磁盘系统是否可用

	1)	关机本虚拟机
	2)	先复制linux新系统硬盘(即第1步中的centos6.10基础-2.vmdk)到一个地方
	3)	新建一个虚拟机(CentOS6.10)
	4)	复制linux新系统硬盘(centos6.10基础-2.vmdk)到新建的虚拟机中
	5)	添加一个网卡,方便测试虚拟机网络(注意要用同一个vmnet)
	6)	启动新虚拟机
	7)	测试一个使用copycmd.sh脚本拷贝的命令(注意:ifconfig -a 看不到网卡信息,因为没有驱动)
	8)	insmod安装网卡驱动(insmod /lib/e1000.ko)
	9)	添加临时IP地址(ifconfig eth0 192.168.36.16/24)
	10)	查看IP地址信息(ifconfig -a)
	11)	ping -c 2 192.168.36.110(同一vmnet中正在运行的虚拟机IP)
	12)	查看/boot下面的内容(因为缺少/etc/fstab,所以什么也看不到,可以先挂载)
	13)	mount /dev/sda1 /boot
	14)	如果想开机启动能看到/boot下面的内容,就需要写/etc/fstab文件。

 

添加硬盘向导

 

正常启动的界面

 

测试一下命令

 

添加网卡驱动及ping测试