无盘安装-linux篇
出自Linux Home Server
无盘安装-linux篇
iscsi+pxe 实现无盘安装,无盘启动-linux篇
PXE 环境设置
PXE 环境需要dhcp, tftp, 看个人习惯,有很多组合, 我习惯用dnsmasq, 小巧又功能强大
配置文件大致包含以下几项
dhcp-range=192.168.1.50,192.168.1.150,255.255.255.0,12h
dhcp-option=3,192.168.1.1
expand-hosts
domain=linuxce.cn
dhcp-host=00:0c:29:34:67:9a,net:diskless
dhcp-option=net:diskless,17,"iscsi:192.168.1.147::::iqn.2008.com.linuxce:linuxce.windiskless.20090210124113"
dhcp-option=44,192.168.1.6
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/tftpboot
红色的两项是要给gpxe 使用,从gpxe 启动不支持大于1024 cylinder 的大硬盘,奇怪的是在虚拟机中把网卡认做成10M,启动速度奇慢
在调试阶段出现最多的问题是拼写错误,最好不使用服务,而是在命令行下面带调试参数
dnsmasq –d --log-dhcp
pxe 的配置菜单如下
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
menu background splash.jpg
menu title Welcome to Fedora 10!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
label linux
menu label ^Install or upgrade an existing system
kernel vmlinuz
append initrd=initrd.img
label iscsi
menu label boot diskless linux from iscsi
kernel vmlinuz_diskless
append initrd=initrd_diskless
label gpxe
menu label boot diskless windows from iscsi
kernel gpxe.lkrn
后面会提到那两个启动文件vmlinuz_diskless, initrd_diskless如何获得
iscsi 环境设置
现在支持iscsi 服务的系统很多, 我用的是LHS-200 iscsi 存储器, 一个小巧的黑盒子, 装上硬盘,开机就可使用, 要高性能可以装一个PC 版本, 嫌麻
烦可以到他的网站http://www.linuxce.cn 抓一个已经配置好的虚拟机来用,
Linux Home Server 谈不上有什么复杂配置, 首先登录

第一次运行时配置一下重建存储,然后为无盘工作站划分一部分存储空间

然后为应用分配空间即可

安装linux
和通常的linux 安装没有太多的区别,安装时只需要注意三点,安装源选ftp, 安装硬盘选iscsi, 分区必须手动指定,不能自动处理,发几张图就明白了,我用的是fedora 10,
把安装光盘的iso 中image/pxeboot 中的vmlinuz 和initrd.img 拷贝到PXE 需要的目录即可,安装测试是在vmware workstation 中做,主要是方便截图




硬盘选项选Advanced Storage Configure,加上iscsi 盘


需要手工分区


在pxe 中配置启动菜单
安装完成后,需要把启动用的vmlinuz, initrd.img 拷贝到PXE 环境, 由于这两个文件存储在iscsi 服务器上,所以先要连到iscsi 服务器,挂接硬盘,才能拷贝出来
连接iscsi 服务器
iscsiadm -m discovery -t st-–p 192.168.1.147 -l
用fdisk -l 可以看到多出来的硬盘, 挂上/dev/sdc1, 看一下 grub 下的配置, 把对应的vmlinuz-xxx, initrd-xxx.img 拷贝到PXE 目录
一直很奇怪启动程序是如何找到 iqn 的,看一下initrd-xxx.img 中的init 就明白了,原来是安装程序写死了
#!/bin/nash
mount -t proc /proc /proc
setquiet
echo Mounting proc filesystem
echo Mounting sysfs filesystem
mount -t sysfs /sys /sys
echo Creating /dev
mount -o mode=0755 -t tmpfs /dev /dev
mkdir /dev/pts
mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts
mkdir /dev/shm
mkdir /dev/mapper
echo Creating initial device nodes
mknod /dev/null c 1 3
mknod /dev/zero c 1 5
mknod /dev/systty c 4 0
mknod /dev/tty c 5 0
mknod /dev/console c 5 1
mknod /dev/ptmx c 5 2
mknod /dev/fb c 29 0
mknod /dev/tty0 c 4 0
mknod /dev/tty1 c 4 1
mknod /dev/tty2 c 4 2
mknod /dev/tty3 c 4 3
mknod /dev/tty4 c 4 4
mknod /dev/tty5 c 4 5
mknod /dev/tty6 c 4 6
mknod /dev/tty7 c 4 7
mknod /dev/tty8 c 4 8
mknod /dev/tty9 c 4 9
mknod /dev/tty10 c 4 10
mknod /dev/tty11 c 4 11
mknod /dev/tty12 c 4 12
mknod /dev/ttyS0 c 4 64
mknod /dev/ttyS1 c 4 65
mknod /dev/ttyS2 c 4 66
mknod /dev/ttyS3 c 4 67
/lib/udev/console_init tty0
daemonize --ignore-missing /bin/plymouthd
plymouth --show-splash
echo Setting up hotplug.
hotplug
echo Creating block device nodes.
mkblkdevs
echo Creating character device nodes.
mkchardevs
echo "Loading crc32c module"
modprobe -q crc32c
echo "Loading iscsi_tcp module"
modprobe -q iscsi_tcp
echo "Loading mii module"
modprobe -q mii
echo "Loading pcnet32 module"
modprobe -q pcnet32
echo Bringing up eth0
network --device eth0 --bootproto dhcp
echo Attaching to iSCSI storage
/bin/iscsistart -t iqn.2008.com.linuxce:linuxce.linuxdiskless.20090210124113 -i
iqn.2005-03.com.max:01.c33d08 -g 1 -a 192.168.1.147
mkblkdevs
resume UUID=6e8af94c-e235-47e8-907b-fc4c2e907346
echo Creating root device.
mkrootdev -t ext3 -o defaults,ro UUID=316e2736-43b7-47b8-9b5d-40b89a52a192
echo Mounting root filesystem.
mount /sysroot
cond -ne 0 plymouth --hide-splash
echo Setting up other filesystems.
setuproot
echo Copying DHCP lease
cp /var/lib/dhclient/dhclient.leases /sysroot/dev/.dhclient-eth0.leases
loadpolicy
plymouth --newroot=/sysroot
echo Switching to new root and running init.
switchroot
echo Booting has failed.
sleep -1
由于启动程序只需要从网络获得 vmlinuz, initrd.img 两个文件就基本可以工作,所以传输量不大, 时间延迟还过得去,但从gpxe 启动时间就非常长,几乎不能忍受
