【iscsi使用】3.无盘启动CentOS7

目录


1.SAN存储及NAS存储

2.CentOS7搭建iscsi服务器

3.无盘启动CentOS7


前言


业务中遇到这样一个问题:

使用别人的GPU服务器,来跑自己的训练数据。

因为数据的特殊性,一旦数据落盘到GPU服务器,硬盘必须交给数据方。数据方也提出,可提供同型号同容量的硬盘更换。但是机器方考虑到硬盘的拆卸及质保问题,否决了这种方式。进而考虑是否可采用 无盘的方式,只是使用服务器的GPU及计算能力,而存储则由存储方通过其他方式进行存储。

考虑思路:

  1. 既然GPU服务器不能落盘,则所有数据都需要在存储设备上,包括OS;
  2. 存储设备需要通过什么样的方式进行连接到GPU服务器呢?如果需要网络则是否需要OS的支持?
  3. SAN网络通过iscsi协议是否可以实现这样的方式?NAS存储是否能够考虑在内?

在这之前,得回忆下,SAN存储和NAS存储的使用场景及异同。

【san存储和搭建iscsi服务】

windows的无盘启动使用场景非常广泛,最常见的就是网吧。而Linux的无盘启动则非常少见。本文实现的是通过配置服务 DHCP+KICKSTART+TFTP+NFS实现CentOS无盘启动。


无盘启动CentOS部署过程


本实验通过在 vmware workstations 中创建虚拟机进行,尽可能的将详细步骤展示出来。

准备工作


  1. 通过 vmware workstations 创建两台虚拟机,并安装 CentOS7.9 系统

关闭selinux 和 firewalld

> cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
  1. 设置两台虚拟机的网络为nat模式

image-20241225182545734

  1. 配置nat网络无需 dhcp 服务

image-20241225182723390

image-20241225182754614

取消 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服务


  1. 安装软件包
> yum install tftp-server syslinux xinetd -y

syslinux注解:
    syslinux是一个功能强大的引导加载程序,并且兼容各种介质
    syslinux是一个小型的linux操作系统,目的是简化linux首次安装的时间,并建立维护或其他特殊用途的启动盘
    如果没有找到pxelinux.0这个文件,可以安装下syslinux
  1. 配置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服务


  1. 安装nfs软件包
> yum install -y nfs-utils rpcbind
  1. 配置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

到此,已经完全配置完毕。


无盘启动测试


创建一台没有磁盘的虚拟机。

image-20241231155937867

直接开机启动。

获取到IP并通过 tftp获取到了引导启动文件。

image-20241231160021984

该主机的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写入性能还是很客观的。
posted @ 2024-12-31 16:31  hukey  阅读(14)  评论(0编辑  收藏  举报