存储 频道

无盘启动在Debian 4.0 Etch的实现方法

  【IT168 技术】下面为大家详细介绍怎样把Debian 4.0 Etch安装到iSCSI服务器上并实现无盘启动?希望会对大家有所帮助。

  可以分以下几步来做:

  1、在本地硬盘上安装一个Debian 4.0 Etch

  2、编译两个必要的程序iscsistart 和 fwparam_ibft

  3、安装其他必要的软件包

  4、修改网络脚本

  5、创建initramfs脚本

  6、两个脚本的内容

  1、在本地硬盘上安装一个Debian 4.0 Etch

  我们假定如下的工作都已完成:

  安装了Debian Etch的基本系统和全部安全升级,系统安装到单一分区"/"上,这个分区是/dev/sda1,在iSCSI服务器上已经建立了一个target,创建一个逻辑磁盘,容量不小于安装Debian的硬盘。一个正在工作的DHCP服务器。

  2、编译iscsistart和fwparam_ibft

  这两个程序源自open-iscsi,但并不包括在Debian的软件包系统内,因此必须要自己编译。

  首先安装需要的开发工具包

  apt-get build-dep open-iscsi

  apt-get install libdb4.3-dev

  下载open-iscsi的源代码解压编译所需部分:

  wget http://www.open-iscsi.org/bits/open-iscsi-2.0-865.13.tar.gz

  tar xzf open-iscsi-2.0-865.13.tar.gz

  cd open-iscsi-2.0-865.13

  make -C usr

  make -C utils/fwparam_ibft

  我们需要的两个程序是./usr/iscsistart和./utils/fwparam_ibft/fwparam_ibft, 把这两个程序都拷贝到/usr/sbin/下备用。

  3、安装其他必要的无盘启动软件包

  apt-get install iproute

  4、禁止无盘启动的网络脚本

  编辑文件/etc/network/interfaces,使之只包含回环界面(lookback)以及那些将来从iSCSI无盘启动时不使用的网卡界面,假如你只有一个网卡eth0,那么/etc/network/interfaces应该有下面一节:

  auto eth0

  iface eth0 inet manual

  这样ifupdown就会报告网卡状态是“up”,否则某些脚本不能很好的工作,比如挂载网络文件系统。

  5、创建initramfs脚本

  要创建的两个脚本内容在下面的/etc/initramfs-tools/hooks/iscsi_tcp将把/usr/sbin/iscsistart和/usr/sbin/fwparam_ibft以及它们依赖的内核模块iscsi_tcp和ib_iser拷贝到初始化内存盘。

  /etc/initramfs-tools/scripts/local-top/iscsi_tcp被拷贝到初始化内存盘,如果根设备字符是scsi磁盘(/dev/sd*),这个脚本在挂载根文件系统之前就会运行,它将建立与iSCSI服务器的连接,把逻辑磁盘映射为本地磁盘完成根文件系统的安装。做完这些后检查一下文件/etc/initramfs-tools/initramfs.conf,确保它包含这样一行:

  BUSYBOX=y

  升级初始化无盘启动的内存盘:

  dpkg-reconfigure linux-image-$(uname -r)

  现在应该把整个系统传到iSCSI服务器上了,可以临时安装上open-iscsi软件:

  apt-get install open-iscsi

  用iscsiadm程序连接iscsi服务器,连接到已经准备好的target的逻辑磁盘(它在本地的设备符号应该是/dev/sdb),然后用下面命令上传:

  dd if=/dev/sda of=/dev/sdb

  上传完成后用iscsiadm命令断开与iSCSI服务器的连接,停机后摘掉本地硬盘,准备从iSCSI服务器启动,记住将来从iSCSI服务器上启动成功后要删去open-iscsi软件,这个软件在无盘启动的系统上会发生冲突。

  启动之前配置好DHCP服务器,DHCP服务器要支持gPXE无盘启动。有关gPXE的详细内容可查看etherboot.org的网站,我们自己设计的iSCSI服务器内置了支持gPXE的DHCP服务器,只需通过图形界面即可完成配置。

  6、两个无盘启动脚本的内容

  -------------------------------

  脚本/etc/initramfs-tools/hooks/iscsi_tcp

  -------------------------------

  #!/bin/sh

  set -e

  PREREQ=""

  prereqs()

  {

  echo "$PREREQ"

  }

  case $1 in

  prereqs)

  prereqs

  exit 0

  ;;

  esac

  . /usr/share/initramfs-tools/hook-functions

  [ -x /usr/sbin/iscsistart ] && copy_exec /usr/sbin/iscsistart /sbin

  [ -x /usr/sbin/fwparam_ibft ] && copy_exec /usr/sbin/fwparam_ibft /sbin

  [ -x /sbin/ip ] && copy_exec /sbin/ip /sbin

  manual_add_modules iscsi_tcp

  manual_add_modules ib_iser

  -------------------------------

  脚本/etc/initramfs-tools/scripts/local-top/iscsi_tcp

  -------------------------------

  #!/bin/sh

  set -e

  PREREQ="udev"

  prereqs()

  {

  echo "$PREREQ"

  }

  case $1 in

  prereqs)

  prereqs

  exit 0

  ;;

  esac

  case $ROOT in

  /dev/sd*)

  # Evaluate IBFT parameters

  for i in $(fwparam_ibft -b); do export $i; done

  #Bring up the interface used to boot

  for i in $(ls /sys/class/net); do

  IFADDR=$(cat /sys/class/net/$i/address)

  if [ $IFADDR = $iSCSI_INITIATOR_HWADDR ]; then

  echo "Using $i with MAC $IFADDR"

  export iSCSI_INITIATOR_IF=$i

  fi

  done

  modprobe -q iscsi_tcp

  modprobe -q ib_iser

  echo "Bringing up $iSCSI_INITIATOR_IF for iSCSI..."

  ip link set $iSCSI_INITIATOR_IF up

  echo "Setting up networking on $iSCSI_INITIATOR_IF..."

  ip addr add $iSCSI_INITIATOR_IPADDR/$iSCSI_INITIATOR_MASK brd + dev $iSCSI_INITIATOR_IF

  ip route add default via $iSCSI_INITIATOR_GATEWAY

  echo "Connecting to iSCSI target $iSCSI_TARGET_NAME on $iSCSI_TARGET_IPADDR..."

  iscsistart -i $iSCSI_INITIATOR_NAME -t $iSCSI_TARGET_NAME -g 1 -a $iSCSI_TARGET_IPADDR

  sleep 5

  ;;

  esac

0
相关文章