把Debian 4.0 Etch安装到iSCSI服务器上并实现无盘启动

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
oldwood_hmgh
帖子: 7
注册时间: 2008-09-13 21:59

把Debian 4.0 Etch安装到iSCSI服务器上并实现无盘启动

#1

帖子 oldwood_hmgh » 2008-11-03 3:05

怎样把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-isc ... .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脚本
要创建的两个脚本内容在下面的(6、)
/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服务器,只需通过
图形界面即可完成配置,请参看:

http://iscsidiy.kmip.net

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
回复