LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2873|回复: 12

制作一张软盘linux系统实例与应用。

[复制链接]
发表于 2004-5-18 20:14:58 | 显示全部楼层 |阅读模式
关于制作linux系统软盘,网上有许多这方面资料,都涉及编译内核,
软件安装。让初接触linux的朋友止步。我写这篇实例是避开编译内核
,软件安装,实现加深了解linux文件系统。

本人实例环境如下:安装RedHat linux时完全安装,有软驱和软盘。
还要根文件系统在硬盘分区代号:hda7。用df命令查看。

一:实例

root 帐户登录系统,插入空磁盘。
#mke2fs /dev/fd0                                     格式化成ext2
#mount -t ext2 /dev/fd0 /mnt/floppy            挂载软盘

在软盘建立boot目录和子目录grub。
#mkdir /mnt/floppy/boot
#mkdir /mnt/floppy/boot/grub
#cp /boot/grub/stage1 /mnt/floppy/boot/grub/
#cp /boot/grub/stage2 /mnt/floppy/boot/grub/
#cp /boot/grub/e2fs_stage1_5  /mnt/floppy/boot/grub/
[有关e2fs_stage1_5查看后记5]

把原文件stage1,stage2,e2fs_stage1_5,复制到软盘子目录grub下。
stage1,stage2为装入器,e2fs_stage1_5为两者桥梁,能在引导时从
ext2文件系统顺利装入stage2。

#grub
grub>root (fd0)
grub>setup (fd0)
grub>quit
        
grub是一个程序,以上操作避开硬盘MBR信息来设置引导盘的引导扇区。

把当前目录设在/mnt/floppy/boot/grub
#cd /mnt/floppy/boot/grub

把原grub.conf复制到当前目录下
#cp /boot/grub/grub.conf ./
#ln -s grub.conf menu.lst
把grub.conf修改成如下:
(本人把window跟linux安装在同一硬盘)
--------------------------------------------------------------------------
default=0
timeout=10
title weixiao make Linux
[tab]  root (fd0)
[tab]  kernel /boot/vmlinuz-2.4.7-10 ro root=/dev/fd0
[tab]  initrd /initrd.gz
title DOS
[tab]  rootnoverify (hd0,0)
[tab]  chainloader +1
-------------------------------------------------------------------------
注:grub.conf文件内容[tab]为TAB键

#cd /tmp
#cp /boot/vmlinuz-2.4.7-10 /mnt/floppy/boot/
把内核复制到软盘,本人内核vmlinuz有800k  ,2.4.7-10随你版本自己
改动。

现在已完成内核部分,开始制作root盘(根文件系统)。
#mkdir flolinux                  在/tmp建立flolinux目录
#cd flolinux                      进入flolinux目录
#mkdir {bin,dev,etc,mnt,proc,sbin,tmp}
#mkdir etc/rc.d
#mkdir mnt/{linux,floppy}
#cp -a /dev/{console,fd0,hda7,null,ram0,tty,tty0} dev/
以上hda7是根文件系统在硬盘分区代号

#cd etc/rc.d
#vi rc.sysinit
-----------------------------
#!/bin/sh
mount -a
-----------------------------

#chmod 744 rc.sysinit
#cd /tmp/flolinux/etc
#vi fstab
-------------------------------------------------
proc            /proc          proc   defaults   0 0
/dev/hda7    /mnt/linux    ext2    defaults   0 0
-------------------------------------------------

#vi inittab
-------------------------------------------------
:: sysinit: /etc/rc.d/rc.sysinit
:: askfirst: /bin/sh
-------------------------------------------------

以上是三个配置文件/tmp/flolinux/etc/inittab,/tmp/flolinux/etc/fstab,
/tmp/flolinux/etc/rc.d/rc.sysinit文件名以及文件内容。
注:inittab文件内容不留空格。

#cd /tmp/flolinux/bin
#which busybox
/sbin/busybox
检查busybox静态链接工具库是否安装,否则查看文章结尾。

#cp /sbin/busybox ./init          把busybox复制到当前目录并改成init文件
#ln -s init cp
#ln -s init cat
#ln -s init date
#ln -s init df
#ln -s init dmesg
#ln -s init echo
#ln -s init fsck
#ln -s init kill
#ln -s init ln
#ln -s init ls
#ln -s init mount
#ln -s init umount
#ln -s init mv
#ln -s init ps
#ln -s init pwd
#ln -s init sed
#ln -s init sh
#ln -s init sync
#ln -s init tty
创建符号链接前,查看man busybox—commands选项中同系统达到
共识的工具名称。

#cd /tmp/flolinux/sbin
#ln -s ../bin/init lsmod
#ln -s ../bin/init reboot
在sbin子目录下建立lsmod,reboot符号链接。注意使用相对路径。

#cd /tmp/flolinux/
#ln -s bin/init linuxrc
#tree                                                           查看做了什么

制作镜像文件:
#cd /tmp
#dd if=/dev/zero of=/tmp/image bs=1k count=2048
#losetup /dev/loop0 /tmp/image
#mke2fs -m 0 /dev/loop0
#mkdir /mnt/imloop
#mount -t ext2 /dev/loop0 /mnt/imloop
#cp -a /tmp/flolinux/* /mnt/imloop/
#umount /mnt/imloop
#losetup -d /dev/loop0
#dd if=/tmp/image|gzip -9 > /tmp/initrd.gz
#sync
#cp /tmp/initrd.gz /mnt/floppy/
#sync
#df -h /mnt/floppy
Filesystem            Size  Used Avail Use% Mounted on
/dev/fd0              1.4M  1.3M   40k  98% /mnt/floppy
#umount /mnt/floppy
你看,制作成的linux软盘只有1.3M。

二:应用
在linux用软盘启动一般是忘了密码,就拿这个例子:
         
首先用软盘启动,自动安装内核跟解压镜像文件后:
please press Enter to activate this console.          回车
#

#ps                                         试输入命令
#mount                                    查看已经挂载哪些设备以及挂载点
/dev/ram0     on   /   type   ext2   (rw)
proc             on   /proc    type   proc   (rw)
/dev/hda7     on   /mnt/linux   type   ext2   (rw)

#cd /bin
#pwd
#ln -s init more
#more /mnt/linux/etc/passwd
工具库busybox找不到文档编辑器,只有温习一下sed

#sed -n '/^root/p' /mnt/linux/etc/passwd
root:x:0:0:root:/root:/bin/bash
只要把x删去,就能畅通无助

#sed -n '/^root/s/x//p' /mnt/linux/etc/passwd
root::0:0:root:/root:/bin/bash
#cat /mnt/linux/etc/passwd
你会发现改动处丝毫无损,上步骤只能在内存起作用

#sed '/^root/s/x//' /mnt/linux/etc/passwd > /mnt/linux/etc/new.txt
先把原passwd文件备份,再把new.txt改名为passwd文件,就可以
完成。

三:后记

1;尽可能在使用软盘时不把rm软链接,别小看1.3M东西,它能把
几十G数据删掉。

2;使用系统自带busybox,命令reboot不起作用。当你想毛手毛脚
时可以下载busybox自行编译,(参照文档)步骤如下:
#tar zxvf busybox-0.51.tar.gz
(1)修改Makefile中DOSTATIC参数。把false改为true
(2)修改init.c内容:
---------------------------------------------------
#ifndef INIT_SCRIPT
#define INIT_SRCIPT "/etc/rc.d/rc.sysinit"
#endif
---------------------------------------------------
(3)
#make
#make install

3;本人试过编译内核,把网络选项下功能去掉,编译后只有450k。

4;当你经常编译新内核,把内核复制到软盘,修改grub.conf如下:
-----------------------------------------------------
default=0
timeout=10
title weixiao make Linux
[tab] root (fd0)
[tab] kernel /boot/vmlinuz-2.4.7-10 ro root=/dev/hda7
title DOS
[tab] rootnoverify (hd0,0)
[tab] chainloader +1
-----------------------------------------------------

5;setup (fd0) 是把软盘/boot/grub目录下stage1,stage2
安装到软盘引导记录,而e2fs_stage1.5意思是无需按软盘ext2
文件格式的原始块信息就可以装入stage2,《grub入门指南》
介绍中没把stage1.5放进软盘,经试验stage1.5跟硬件有关。

如果还没解决引导问题,可先采用mkbootdisk命令制造引导盘
(boot盘),若发现内核过大,RH linux光盘中有个用于安装
的内核(600多K,只不过名称不同),换一换,再按以上步骤
制造文件系统镜像(root盘)。

6;遇到问题的朋友请留言。
发表于 2004-5-19 06:08:19 | 显示全部楼层
楼主这么好的帖子怎么没人顶,偶来顶。
顶顶顶,顶顶顶,顶顶顶,顶顶顶,顶顶顶顶顶顶。
发表于 2004-5-19 07:20:28 | 显示全部楼层
以前做过软盘LINUX的,后来觉得软驱要淘汰了,因此就没有改进下去。其实自己做做还是可以对LINUX有更深了解的,最好自己编译内核。自己编译内核其实很简单,而且不用冒风险。
 楼主| 发表于 2004-5-26 16:31:54 | 显示全部楼层
楼上兄弟有没有同感:
想当‘黑侠’的来触摸linux。编译内核都是失败后‘闲有不甘’
再来研究的同志。
发表于 2004-5-26 17:14:32 | 显示全部楼层
好文,有空的时候我也实践一下
发表于 2004-5-27 06:57:33 | 显示全部楼层
如果把它应用到 U盘上,用处可能就会大点.
发表于 2004-5-27 09:16:14 | 显示全部楼层
最初由 redsos 发表
如果把它应用到 U盘上,用处可能就会大点.


是啊。
发表于 2004-5-27 10:46:03 | 显示全部楼层

微笑朋友且看

发表于 2004-5-27 11:04:45 | 显示全部楼层


  1.     GRUB  version 0.92  (640K lower / 3072K upper memory)

  2. [ Minimal BASH-like line editing is supported.  For the first word, TAB
  3.    lists possible command completions.  Anywhere else TAB lists the possible
  4.    completions of a device/filename. ]

  5. grub> root (fd0)
  6. Filesystem type is fat, using whole disk

  7. grub> setup (fd0)
  8. Checking if "/boot/grub/stage1" exists... yes
  9. Checking if "/boot/grub/stage2" exists... yes
  10. Checking if "/boot/grub/fat_stage1_5" exists... yes
  11. Running "embed /boot/grub/fat_stage1_5 (fd0)"... failed (this is not fatal)
  12. Running "embed /boot/grub/fat_stage1_5 (fd0)"... failed (this is not fatal)
  13. Running "install /boot/grub/stage1 (fd0) /boot/grub/stage2 p /boot/grub/grub.c
  14. onf "... failed

  15. Error 25: Disk read error

  16. grub>


复制代码


我确实是用的mke2fs格式化的,可它告诉我是FAT格式,我只得把/boot/grub/fat_stage1_5也拷了过来。
下一步咋办呢?是不是FAT格式的就根本不行?
发表于 2004-5-27 11:19:28 | 显示全部楼层
好贴,顶~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表