打造自己的专属Linux(一):快速建立一个小型Linux .

 我的linux版本:redhat 5.4
虚拟机客户端:Vmware Workstation 6.5
我们分步骤来实现这个小型linux

第一步:在虚拟机上添加一块新硬盘到linux,大小20G (可以自定)


第二步:1)打开终端,使用fdisk格式化分区刚才挂载的新硬盘/dev/sdb,划分出一个50M大小的主分区和一个512M大小的主分区。
  1. [root@server69 ~]# fdisk /dev/sdb  
  2. The number of cylinders for this disk is set to 2610.  
  3. There is nothing wrong with that, but this is larger than 1024,  
  4. and could in certain setups cause problems with:  
  5. 1) software that runs at boot time (e.g., old versions of LILO)  
  6. 2) booting and partitioning software from other OSs  
  7.    (e.g., DOS FDISK, OS/2 FDISK)  
  8.   
  9. Command (m for help): p  
  10.   
  11. Disk /dev/sdb: 21.4 GB, 21474836480 bytes  
  12. 255 heads, 63 sectors/track, 2610 cylinders  
  13. Units = cylinders of 16065 * 512 = 8225280 bytes  
  14.   
  15.   
  16.    Device Boot      Start         End      Blocks   Id  System  
  17. /dev/sdb1               1           7       56196   83  Linux  
  18. /dev/sdb2               8          70      506047+  83  Linux  
  19. /dev/sdb3              71         102      257040   82  Linux swap / Solaris  
  20.   
  21. Command (m for help): n  
  22. Command action  
  23.    e   extended  
  24.    p   primary partition (1-4)  
  25. p  
  26. Selected partition 4  
  27. First cylinder (103-2610, default 103):   
  28. Using default value 103  
  29. Last cylinder or +size or +sizeM or +sizeK (103-2610, default 2610): +50M    
  30.   
  31. Command (m for help): w    

2)重读下分区表
  1. [root@server69 ~]# partprobe /dev/sdb  
格式化刚建立的分区为ext3文件系统
  1. [root@server69 ~]# mke2fs -j /dev/sdb1  
  2. [root@server69 ~]# mke2fs -j /dev/sdb2  


第三步:将刚格式化好的分区/dev/sdb1挂载到/mnt/boot  /dev/sdb2挂载到/mnt/sysroot,如果你没有这两个文件夹,请手动建立,如果你挂载了其他设备,可以换其他路径。
  1. [root@server69 LX]# mount /dev/sdb1 /mnt/boot  
  2. [root@server69 LX]# mount /dev/sdb2 /mnt/sysroot  


第四步:1)安装grub到/dev/sdb
  1. [root@server69 mnt]# grub-install --root-directory=/mnt/ /dev/sdb  
  2. Installation finished. No error reported.  
  3. This is the contents of the device map /mnt//boot/grub/device.map.   
  4. Check if this is correct or not. If any of the lines is incorrect,  
  5. fix it and re-run the script `grub-install'.  
  6.   
  7. (fd0) /dev/fd0  
  8. (hd0) /dev/sda  
  9. (hd1) /dev/sdb  
  10.   
  11. 2)修改/mnt/boot/grub/device.map  
  12. [root@server69 mnt]# vim /mnt/boot/grub/device.map   
  13. (fd0)   /dev/fd0                               //去掉这一行  fd指的是软盘   
  14. (hd0)   /dev/sda  
  15. (hd1)   /dev/sdb                            //去掉这一行  


第五步:拷贝kernel和initrd到小linux里,如果对kernel和initrd没有概念的话也请看我的文章,里面有详细的说明
深入浅出:linux启动流程刨析

1)拷贝kernel文件,并且重命名方便记忆。
  1. [root@server69 LX]# cp /boot/vmlinuz-2.6.18-164.el5 /mnt/boot/vmlinuz     

2)拷贝initrd文件,并且重命名方便记忆。
  1. [root@server69 LX]# cp /boot/initrd-2.6.18-164.el5.img /mnt/boot/initrd  


第六步:解压缩initrd, 编辑里面的init文件,然后重新压缩封装。
  1. [root@server69 mnt]# mv initrd initrd.gz                                                  //刚其改名,否则gzip不识别   
  2. [root@server69 mnt]# gzip -d initrd.gz                                                     //解压   
  3. [root@server69 mnt]# cpio -id < initrd.gz                                                 //释放归档   
  4. 14731 blocks  
  5. [root@server69 mnt]# ls  
  6. bin  boot  dev  etc  init   lib  proc    sbin  sys  sysroot  
  7. //看到了吗?initrd几乎具有所有的linux文件目录,简直就是一个小linux   
  8. [root@server69 mnt]# vim init  
  9.  99 mkrootdev -t ext3 -o defaults,ro /dev/vol0/root                               // 修改为  mkrootdev -t ext3 -o defaults,ro /dev/sda2    
  10. [root@server69 mnt]#find. | cpio -H newc -o quiet   | gzip -9              //重新归档并压缩  


第七步:创建小型linux的文件目录结构
  1. [root@server69 mnt]# cd /mnt/sysroot/  
  2. [root@server69 sysroot]# mkdir -pv root bin sbin usr/{bin,sbin} lib dev tmp proc sys home mnt media boot   

第八步:拷贝命令到小型linux里去
1)怎么样拷贝命令?
  1. [root@server69 sysroot]# which bash                                             //使用which命令查看命令所在路径   
  2. /bin/bash  
  3. [root@server69 sysroot]# ldd /bin/bash                                           //ldd 加命令路径可以显示出这个命令所依赖的库文件   
  4. linux-gate.so.1 =>  (0x008e6000)                                                      //这个文件不用拷贝   
  5. libtermcap.so.2 => /lib/libtermcap.so.2 (0x0041e000)  
  6. libdl.so.2 => /lib/libdl.so.2 (0x003ef000)  
  7. libc.so.6 => /lib/libc.so.6 (0x002a7000)  
  8. /lib/ld-linux.so.2 (0x00284000)  
  9. [root@server69 sysroot]# cp /lib/lidkl.so.2 /mnt/sysroot/lib/               //将上面的库文件都复制到小linux对应的目录  

2)拷贝init 和bash ,mount , ls 这几个个命令去linux   注意,init和bash必须拷贝。


第九步:创建 /mnt/etc/fstab文件和/mnt/etc/inittab 文件,(这个文件的说明可以在我的启动流程文章里找到)
  1. [root@server69 ~]# vim /mnt/sysroot/etc/fstab  
  2. /dev/sda2            /                          ext3               defaults                                  0   0  
  3. /dev/sda1            /boot                      ext3               defaults                                  0   0  
  4. sysfs                /sys                       sysfs              defaults                                  0   0                                               
  5. proc                 /proc                      proc               defaults                                  0   0  
  6. [root@server69 ~]# vim /mnt/sysroot/etc/inittab  
  7. id:3:initdefault:  
  8. si::sysinit:/etc/rc.d/rc.sysinit  

第十步:创建/mnt/boot/grub/grub.conf 和 /etc/rc.d/rc.sysinit,并给rc,sysyinit 赋执行权限
  1. [root@server69 ~]# vim /mnt/boot/grub/grub.conf   
  2. default=0  
  3. timeout=10  
  4. title Little Linux                                                                                           //grub的标题,可以自己写   
  5.                      kernel /vmlinuz  ro  root=/dev/sda2 quiet                       //加载内核,只读方式挂载根文件系统   
  6.                      initrd /initrd.gz                                                                       //加载内存文件系统   
  7.   
  8. [root@server69 ~]# vim /mnt/sysroot/etc/rc.d/rc.sysinit  
  9. #!/bin/bash   
  10. echo -e "\t\tWelcome to \033[31mLittle\033[0m Linux"                     //这里可以写自己想写的欢迎界面 ^^   
  11.   
  12. mount -n -o remount.rw /                                                                           //以读写方式重启挂载根文件系统   
  13. mount -n -a                                                                                                    //挂载所有设备,并不记录   
  14.   
  15. /bin/bash                                                                                                        //加载bash shell  
  1.  <pre name="code" class="cpp" style="margin-top: 4px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; background-color: rgb(240, 240, 240); ">[root@server69 ~]# chmod +x /etc/rc.d/rc.sysinit                //给rc.sysinit赋执行权限     
 

好了,大功告成,新建一个虚拟机,选择linux2.6xx ,挂载上这块硬盘看下效果吧~

这是我的grub界面很朴素吧~你可以自己更改背景哈

启动完成的效果,很简陋吧,注意Little

##更新:第十步最后要给rc.sysinit赋执行权限,否则可能系统加载时无法执行!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值