通过硬盘镜像启动LINUX(WINXP)

来源:互联网 发布:帝国cms添加统计代码 编辑:程序博客网 时间:2024/05/17 03:39

通过硬盘镜像启动Linuxwinxp)的试验

1.试验目的

       1.熟悉通过dd获得硬盘映像后,再部署出去后让linux的启动

       2.熟悉ramdisk的原理及制作

       3.解决节点上安装不同操作系统的问题

2.试验环境

     浪潮NF180服务器1台,配置如下:Linux操作系统为2.4.20-8smp,

     浪潮NF260服务器1台,配置如下:Linux操作系统为2.4.20-15smp

一根双绞线。

NF180作为NFSdhcp)的服务器(文中为server),

NF260作为启动的客户端(文中为client

3.试验原理

     请查阅PXENFS原理

4.试验过程

1).配置server端的dhcp服务

dhcp服务器IP10.151.11.149

PXE启动的客户端mac地址为00:0C:76:AD:94:3B

PXE启动的客户端IP10.151.11.176

配置/etc/dhcpd.conf文件,配置如下(红色标识为关键修改部分)

####################################

deny unknown-clients;

option subnet-mask 255.255.0.0;

option broadcast-address 10.151.255.255;

option domain-name "langchao";

option routers 10.151.11.149;

ddns-update-style none;

subnet 10.151.0.0 netmask 255.255.0.0 {

      group{

         host node{

                   hardware ethernet 00:0C:76:AD:94:3B;

                   fixed-address 10.151.11.176;

                   filename "pxelinux.0";

                }

           }

}

####################################

配置完毕后,使用 service dhcpd start 启动dhcpd服务。

 

 

 

 

 

 

 

 

 

 

 

 

2).配置server端的tftp服务

     linux内核自带的tftp-server即可

通过xinetd来使用tftp服务,我的/etc/xinetd.conf文件如下

####################################

service tftp

{

        Disable                 = no

socket_type             = dgram

        proctocol               = udp

        wait                    = yes

        user                    = root

        server                  = /usr/sbin/in.tftpd

        server_args             = -s /tftpboot

        per_source              = 11

        cps                     = 100 2

        flags                   = Ipv4

}

####################################

配置完毕后,使用service xinetd start 启动tftp服务。

 

 

 

 

 

 

 

 

3).配置server端上client启动时需要的文件

server上建立目录 /tftpboot , /usr/bin/syslinux/pxelinux.0(如没有syslinux,则需要先安装RPM包)拷贝到/tftpboot/, pxelinux.0为启动文件,同时在/tftpboot下新建一个pxelinux.cfg目录,客户端启动时会在此目录下找与其IP相应的配置文件,该文件的名称规则为IP地址的16进制的输出(比如客户端通过dhcp得到的IP10:151:11:176,则启动配置文件名为0A970BB0),文件格式为

########################

            DEFAULT linux

PROMPT 0

LABEL linux

KERNEL vmlinuz

append initrd=initrd rw root=/dev/ram0 init=/linuxrc

####################################################

 

 

 

 

4).制作RamDiskinitrd image

Ram:内存,Disk:磁盘,RamDisk就是指使用你的一部分内存空间来模拟出一个硬盘分区,实际是从内存中划出一部分作为一个分区使用,换句话说,就是把内存一部分当做硬盘使用,你可以向里边存文件。

拷贝client端原本的/boot/ initrd-2.4.21-15.ELsmp.img作为启动的img(后面的image)

################################################

          cd /boot

          cp –a initrd-2.4.21-15.ELsmp.img /tftpboot/initrd.img

           mv initrd.img initrd.gz

          gzip –d initrd.gz

          mount –o loop initrd /tmp

          cd /tmp

###############################################

image中添加命令

   /bin或者/sbin或者/usr/sbin下的命令拷贝到/tmp/bin下(使initrd中包括这些命令)

   按级别分:

       bash,chroot,init这是在启动时必须的命令;

       fdiskinsmodlsmodrmmod gunzipgzipbusyboxls这些是启动

clientlinux后可以使用的命令,根据需要可删除,也可加载别的命令;

将这些命令拷贝到/tmp/bin下,就需要拷贝这些命令对应的模块文件,才能保证正确使用,先使用ldd 查找当前命令需要的lib库,然后将其拷贝到/tmp/lib

该试验最后的模块文件为,其中libld)开头的文件为后来加入的。

-rwxr--r--    1 0        0          214188 2004-09-02  aic79xx.o

-rwxr--r--    1 0        0            5076 2004-09-02  diskdumplib.o

-rwxr--r--    1 0        0          115000 2004-09-02  ext3.o

-rwxr--r--    1 0        0           72380 2004-09-02  jbd.o

-rwxr-xr-x    1 0        0          103840  3 28 06:42 ld-linux.so.2

-rwxr-xr-x    1 0        0           19248  3 30 01:41 libacl.so.1

-rwxr-xr-x    1 0        0            7148  3 30 01:41 libattr.so.1

-rwxr-xr-x    1 0        0         1567768  3 28 06:41 libc.so.6

-rwxr-xr-x    1 0        0           14868  3 28 06:41 libdl.so.2

-rwxr-xr-x    1 0        0           11784  3 28 06:41 libtermcap.so.2

-rwxr--r--    1 0        0          142340 2004-09-02  scsi_mod.o

-rwxr--r--    1 0        0           19800 2004-09-02  sd_mod.o

 

 

 

 

c)添加驱动程序

    /tmp下 新建文件夹drv,添加client端的网卡和nfs驱动(如映象获得不是通过nfs传给服务器,还需要加载别的驱动,例如:如果将获得的硬盘映象存在SAN,则添加了HCA卡的驱动),该试验只需要添加nfs和网卡的驱动

    cd /lib/modules/2.4.20-8smp/

找到modules.dep文件(记录了各个驱动模块所依赖的模块)

###############################################

………………………………………

  /lib/modules/2.4.20-8smp/kernel/fs/nfs/nfs.o:   /lib/modules/2.4.20-8smp/kernel/fs/lockd/lockd.o /

        /lib/modules/2.4.20-8smp/kernel/net/sunrpc/sunrpc.o

   ………………………………………

表明nfs.o最先依赖sunrpc.o,其次lockd.o,然后在加载nfs.o

同理加载网卡的驱动,网卡的驱动一般就是百兆或者千兆

/lib/modules/2.4.20-8smp/kernel/drivers/net/e100/e100.o:

/lib/modules/2.4.20-8smp/kernel/drivers/net/e1000/e1000.o:

该试验中client端网卡为千兆网卡,故最后drv目录结构为:

    drwxr-xr-x    2 0        0            1024  3 28 07:39 net

drwxr-xr-x    2 0        0            1024  3 28 07:39 nfs

 

 

 

 

nfs目录下(nfs需要的驱动)

-rwxr--r--    1 0        0           75764  3 28 07:36 lockd.o

-rwxr--r--    1 0        0          125108  3 28 07:35 nfs.o

-rwxr--r--    1 0        0          107856  3 28 07:39 sunrpc.o

net目录下(网卡需要的驱动)

   -rwxr--r--    1 0        0           89684  3 30 01:38 e1000.o

 

 

 

 

d)修改/tmp/etc/inittab文件

      修改initrd中的etc/inittab文件,修改后如下:

###############################################

id:5:initdefault:

# System initialization.

si::sysinit:/bin/bash

#10:0:wait:/etc/rc.d/rc 0

#11:1:wait:/etc/rc.d/rc 1

#l2:2:wait:/etc/rc.d/rc 2

#l3:3:wait:/etc/rc.d/rc 3

#l4:4:wait:/etc/rc.d/rc 4

#l5:5:wait:/etc/rc.d/rc 5

#l6:6:wait:/etc/rc.d/rc 6

 

 

 

 

# Trap CTRL-ALT-DELETE

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

 

 

 

 

# When our UPS tells us power has failed, assume we have a few minutes

# of power left.  Schedule a shutdown for 2 minutes from now.

# This does, of course, assume you have powerd installed and your

# UPS connected and working correctly.

#pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

 

 

 

 

# If power was restored before the shutdown kicked in, cancel it.

#pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

 

 

 

 

 

 

 

 

# Run gettys in standard runlevels

#1:2345:respawn:/sbin/mingetty tty1

#2:2345:respawn:/sbin/mingetty tty2

#3:2345:respawn:/sbin/mingetty tty3

#4:2345:respawn:/sbin/mingetty tty4

#5:2345:respawn:/sbin/mingetty tty5

#6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5

#x:5:respawn:/etc/X11/prefdm -nodaemon

###############################################

 

 

 

 

e)修改linuxrc

    可以将/tmp/drv下的驱动写在linuxrc中,这样当client启动时就自动加载驱动了;(试验中我是采用client启动后,手动insmod xxxx驱动的,效果一样)

    修改后的linuxrc文件为

###############################################

#!/bin/nash

 

 

 

 

echo "Loading scsi_mod.o module"

insmod /lib/scsi_mod.o max_scsi_luns=128

echo "Loading sd_mod.o module"

insmod /lib/sd_mod.o

echo "Loading diskdumplib.o module"

insmod /lib/diskdumplib.o

echo "Loading aic79xx.o module"

insmod /lib/aic79xx.o

echo "Loading jbd.o module"

insmod /lib/jbd.o

echo "Loading ext3.o module"

insmod /lib/ext3.o

echo Mounting /proc filesystem

mount -t proc /proc /proc

echo Creating block devices

mkdevices /dev

echo Creating root device

mkrootdev /dev/root

echo 0x0100 > /proc/sys/kernel/real-root-dev

echo Mounting root filesystem

 

 

 

 

 

 

 

 

#mount -o defaults --ro -t ext3 /dev/root /sysroot

#pivot_root /sysroot /sysroot/initrd

#umount /initrd/proc

 

 

 

 

exec /bin/chroot . /sbin/init < dev/console > dev/console 2>&1

###############################################

5).制作 vmlinuz

       这是client启动需要的内核,在client启动的配置文件中表明

制作过程如下:

    cd /root

    cp –a vmlinuz-2.4.20-8smp /tmp/vmlinuz

6).配置NFS服务

修改server端的/etc/exports文件,提供nfs服务

修改后文件内容为:

/mnt/sdb   *(rw,async,all_squash)

    service  nfs start启动nfs服务

7).启动client

配置client从网卡启动

启动成功后,配置client端的网卡,mountserver端的nfs目录

   busybox  ifconfig eth0 10.151.11.176 netmask 255.255.0.0

   busybox  mount –o nolock 10.151.11.149:/mnt/sdb /drv

8).制作client的硬盘映象

cd /drv

busybox dd if=/dev/sda bs=1024k | gzip –v9 > fs.gz

(………漫长的等待………)

9).分发client的硬盘映象

执行试验过程的步骤7)后

busybox dd if=fs.gz | gzip –v > /dev/sda

10).启动client

修改启动顺序,从硬盘启动,ok

11).更改client的操作系统

client上装了win2003server,装完后重复制作硬盘映象的过程

通过网卡重启client,成功。

 

 

 

 

5.试验总结

   试验过程中,出现了如下问题:

1.              有时候client启动时发现得到的IP并不是该server配置的IP,导致无法找到启动启动配置文件(根据IP规则得到的文件)

分析:由于该网段内还存在其他的dhcp服务器,所以出现此类问题

解决:用双绞线将两台机子对连,或者断开外部的网络,使局域网内只有server作为dhcp的服务器

2                     client通过pxe启动后,执行到Creating block devices(initrd中的linuxrc文件可知,执行mkdevices /dev过程),系统不往下走了;

分析:可能缺少部分驱动程序;

解决:第一次作试验的过程中,是从server端拷贝的initrd.img以及相应的驱动程序,发现好像少了一些驱动程序,考虑到serverclient硬件的差异,在第二次试验过程中,重新作initrd.img时,用client端自带的initrd.img作为ramdisk

发现此次的initrd中多出了一个aic79xx.o,在重启client后,发现错误解决。

3                     客户端通过pxe启动后,发现mount不上NFS

分析:权限没有设置正确;

解决:将/mnt/sdb 重新修改权限,问题解决

 

 

 

 

原创粉丝点击