自己动手制作linux硬盘启动

要求: 有一个已安装的linux系统和一个空的硬盘, 这里用VMWare 虚拟机作测试环境,用knoppix作linux系统。

用这样的环境仅仅是为了方便说明。

1) 从光盘启动knoppix

2) 用fdisk为硬盘分区 (记得要切换到root用户,VMWare创建系统时默认为SCSI硬盘, 不过这里假设硬盘为hda)

3) mke2fs hda1

4) mount /dev/hda1 /mnt/hda1 && cd /mnt/hda1

4) mkdir -p bin lib etc dev sbin boot/grub home

5) cp /usr/share/grub/i386-redhat/stage1 /mnt/hda1/grub/

cp /usr/share/grub/i386-redhat/stage2 /mnt/hda1/grub/

6) 建/mnt/hda1/grub/menu.lst文件,内容如下:

cat >> menu.lst << END

>default 0

>timeout 10

>title my-linux

> root (hd0,0)

> kernel /boot/vmlinuz root=/dev/hda1 rw

7) 拷贝 bash mknod chmod cat mkdir rm echo cp mv ln ls mount umount init mingetty login等常用文件

到 /mnt/hda1/bin下, 不过要记得拷贝他们的链接库so文件到/mnt/hda1/lib下,可以用ldd命令

查看他们需要的库文件。这些命令也可以用bushbox和tinylogin来代替,这里不多说。

ln -s bash sh

8) 建建设备文件 hda hda1 hdc(一般为cdrom) console tty0~tty6

mknod hda b 3 0

mknod hdc b 22 0

mknod hda1 b 3 1

mknod console c 5 1

mknod tty0 c 4 0

mknod tty1 c 4 1

.......

9) 拷贝内核文件,重命名为vmlinuz

cp /boot/vmlinuz-2.6.xxxx /mnt/hda1/boot/vmlinuz

10) umount /mnt/hda1

11) 使用grub引导。执行grub命令,

grub

#root (hd0,0)

#setup (hd0)

提示制作grub引导成功

12) 重起。从硬盘启动。。。启动到最后,会出现init失败,系统panic

13) 制作inittab

再次从光盘启动knoppix。

mount /dev/hda1 /mnt/hda1 && cd /mnt/hda1

cd etc && cat inittab

>#id:3:sysinit:/etc/rc.d/rc.init 启动时的系统设置,这里可以不要

>tty1::respawn:/bin/mingetty tty1

>tty2::respawn:/bin/mingetty tty2

......

>tty6::respawn:/bin/mingetty tty6

>END

这里只配置了6个登录控制台。因为mingetty会调用login来让用户登陆,而login又依赖/etc/passwd来

检查用户的合法性,而login又需要 /etc/nsswitch.conf来描述如何读 /etc/passwd数据库,所以我们要配置

这两个文件.

cat >> /mnt/hda1/etc/passwd <<END

>root::0:0::/home:/bin/bash

>END

cat >> /mnt/hda1/etc/nsswitch.conf <<END

>passwd: files

>shadow: files

>group: files

>hosts: files dns

>END

/etc/shadow是passwd的影子文件,起保护密码作用。/etc/group是描述组的文件。这里这两个文件都忽略了。

还可以建一个/etc/issue文件,用作每次提示用户登陆之前的提示信息,

cat >> /mnt/hda1/etc/issue <<END

> HELLO, WELCOM!

>END

另外,还需要拷贝/lib/libnss_xxx.so 到 /mnt/hda1/lib/

umount /mnt/hda1

14) 从硬盘重起。。。。

HELLO,WELCOM!

(none)login:

输入root就可以登陆了,可以用alt+F1~F6来切换控制台。

写得比较简单,如果写详细有太多的内容。

经验分享 程序员 微信小程序 职场和发展