|
|
发表于 2006-6-27 16:12:20
|
显示全部楼层
制作一张软盘linux系统实例与应用
== 制作一张软盘linux系统实例与应用 <一> ==
( 注:整理前段日子的一篇习作,更正了一些网友提出的问题 )
让初接触linux的朋友加深了解linux文件系统,我写这篇实例是避开编译内核,用RH7.2现成内核(大约 794K),busybox软件集成指令,在RH7.3系统下操作。
软盘不能有坏块,通常处理验证方法:
# fdformat -n /dev/fd0H1440
# badblocks /dev/fd0H1440 1440 > badblock.file
[ 如果有坏块指示,要换软盘 ]
软盘linux系统分为boot盘启动部份和root根文件系统部份
1) boot盘启动部份
放入验证过的软盘,Root权限操作,创建ext2文件系统
# mke2fs /dev/fd0
--------------------------
mke2fs 1.27 (8-Mar-2002)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
184 inodes, 1440 blocks
72 blocks (5.00%) reserved for the super user
First data block=1
1 block group
8192 blocks per group, 8192 fragments per group
184 inodes per group
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
--------------------------
[ 注:“mke2fs /dev/fd0”中的“72 blocks (5.00%)”是检修文件系统时预留空间,“mke2fs -m0 /dev/fd0”可释放这些空间,如果制作完成后发觉容量紧张,可以选择这条命令。当操作文件系统档案‘37 mounts or 180 days’,会提示检测文件系统,“e2fsck /dev/fd0”检测文件系统并更新信息。tune2fs -c or -i 是调节 ‘37 or 180’ 这两个参数 ]
挂载磁盘文件系统
# mount -t ext2 /dev/fd0 /mnt/floppy
转移 "lost+found" 目录
# cp -a /mnt/floppy/"lost+found" /tmp/
# rmdir /mnt/floppy/"lost+found"
# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /boot/grub/e2fs_stage1_5 /mnt/floppy/boot/grub/
# cp /boot/grub/stage1 /mnt/floppy/boot/grub/
# cp /boot/grub/stage2 /mnt/floppy/boot/grub/
[ 注:stage1,stage2为装入器,e2fs_stage1_5为两者桥梁 (不需块信息,有些主机配置必需用到) ,能在引导时从ext2文件系统顺利装入stage2。]
# cd /mnt/floppy/boot/grub
# vi grub.conf
-------------------------
default=0
timeout=10
title wei make Linux
[TAB键] root (fd0)
[TAB键] kernel /boot/vmlinuz root=/dev/ram0
[TAB键] initrd /initrd.gz
-------------------------
# ln -s grub.conf menu.lst
离开磁盘目录进行操作
# cd /tmp
# mv /mnt/floppy/boot/grub/e2fs_stage1_5 /mnt/floppy/boot/grub/e2fs_stage1_5.bak
安装grub到软盘
# grub --batch --device-map=/dev/null
-------------------------
grub> device (fd0) /dev/fd0
grub> root (fd0)
grub> setup (fd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... no
Running "install /boot/grub/stage1 d (fd0) /boot/grub/stage2 p /boot/grub/grub
.conf "... succeeded
Done.
grub> quit
-------------------------
# mv /mnt/floppy/boot/grub/e2fs_stage1_5.bak /mnt/floppy/boot/grub/e2fs_stage1_5
[ 注: embed命令有点模糊,可能grub版本低。以上操作好似有点多余,主要是把e2fs_stage1_5文件放在最前。(心理作用!)]
# ls -Ri /mnt/floppy
--------------------------------------------------
/mnt/floppy:
11 boot
/mnt/floppy/boot:
12 grub
/mnt/floppy/boot/grub:
13 e2fs_stage1_5 16 menu.lst 15 stage2
17 grub.conf 14 stage1
---------------------------------------------------
把 RH7.2 (2.4.7-10)内核复制到软盘
# cp vmlinuz-2.4.7-10 /mnt/floppy/boot/vmlinuz
注:如果想测试这部份制作是否可行,先把软盘‘grub.conf’文件备份,把系统‘grub.conf’文件覆盖原软盘文件(/mnt/floppy/boot/grub/grub.conf),然后软盘启动系统进行测试,记住测试完后把备份的软盘‘grub.conf’文件还原。
-----
---
-
== 制作一张软盘linux系统实例与应用 <二> ==
2) root根文件系统部份(initrd.gz)
# cd /tmp
# mkdir flolinux
# cd flolinux
# mkdir {bin,dev,etc,mnt,proc,sbin,tmp}
# mkdir etc/rc.d
# mkdir mnt/{linux,floppy}
# cp -a /dev/{hda,hda[1-9]} dev/
# cp -a /dev/{sda,sda[1-9]} dev/
# cp -a /dev/{console,fd0,null,ram0,tty,tty0} dev/
# cd etc/rc.d
# vi rc.sysinit
-----------------------------
#!/bin/sh
mount -a
-----------------------------
# chmod 755 rc.sysinit
# cd /tmp/flolinux/etc
# vi fstab
-------------------------------------------------
proc /proc proc defaults 0 0
-------------------------------------------------
# vi inittab
-------------------------------------------------
::sysinit:/etc/rc.d/rc.sysinit
:: askfirst:/bin/sh (注意:askfirst前面没有空格,复制小心!)
-------------------------------------------------
[ 注:以上是三个配置文件/tmp/flolinux/etc/inittab,/tmp/flolinux/etc/fstab,/tmp/flolinux/etc/rc.d/rc.sysinit文件名以及文件内容。注:inittab文件内容不留空格。]
检查busybox是否被安装(rpm -q busybox),busybox在 RH 配套软件包里面。
[ rh7.2 :busybox-0.51.062801-3.i386.rpm ]
[ rh7.3 :busybox-0.60.2-4.i386.rpm ]
# rpm -ivh [path]/busybox-0.60.2-4.i386.rpm --test
# rpm -ivh [path]busybox-0.60.2-4.i386.rpm
# cd /tmp/flolinux/bin
# which busybox
/sbin/busybox
把busybox复制到当前目录并改成init文件
# cp /sbin/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
转移目录
# cd /tmp
查看做了什么
# ls -R /tmp/flolinux/
制作镜像文件:
# cd /tmp
# dd if=/dev/zero of=/tmp/image bs=1k count=2048
# losetup /dev/loop0 /tmp/image
# mke2fs -m0 /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
# chmod 755 /tmp/initrd.gz
# sync
initrd.gz 复制至软盘
# cp /tmp/initrd.gz /mnt/floppy/
# cp -a /tmp/"lost+found" /mnt/floppy/
# sync
# sync
# df -h /mnt/floppy
Filesystem Size Used Avail Use% Mounted on
/dev/fd0 1.4M 1.3M 40k 99% /mnt/floppy
# umount /mnt/floppy
测试用软盘启动!
[ 注: 软盘通过处理验证方法(fdformat,badblocks),制作成的linux系统软盘 Use% 是 99% 。当 Use% 是 100%时不一定不能添加数据,只是占用了5%预留空间,这时建议使用“mke2fs -m0 /dev/fd0”,或者考虑从内核大小入手。 ]
---------
------
--- |
|