新手,首次接触linux,下面创建的小linux挺有意思,可以帮助新手更好的去了解linux。 

 概要:首先在宿主机上添加一个硬盘,将宿主机上的启动linux必要的文件系统拷贝到这块硬盘,然后利用该硬盘装入另外一台机器上,以启动一个小的linux。

以下是创建的命令总结步骤:

fdisk /dev/sdb //为新增的硬盘创建2个分区(我新增的硬盘是SCSI的所以是/dev/sdb格式的)
n //新增
p //主分区
1 //第一个分区
回车 //起点
+50M //大小为50M即可
n
p
2
回车
+512M //同上一个分区的创建
p //查看是否创建成功
w //保存退出

mke2fs -j /dev/sdb1 //格式化第一个分区
mount /dev/sdb1 /mnt/boot/ //在mnt下创建一个启动目录boot然后将其挂载进来
ls /mnt/boot/ //查看是否成功挂载
cd /mnt/boot/ //进入到boot目录下
grub-install --root-directory=/mnt /dev/sdb //在该目录下安装grub
ls /boot/ //查看下安装结果
cd grub/
ls
vim grub.conf //自定义grub配置文件(里面的内容参考宿主机上的grub配置文件)
default=0
timeout=5
#splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-308.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-308.el5 ro root=/dev/vol0/root rhgb quiet
initrd /initrd-2.6.18-308.el5.img

cp /boot/vmlinuz-2.6.18-380.el5 /mnt/boot/vmlinuz //拷贝宿主机上的内核到硬盘上并更名为vmlinux
ls /mnt/boot/

cp initrd-2.6.18-308.el5.img /tmp //拷贝虚拟文件系统到/tmp 目录下(这步是为了修改该文件系统中的配置所做)
file initrd-2.6.18-308.el5.img //查看它是什么文件
cd /tmp/ //切换到/tmp目录下
ll -h
mv initrd-2.6.18-308.el5.img initrd-2.6.18-308.el5.gz //修改该文件系统的名称(为了解压)
gzip -d initrd-2.6.18-308.el5.gz //解压
ll -lh //查看解压的结果
mkdir linux/ //解压后里面有好多文件,创建一个新的目录方便之后再次压缩打包
cd linux //切换到该目录下
file initrd-2.6.18-308.el5 //查看解压后的文件格式(ASCII cpio archive)
ls
cpio -id < ../initrd-2.6.18-308.el5 //用cpio打开该文件释放到linux目录中
ls
vim init //修改磁盘信息(找到以下2行,做相应修改)
#resume LABEL=SWAP-sda3

mkrootdev -t ext3 -o defaults,ro /dev/sda2

find . |cpio -o --quiet -H newc | gzip -9 > /mnt/boot/initrd.gz //再将刚刚修改过的虚拟文件打包到/mnt/boot下
ll /mnt/boot/ -h
到这里内核、grub、虚拟文件系统已经安装好了
接下来将相应程序复制到系统中


mke2fs -j /dev/sdb2 //将分区2格式化
partprobe /dev/sdb //重新启用
mkdir /mnt/sysroot //创建一个目录放各种所需的程序目录
mount /dev/sdb2 /mnt/sysroot/ //将分区2挂载到该目录下
cd /mnt/sysroot/ //切换到该目录
ls
mkdir -pv etc/rc.d dev proc bin sbin lib sys boot root media mnt opt home var usr/{bin,sbin,share,lib} tmp
//在新的小linux上添加必备的目录
ls
cp /sbin/init /mnt/sysroot/sbin //将相应目录下的东西复制到新的linux中相应的目录里
vim etc/inittab //在必备的配置文件中手动添加一些配置
id:3:initdefault
si::sysinit:/etc/rc.d/rc.sysinit
//自定义新linux中的 inittab
vim etc/rc.d/rc.sysinit
#!/bin/bash
echo"" //(这里可以随便写)
/bin/bash
//自定义rc.sysyinit
chmod +x etc/rc.d/rc.sysinit //给其执行权限
which bash
cp /bin/bash /mnt/sysroot/bin/ //将必要的bash拷贝到小linux相应目录下
cp /bin/ls /mnt/sysroot/bin/
ll
cd /mnt/sysroot/bin/ //切换到该目录
ls
ln -sv bash sh //这步是为了符合有的系统中默认的是sh启动程序所做的工作(不要也可以)
ll

ldd /sbin/init //查找相应目录的依赖关系#####添加依赖库这一块可以用脚本来实现,后期会有相应的脚本写出,#####
cp /lib/.1 /mnt/sysroot/lib/
cp /lib/.1 /mnt/sysroot/lib/
cp /lib/libc.so.6 /mnt/sysroot/lib/
cp /lib/libdl.so.2 /mnt/sysroot/lib/
cp /lib/ld-linux.so.2 /mnt/sysroot/lib/

ldd /bin/bash
cp /lib/.2 /mnt/sysroot/lib/

which ls
ldd /bin/ls
cp /lib/.1 /mnt/sysroot/lib/
cp /lib/.1 /mnt/sysroot/lib/
cp /lib/.0 /mnt/sysroot/lib/
cp /lib/.1 /mnt/sysroot/lib/ //以上是把所有依赖的文件全部复制到小linux相应的目录下
sync //把以上步骤同步下
chroot /mnt/sysroot/ //切换到小linux中,一些简单命令或服务便可以在此执行了