【iscsi使用】3.无盘启动CentOS7
目录
前言
业务中遇到这样一个问题:
使用别人的GPU服务器,来跑自己的训练数据。
因为数据的特殊性,一旦数据落盘到GPU服务器,硬盘必须交给数据方。数据方也提出,可提供同型号同容量的硬盘更换。但是机器方考虑到硬盘的拆卸及质保问题,否决了这种方式。进而考虑是否可采用 无盘的方式,只是使用服务器的GPU及计算能力,而存储则由存储方通过其他方式进行存储。
考虑思路:
- 既然GPU服务器不能落盘,则所有数据都需要在存储设备上,包括OS;
- 存储设备需要通过什么样的方式进行连接到GPU服务器呢?如果需要网络则是否需要OS的支持?
- SAN网络通过iscsi协议是否可以实现这样的方式?NAS存储是否能够考虑在内?
在这之前,得回忆下,SAN存储和NAS存储的使用场景及异同。
【san存储和搭建iscsi服务】
windows的无盘启动使用场景非常广泛,最常见的就是网吧。而Linux的无盘启动则非常少见。本文实现的是通过配置服务 DHCP+KICKSTART+TFTP+NFS实现CentOS无盘启动。
无盘启动CentOS部署过程
本实验通过在 vmware workstations 中创建虚拟机进行,尽可能的将详细步骤展示出来。
准备工作
- 通过 vmware workstations 创建两台虚拟机,并安装 CentOS7.9 系统
关闭selinux 和 firewalld
> cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
- 设置两台虚拟机的网络为nat模式
- 配置nat网络无需 dhcp 服务
取消 DHCP分配IP
安装DHCP服务
> yum install -y dhcp
> cd /etc/dhcp/
> cp -a dhcpd.conf{,.bak}
> cat << 'EOF' > dhcpd.conf
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.11 10.0.0.100;
option domain-name-servers 10.0.0.2;
option routers 10.0.0.2;
default-lease-time 600;
max-lease-time 7200;
next-server 10.0.0.10;
filename "pxelinux.0";
}
EOF
注意:
@@@ 配置文件说明 @@@
subnet 10.0.0.0 netmask 255.255.255.0 { -> 整个网段
range 10.0.0.11 10.0.0.100; DHCP分配IP范围
option domain-name-servers 10.0.0.2; 这里填写网关的地址
option routers 10.0.0.2; 路由的地址,网关即路由
default-lease-time 600; dhcp默认租约时间(单位:秒)
max-lease-time 7200; dhcp默认最大租约时间(单位:秒)
next-server 10.0.0.10; 这里配置为本机的IP地址
filename "pxelinux.0"; 默认写法
启动服务:
> systemctl enable --now dhcpd
验证:新建一台虚拟机,如果能通过dhcp获取到10.0.0.11-10.0.0.100之间的IP则表示DHCP工作正常。
配置tftp服务
- 安装软件包
> yum install tftp-server syslinux xinetd -y
syslinux注解:
syslinux是一个功能强大的引导加载程序,并且兼容各种介质
syslinux是一个小型的linux操作系统,目的是简化linux首次安装的时间,并建立维护或其他特殊用途的启动盘
如果没有找到pxelinux.0这个文件,可以安装下syslinux
- 配置tftp
> vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /pxelinux -c #修改默认目录,注意必须最后带上 -c
disable = no #改为no
per_source = 11
cps = 100 2
flags = IPv4
}
创建目录
> mkdir -p /pxelinux
启动tftp服务
> systemctl enable --now xinetd
查看是否启动
>netstat -a | egrep tftp
udp 0 0 0.0.0.0:tftp 0.0.0.0:*
配置nfs服务
- 安装nfs软件包
> yum install -y nfs-utils rpcbind
- 配置nfs并启动
> mkdir -p /pxelinux/nfsroot
> cat /etc/exports
/pxelinux/nfsroot *(rw,no_root_squash,async,insecure)
启动nfs
> systemctl enable --now nfs
设置PXE启动
> cp -a /usr/share/syslinux/pxelinux.0 /pxelinux/
> mkdir -p /mnt/iso
挂载iso镜像文件
> mount /dev/sr0 /mnt/iso/
拷贝引导文件
> cp -a /mnt/iso/isolinux/vmlinuz /pxelinux/
> mkdir -p /pxelinux/pxelinux.cfg
> cp -a /mnt/iso/isolinux/isolinux.cfg /pxelinux/pxelinux.cfg/default
修改default文件如下:
default ks
timeout 600
display boot.msg
label ks
kernel vmlinuz #该文件就是上面拷贝的文件,必须存在
append initrd=initrd.img root=nfs:10.0.0.10:/pxelinux/nfsroot,proto=tcp,nfsvers=3,nolock selinux=0 ip=dhcp rw nomodeset vga=0x314
initrd=initrd.img 是待会要制作的文件
root=nfs:10.0.0.10:/pxelinux/nfsroot,proto=tcp,nfsvers=3,nolock 这里注意你的nfs必须能够正常工作,而且必须申明使用tcp v3版本。
selinux=0 关闭selinux
ip=dhcp ip使用dhcp获取
rw nomodeset vga=0x314 分辨率设置
拷贝系统文件
接下来需要拷贝系统文件到 /pxelinux/nfsroot
下
rsync -avz --progress --exclude='/pxelinux' --exclude='/proc' --exclude='/sys' --exclude='/tmp' --exclude='/var/tmp' --exclude='/media' \
--exclude='/mnt' --exclude='/etc/mtab' --exclude='/run' --exclude='/opt' --exclude='/dev' /* /pxelinux/nfsroot
说明:使用 rsync 拷贝,通过 --exclude排除无需拷贝的系统文件
拷贝完成后,创建必须存在的目录:
> cd /pxelinux/nfsroot/
> mkdir -p proc sys tmp var/tmp media mnt opt run dev
删除网卡信息
> cd /pxelinux/nfsroot/
> rm -rf etc/sysconfig/network-scripts/ifcfg-eth*
创建dev目录下设备文件
> cd dev
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
修改fstab内容
> vim etc/fstab
10.0.0.10:/pxelinux/nfsroot / nfs defaults,sync,rw,nolock 0 0
tmpfs /dev/shm tmpfs defauls 1 1
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
注意:fstab需要修改为上面的内容,注意nfs的写法。
生成initrd.img文件
> yum install -y dracut dracut-network
> chroot /pxelinux/nfsroot/
dracut initrd.img `uname -r`
等待一会会生成一个img文件
生成完成后,退出
exit
> cd /pxelinux/nfsroot/
> chmod 644 initrd.img
> mv initrd.img /pxelinux/
查看initrd.img 中是否包含nfs,包含nfs才能使用,如何才能包含?直接使用 yum install -y nfs-utils rpcbind 即可。
> lsinitrd /pxelinux/initrd.img | egrep nfs
到此,已经完全配置完毕。
无盘启动测试
创建一台没有磁盘的虚拟机。
直接开机启动。
获取到IP并通过 tftp获取到了引导启动文件。
该主机的IP为:10.0.0.11 启动成功后,通过ssh连接到该主机。
> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
> df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 20M 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
10.0.0.10:/pxelinux/nfsroot nfs 96G 3.2G 92G 4% /
tmpfs tmpfs 394M 0 394M 0% /run/user/0
通过磁盘命令查看,根分区确实通过nfs挂载所得,在根目录下创建文件,等同于在服务主机 /pxelinux/nfsroot
下一样。
无盘客户端创建:
> dd if=/dev/zero of=/bigfile bs=1M count=1024
服务器查看:
> ll /pxelinux/nfsroot/bigfile
2.0G -rw-r--r-- 1 root root 1.0G 2024-12-31 16:03:24 /pxelinux/nfsroot/bigfile
简单测试下性能:
查看两侧网络速率
服务器:
> ethtool eth0| egrep -i speed
Speed: 1000Mb/s
无盘客户端:
> ethtool ens33| egrep -i speed
Speed: 1000Mb/s
两个都是千兆网络,在无盘客户端使用dd写入文件
> dd if=/dev/zero of=/root/bigfile bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 5.89168 s, 182 MB/s
通过千兆nfs-v3写入性能还是很客观的。