一种无盘系统的镜像文件制作及启动方法与流程

文档序号:17719317发布日期:2019-05-22 02:02阅读:2402来源:国知局
一种无盘系统的镜像文件制作及启动方法与流程

本发明涉及计算机无盘启动技术,具体涉及一种无盘系统的镜像文件制作及启动方法。



背景技术:

一般来说,操作系统都是安装在硬盘中,即所谓的“有盘启动”。然而在高性能计算、嵌入式系统、网吧、酒店、教育等众多领域中的某些计算机客户端都没有本地磁盘,这些系统中计算机客户端需要从远程服务器加载和运行操作系统,即“无盘启动”。无盘启动系统中计算机客户端的所有信息都保存在内存中,如:操作系统、系统在运行过程中产生的日志、内核运行信息等都在内存中,一旦系统宕机或重启,日志和内核运行信息都将丢失。

在无盘系统中,将无盘系统内核及镜像所在的服务器称为“无盘服务器”;将通过网络从无盘服务器上下载内核及镜像到本机,并通过网络来启动操作系统的计算机客户端称为“无盘客户端”;把在无盘客户端启动的操作系统称为“目标操作系统”。无盘启动具有下述优点:1)管理和维护简单、安全性高,无盘系统配置只要在服务器上进行修改,无盘系统客户端重新启动系统即可实现所有节点的配置一致化。2)节能环保、系统组装密度高。无盘系统设计时可以减少i/o接口,没有本地磁盘使计算机功耗大幅下降,系统更加节能,同时没有本地磁盘单结点占用的空间减小,系统组装密度更高。

传统的无盘计算机启动方法基本上都是基于pxe+dhcp+tftp实现的,包括以下步骤:

第一步,编译目标操作系统的内核。

第二步,生成目标操作系统根文件系统镜像,镜像的具体内容由目标操作系统的类型及用户需求来决定,并将内核模块、系统软件、库文件、头文件等目标操作系统需要用到的文件按照linux系统目录树的规则组织并打包成一个镜像文件。

第三步,配置dhcp服务,用于向无盘计算机动态分配ip。

第四步,配置tftp服务,并在该服务的工作目录下放置目标操作系统内核与镜像文件。

第五步,在bios中将支持pxe启动的网卡设置为第一启动,保存后重启动无盘客户端,通过dhcp服务为无盘计算机动态分配ip地址,从指定的tftp服务器下载目标操作系统的内核与镜像到无盘客户端的内存中,利用引导程序加载并启动目标操作系统,完成无盘客户端的启动。

在实际使用中,传统的无盘计算机启动方式存在如下缺陷:1)定制目标操作系统镜像时,须将系统需要的内核模块、系统软件、库文件、头文件等全部文件按照linux目录树规则组织打包到镜像文件中,导致镜像文件过大,系统引导时通过网络传输文件时间长,网络压力大,同时较大的镜像文件解压到内存的时间也会比较长。同时内核对镜像大小是有限制的。2)由于用户需求不同,在定制镜像时无法知道需要的所有文件,因此,当用户需求频繁改变时,镜像文件也需要频繁修改,由于镜像文件比较大,每次打包时间都比较长,费时费力。3)有些文件其实不是必须的,或有些项目完成后,相应的软件是不需要放在镜像中的。由于所有的文件都在镜像中按照linux系统的目录树规则进行组织,库文件之间的相互依赖比较复杂,对于删除不需要的软件及其依赖也比较困难。4)默认情况下,无盘系统日志服务程序rsyslog将日志保存在内存中,系统宕机或重启时,日志会丢失,无法分析和排查系统故障,另外当出现内核错误(kernelpanic),通常通过显示器只能看到最后一个屏幕上的信息,真正触发内核错误的原因已经看不到了,无法分析内核错误确切原因。



技术实现要素:

本发明要解决的技术问题:针对现有技术的上述问题,提供一种无盘系统的镜像文件制作及启动方法,本发明对传统的pxe+dhcp+tftp无盘启动方法进行改进,将目标操作系统在内核启动时不需要、可在目标操作系统内核成功启动后再加载的一部分文件,打包存放在nfs服务器上,待目标操作系统启动后挂载nfs,再解压到无盘客户端系统中,这样可以极大的减少镜像文件的大小。同时本发明还实现了将系统日志保存在nfs服务器上,当系统发生宕机时,将内核信息转储到nfs服务器上,便于系统故障分析。

为了解决上述技术问题,本发明采用的技术方案为:

一种无盘系统的镜像文件制作方法,实施步骤包括:

1)针对无盘系统计算机客户端的目标操作系统,配置用于实现内核启动及挂载nfs服务的内核基本模块,配置完成后进行模块编译生成内核及内核模块;

2)根据内核及内核模块生成目标操作系统的根文件系统目录,在所述根文件系统目录中增加内核启动后的执行脚本,所述执行脚本被配置为挂载nfs服务、以及从nfs服务器中获取系统软件、应用软件、驱动程序;

3)在所述根文件系统目录中增加kdump工具,且将kdump工具配置为将系统宕机日志存储到指定的nfs服务器上,将kdump工具配置为开机启动kdump服务;

4)在所述根文件系统目录中建立系统日志服务脚本将系统日志重定向到nfs服务器;

5)将目标操作系统的根文件系统目录打包生成目标操作系统镜像。

步骤1)中用于实现内核启动及挂载nfs服务的内核基本模块包括:目标cpu体系结构支持模块、网络驱动模块、通信协议模块、文件系统镜像支持模块、内存文件系统模块、网络文件系统模块以及配置内核切换功能模块。

步骤2)中的根文件系统为initramfs文件系统。

步骤2)中生成无盘系统的根文件系统的详细步骤包括:

2.1)创建基于initramfs文件系统的根文件系统目录/opt/initramfs;

2.2)将linux系统自带的根文件系统镜像解压到根文件系统目录/opt/initramfs下;

2.3)将根文件系统目录下的内核模块目录/opt/initramf/lib/modules/下的文件夹删除,将进行模块编译生成内核以及内核模块复制到根文件系统目录下的内核版本对应的内核模块目录/opt/initramfs/lib/modules/<kernel_version>/下,其中<kernel_version>为内核的版本号;

2.4)在根文件系统目录/opt/initramfs中配置生成initramfs根文件系统启动执行的第一个初始化程序init,以便通过初始化程序init加载真正的根文件系统;

2.5)在根文件系统目录/opt/initramfs中配置目标操作系统的/etc/fstab开机挂载的文件系统,并将内核切换功能模块switch_root,busybox工具复制到/usr/bin目录下;

2.6)在所述根文件系统中的自动启动目录/opt/initramfs/etc/init.d/下增加内核启动后的启动脚本setup,所述启动脚本setup被配置为挂载nfs服务、并调用nfs挂载目录下的无盘系统配置程序dlfa_config.sh,通过nfs挂载目录下的无盘系统配置程序dlfa_config.sh从nfs服务器中获取系统软件、应用软件、设备驱动程序。

步骤2.4)中初始化程序init被配置为包括下述执行步骤:

2.4.1)创建目标操作系统的根目录/sysroot;

2.4.2)挂载proc文件系统到目标操作系统的/proc目录;

2.4.3)挂载sysfs文件系统到目标操作系统的/sys目录;

2.4.4)挂载tmpfs文件系统到目标操作系统的根目录/sysroot,判断挂载tmpfs文件系统是否成功,如果挂载成功则跳转执行步骤2.4.5);否则,退出;

2.4.5)将根目录/下的所有文件移到/sysroot目录下;

2.4.6)用切换工具switch_root切换到新的根目录/sysroot,即将/sysroot当作根目录/,并执行初始化引导程序/sbin/init引导真正的文件系统。

步骤2.6)中的启动脚本setup被配置为包括下述执行步骤:

2.6.1)设置内核文件大小;

2.6.2)执行dhcp客户端动态获取ip地址;

2.6.3)从/proc/cmdline中获取内核传来的参数,包括:nfs_src表示nfs服务器ip地址及其共享目录,nfs_dist表示nfs在无盘客户端的挂载目录,并根据内核传来的参数挂载nfs文件系统;

2.6.4)根据网卡的mac地址查主机配置文件<nfs_mount_point>/etc/hostconfig以获取mac地址以及主机名,主机配置文件包含mac地址、主机名、ip地址三种信息,如果主机配置文件中存在相应的mac地址则获取其主机名hn,并将主机名设置为hn,如果不存在这个mac地址,则按照指定规则在主机配置文件中注册一个新的主机hn_new,将主机名设置为hn_new;

2.6.5)调用执行无盘系统配置程序dlfa_config.sh。

步骤3)的详细步骤包括:

3.1)在所述根文件系统目录中安装kdump工具kexec-tools;

3.2)将kdump配置文件/etc/kdump.conf的nfs、path、core_collector几个参数前面的注释符号“#”去掉,并将参数nfs的服务器地址修改为nfs服务器的ip地址、导出目录修改为nfs服务器上的指定目录,从而将kdump工具配置为将系统宕机日志存储到指定的nfs服务器上;

3.3)修改kdump基本功能文件,在其中添加一行参数host_name并指定为无盘计算机客户端的主机名,将保存core文件的目录名由“主机ip地址-日期”修改为“主机名/日期”实现无盘计算机客户端的系统宕机日志分开存储;

3.4)修改生成kdump镜像的脚本文件,在其中添加一行参数host_name并指定为无盘计算机客户端的主机名,将保存core文件的目录名由“主机ip地址-日期”修改为“主机名/日期”实现无盘计算机客户端的系统宕机日志分开存储;

3.5)在无盘系统配置程序dlfs_config.sh文件中配置开机启动kdump服务,开机启动kdump时系统会检测/boot目录下是否存在kdump的镜像文件,如果没有kdump镜像则自动生成一个新的kdump镜像,文件名为initramfs-`uname–r`kdump.img,如果存在,检测kdump的镜像是否与kdump的配置文件/etc/kdump.conf中的配置是否一致,如果一致则直接使用该镜像文件,如果不一致,将根据配置文件/etc/kdump.conf自动生成kdump镜像文件。

步骤4)中在所述根文件系统目录中建立系统日志服务脚本将系统日志重定向到nfs服务器时,系统日志服务脚本由无盘系统配置程序dlfs_config.sh进行调用,且系统日志服务脚本被配置为包括下述执行步骤:

4.1)停止rsyslog服务;

4.2)在nfs挂载目录/home/iosys下创建系统日志存储目录/home/iosys/log/;

4.3)将系统默认日志目录/var/log目录链接到系统日志存储目录/home/iosys/log/下以主机名和日期级成的目录名下;

4.4)重启rsyslog服务,使得日志会保存到指定的nfs挂载目录下。

步骤5)的详细步骤包括:

5.1)进入initramfs目录/opt/initramfs下;

5.2)将initramfs目录打包成cpio格式再压缩为gzip格式的目标操作系统镜像文件。

本发明还提供一种无盘系统的启动方法,实施步骤包括:

s1)针对无盘系统计算机客户端,预先采用本发明前述无盘系统的镜像文件制作方法制作好目标操作系统镜像文件;

s2)在无盘服务器上配置好tftp服务、dhcp服务、nfs服务,并将无盘系统计算机客户端的目标操作系统镜像文件放置在tftp服务目录下,并在nfs挂载目录下配置好无盘系统配置程序dlfa_config.sh,以及用于被无盘系统配置程序dlfa_config.sh获取的系统软件、应用软件、设备驱动程序;

s3)给无盘系统计算机客户端加电,使得无盘系统计算机客户端以pxe网卡作为启动项从无盘服务器的dhcp服务获取ip地址信息,然后从tftp服务加载目标操作系统镜像文件完成内核启动,并在完成内核启动后挂载nfs服务,并从nfs挂载目录下下载并执行无盘系统配置程序dlfa_config.sh,通过无盘系统配置程序dlfa_config.sh获取系统软件、应用软件、设备驱动程序,最终完成目标操作系统的启动。

和现有技术相比,本发明具有下述优点:

1、本发明对传统的pxe+dhcp+tftp无盘启动方法进行改进,采用pxe+dhcp+tftp+nfs的无盘启动方法,将目标操作系统在内核启动时不需要可在目标操作系统内核成功启动后再加载的一部分文件打包存放在nfs服务器上,待目标操作系统启动后挂载nfs,再解压到无盘客户端系统中,这样可以极大的减少镜像文件的大小,解决传统的无盘计算机启动方法的镜像定制困难、维护复杂的问题。

2、本发明还实现了将系统日志保存在nfs服务器上,当系统发生宕机时,将内核信息转储到nfs服务器上,用于分析系统崩溃原因,方便调试系统故障,解决传统的基于pxe+dhcp+tftp方式实现的无盘计算机启动方法的系统故障时的系统日志和内核信息丢失等一系列的问题。

附图说明

图1为本发明实施例镜像文件制作方法的基本流程示意图。

图2为本发明实施例中初始化程序init的基本流程示意图。

图3为本发明实施例中启动脚本setup的基本流程示意图。

图4为本发明实施例中kdump工具配置的基本流程示意图。

具体实施方式

如图1所示,本实施例无盘系统的镜像文件制作方法的实施步骤包括:

1)针对无盘系统计算机客户端的目标操作系统,配置用于实现内核启动及挂载nfs服务的内核基本模块,配置完成后进行模块编译生成内核及内核模块;

2)根据内核及内核模块生成目标操作系统的根文件系统目录,在根文件系统目录中增加内核启动后的执行脚本,执行脚本被配置为挂载nfs服务、以及从nfs服务器中获取系统软件、应用软件、驱动程序;

3)在根文件系统目录中增加kdump工具,且将kdump工具配置为将系统宕机日志存储到指定的nfs服务器上,将kdump工具配置为开机启动kdump服务;

4)在根文件系统目录中建立系统日志服务脚本将系统日志重定向到nfs服务器;

5)将目标操作系统的根文件系统目录打包生成目标操作系统镜像。

根据目标操作系统的计算机体系结构,如果是intel的cpu,从内核源码arch/x86/configs目录下找一个与目标系统最接近的配置文件,拷贝到内核源码根目录下,命名为.config,执行makemenuconfig,即可选择作为内核基本模块的内核模块。本实施例中,步骤1)中用于实现内核启动及挂载nfs服务的内核基本模块包括:

目标cpu体系结构支持模块(例如,config_x86_64、config_64bit、config_x86等配置选项表示支持x86-64平台)、

网络驱动模块、

通信协议模块(例如,config_inet及其子选项tcp/ip协议)、

文件系统镜像支持模块(例如,linux内核配置选项config_blk_dev_ram、config_blk_dev_initrd、config_blk_dev_ram_count、config_blk_dev_ram_size、config_blk_dev_ram_blocksize表示支持内存盘ramdisk文件系统镜像)、

内存文件系统(ramfs)模块(例如,配置选项config_tmpfs)、

网络文件系统(nfs)模块、

配置内核切换功能模块(例如,配置选项config_kexec,支持内核转储kdump功能)。

本实施例中,步骤2)中的根文件系统为initramfs文件系统。

根文件系统主要有initrd和initramfs两种类型。initrd是在系统启动时用ramdisk作为实际根文件系统,ramdisk是一种基于内存的虚拟文件系统,它是一个模拟的磁盘文件,需要先格式化为ext2文件系统,其大小固定,后期不能修改。initramfs是在系统启动时用ramfs作为根文件系统,ramfs是在内核2.4才支持的一种内存文件系统,处于虚拟文件系统(vfs)层,而不像ramdisk那样基于虚拟在内存中的其他文件系统(如,ex2fs)。initramfs是一个压缩过的cpio文件,不需要格式化,使用灵活,只要内存足够,可以创建多个,在创建时可以指定其最大能使用的内存大小,缺省情况下,ramfs被限制最多可使用内存大小的一半。

本实施例中,采用initramfs文件系统具有下述优点:1)定制目标操作系统initramfs根文件系统时,生成的镜像文件比较小。传统的方法将所有文件全部写入initrd镜像文件,生成的initrd镜像文件比较大,由于initrd对大小有限制,因此只能将有限的系统服务和应用软件写入initrd镜像文件中。虽然initramfs对大小没有限制,但我们只将系统运行所必须的系统软件、库文件写入initramfs镜像文件,其余的文件按照linux目录树规则进行打包,保存在nfs目录下,当系统启动后,再将这些文件解压缩,并启动相应的服务。而这种方式生成的initramfs镜像文件大小比较小,仅需要几十兆或上百兆。2)系统启动速度快。由于定制的initramfs镜像文件比较小,系统引导时网络传输文件所需要的时间短,网络压力减小,同时initramfs镜像文件解压到内存的速度比较快。3)可扩展性好。基本initramfs镜像定制完成后,当有新的系统服务或软件需要扩展时,只需要将其按照fhs(filesystemhierarchystandard)标准进行打包保存在相应目录,并将需要在开机解压的包在$nfs_mnt/pkg/pkg_list中注册即可实现开机解压得到需要的系统服务或软件。对于不需要的系统服务或软件只需在pkg_list中加个”#”号注释,开机启动时相应的系统服务或软件就不会解压和启动。非常的方便,且不会影响基础的initramfs镜像文件。

本实施例中,步骤2)中生成无盘系统的根文件系统的详细步骤包括:

2.1)创建基于initramfs文件系统的根文件系统目录/opt/initramfs;

2.2)将linux系统自带的根文件系统镜像解压到根文件系统目录/opt/initramfs下;每个有盘linux系统的/boot目录下都有一个根文件系统,其名字各个系统不一样,如rhel5.x的根文件系统名为initrd-<kernel_version>.img,rhel6和rhel7的根文件系统名为initramfs-<kernel_version>.img。系统自带的根文件系统通常是一个最基本的根文件系统,文件大小只有二十几兆,功能齐全,但不能直接用于无盘系统,经过修改后可用做无盘系统的根文件系统;

2.3)将根文件系统目录下的内核模块目录/opt/initramf/lib/modules/下的文件夹删除,将进行模块编译生成内核以及内核模块复制到根文件系统目录下的内核版本对应的内核模块目录/opt/initramfs/lib/modules/<kernel_version>/下,其中<kernel_version>为内核的版本号;

2.4)在根文件系统目录/opt/initramfs中配置生成initramfs根文件系统启动执行的第一个初始化程序init,以便通过初始化程序init加载真正的根文件系统;

2.5)在根文件系统目录/opt/initramfs中配置目标操作系统的/etc/fstab开机挂载的文件系统,并将内核切换功能模块switch_root,busybox工具复制到/usr/bin目录下;

2.6)在根文件系统中的自动启动目录/opt/initramfs/etc/init.d/下增加内核启动后的启动脚本setup,启动脚本setup被配置为挂载nfs服务、并调用nfs挂载目录下的无盘系统配置程序dlfa_config.sh,通过nfs挂载目录下的无盘系统配置程序dlfa_config.sh从nfs服务器中获取系统软件、应用软件、设备驱动程序。

如图2所示,步骤2.4)中初始化程序init被配置为包括下述执行步骤:

2.4.1)创建目标操作系统的根目录/sysroot;

2.4.2)挂载proc文件系统到目标操作系统的/proc目录;

2.4.3)挂载sysfs文件系统到目标操作系统的/sys目录;

2.4.4)挂载tmpfs文件系统到目标操作系统的根目录/sysroot,判断挂载tmpfs文件系统是否成功,如果挂载成功则跳转执行步骤2.4.5);否则,退出;

2.4.5)将根目录/下的所有文件移到/sysroot目录下;

2.4.6)用切换工具switch_root切换到新的根目录/sysroot,即将/sysroot当作根目录/,并执行初始化引导程序/sbin/init引导真正的文件系统。

如图2所示,初始化程序init被内核调用后,依次执行前述6个步骤,且在步骤(4)挂载tmpfs文件系统到/sysroot时,还包括判断是否挂载tmpfs文件系统成功的步骤,仅仅在挂载tmpfs文件系统成功时才能够继续向下执行。.

如图3所示,步骤2.6)中的启动脚本setup被配置为包括下述执行步骤:

2.6.1)设置内核文件大小;本实施例中具体设置内核文件大小为无限制unlimited;

2.6.2)执行dhcp客户端动态获取ip地址;

2.6.3)从/proc/cmdline中获取内核传来的参数,包括:nfs_src表示nfs服务器ip地址及其共享目录,nfs_dist表示nfs在无盘客户端的挂载目录,并根据内核传来的参数挂载nfs文件系统;本实施例中,内核传来的参数在无盘服务器的pxe配置文件/tftpboot/pxelinux.cfg/default中配置,形如:nfs_src=<nfs_server_ip>:<nfs_directory>nfs_dist=<nfs_mount_point>,<nfs_server_ip>表示nfs服务器的ip地址,<nfs_directory>表示nfs服务器ip地址及其共享目录,<nfs_mount_point>表示nfs在无盘客户端的挂载目录,在目标操作系统上通过读取/proc/cmdline可获取内核传来的参数;

2.6.4)根据网卡的mac地址查主机配置文件<nfs_mount_point>/etc/hostconfig以获取mac地址以及主机名,主机配置文件包含mac地址、主机名、ip地址三种信息,如果主机配置文件中存在相应的mac地址则获取其主机名hn,并将主机名设置为hn,如果不存在这个mac地址,则按照指定规则在主机配置文件中注册一个新的主机hn_new,将主机名设置为hn_new;

2.6.5)调用执行无盘系统配置程序dlfa_config.sh。

本实施例中,主机配置文件hostconfig文件的格式为:

mac地址主机名ip地址

如果主机配置文件中存在相应的mac地址则获取其主机名hn,并将主机名设置为hn,如果不存在这个mac地址,则按照一定的规则在主机配置文件中注册一个新的主机hn_new,将主机名设置为hn_new。调用nfs加载目录下的系统配置程序dlfs_config.sh,从<nfs_mount_point>/pkg目录下拷贝或解压缩系统库文件、驱动程序、各类服务软件等,加载或启动系统服务、应用程序等。在nfs服务器<nfs_mount_point>/pkg/目录下有个软件包列表文件pkg_list,而dlfs_config.sh程序是根据pkg_list来解压缩nfs服务器下的驱动程序、应用软件等压缩包到目标操作系统上的根目录下,所有的压缩包都是以根为起始路径。软件包列表文件pkg_list的每一行代表位于pkg目录下的一个文件名,行首的#号表示注释,例如:可以将infiniband网络驱动、lustre文件系统等其他软件或依赖软件按照linux目录树规则分别进行打包保存在nfs共享目录的pkg目录下,将打包的文件名保存在软件包列表文件pkg_list中。对于系统不再需要的软件包可在pkg_list文件中将其对应的软件包名称前面加上#号,系统启动进行软件包解压缩时是不会解压到目标操作系统中的,且不会影响initramfs镜像文件。

kdump是一种先进的基于kexec的内核崩溃转储机制。kdump需要2个不同目的的内核:生产内核和捕获内核。生产内核是捕获内核服务的对像。在生产内核崩溃时由kexec启动捕获内核,与ramfs一起构建一个微环境,对生产内核下的内存信息进行收集和转储。生产内核保留了一部分内存空间(通常128mb或256mb)给捕获内核启动用,因为使用kexec来启动捕获内核,绕过了bios,所以生产内核的内存信息得以保留。捕获内核将生产内核内存中的所有运行状态和数据信息,包括cpu寄存器、堆栈数据等,收集到一个dumpcore文件中,通过分析dumpcore文件有助于确定系统崩溃确切原因。无盘客户端上不可永久性存储文件,必须将dumpcore文件转储到nfs服务器上。在系统崩溃时,由kexec启动一个捕获内核,并由捕获内核负责把生产内核的内存中所有运行状态和数据信息,包括cpu寄存器、堆栈数据等,收集并转储到指定目录下(nfs的挂载目录),以便之后分析系统崩溃原因。

为了使系统能在宕机时将内存中的所有运行状态和数据信息转储到nfs服务器指定的目录下,如图4所示,步骤3)的详细步骤包括:

3.1)在根文件系统目录中安装kdump工具kexec-tools(用于启动一个捕获内核的kexec命令在kexec-tools软件中);

3.2)将kdump配置文件/etc/kdump.conf的nfs、path、core_collector几个参数前面的注释符号“#”去掉,并将参数nfs的服务器地址修改为nfs服务器的ip地址、导出目录修改为nfs服务器上的指定目录,从而将kdump工具配置为将系统宕机日志存储到指定的nfs服务器上;nfs、path、core_collector几个参数前面的注释符号“#”去掉后内容如下:

nfsmy.server.com:/export/tmp

path/var/crash

core_collectormakedumpfile–l–message-level1–d31

本实施例中,还需要修改具体的参数值,将“my.server.com”修改为无盘服务器的ip地址,将/export/tmp修改为nfs的导出目录,path参数表示dumpcore文件的输出目录,core_collector为收集日期方法的相关参数。

3.3)修改kdump基本功能文件/usr/lib/dracut/modules.d/99kdumpbase/kdump.sh,在其中添加一行参数host_name并指定为无盘计算机客户端的主机名,将保存core文件的目录名由“主机ip地址-日期”修改为“主机名/日期”实现无盘计算机客户端的系统宕机日志分开存储;本实施例中,具体是指修改kdump基本功能文件/usr/lib/dracut/modules.d/99kdumpbase/kdump.sh,在host_ip=$_host”的下一行添加一行:

host_name=$(hostname)

$(hostname)表示获取无盘客户机的主机名

将$host_ip-$datedir修改为$host_name/$datedir,即将保存core文件的目录名由“主机ip地址-日期”修改为“主机名/日期”。因为kdump.sh程序在生成kdump镜像时会使用host_ip,而所有主机的值都是“127.0.0.1”,对于多台无盘客户端都使用同一个地址是不便于区分是哪台机器发生了故障,为此将host_ip改为host_name,即用主机名作为无盘客户端保存core文件的目录名,以系统发生崩溃的时间作为子目录名,这样同一个无盘客户机转储的core文件。

3.4)修改生成kdump镜像的脚本文件/usr/lib/kdump/kdump-lib-initramfs.sh,在其中添加一行参数host_name并指定为无盘计算机客户端的主机名,将保存core文件的目录名由“主机ip地址-日期”修改为“主机名/日期”实现无盘计算机客户端的系统宕机日志分开存储;

3.5)在无盘系统配置程序dlfs_config.sh文件中配置开机启动kdump服务,开机启动kdump时系统会检测/boot目录下是否存在kdump的镜像文件,如果没有kdump镜像则自动生成一个新的kdump镜像,文件名为initramfs-`uname–r`kdump.img,如果存在,检测kdump的镜像是否与kdump的配置文件/etc/kdump.conf中的配置是否一致,如果一致则直接使用该镜像文件,如果不一致,将根据配置文件/etc/kdump.conf自动生成kdump镜像文件。

本实施例中,步骤4)中在根文件系统目录中建立系统日志服务脚本将系统日志重定向到nfs服务器时,系统日志服务脚本由无盘系统配置程序dlfs_config.sh进行调用,且系统日志服务脚本被配置为包括下述执行步骤:

4.1)停止rsyslog服务;

4.2)在nfs挂载目录/home/iosys下创建系统日志存储目录/home/iosys/log/;

4.3)将系统默认日志目录/var/log目录链接到系统日志存储目录/home/iosys/log/下以主机名和日期级成的目录名下;本实施例中,以主机名和日期级成的目录名具体为<host_name>_$(date+%y%m%d),其中<host_name>为主机名,date表示日期,%y表示年份,%m表示月份,%d表示日期;

4.4)重启rsyslog服务,使得日志会保存到指定的nfs挂载目录下。

系统日志默认保存在/var/log/message中,对于无盘客户端没有存储介质,系统一旦宕机,系统日志将会丢失。本实施例中使用了nfs文件系统,通过将/var/log目录做一个符号链接到nfs挂载的目录/home/iosys/log/<hostname>_<date>,将日志保存在nfs服务器上,便于以后分析日志。由于系统日志需要使用了nfs服务器的存储介质,因此,rsyslog服务必须在挂载nfs文件系统后启动。

本实施例中,步骤5)的详细步骤包括:

5.1)进入initramfs目录/opt/initramfs下;

5.2)将initramfs目录打包成cpio格式再压缩为gzip格式的目标操作系统镜像文件。本实施例中生成镜像文件命令具体为:find.|cpio–hnewc–o|gzip>../initramfs.cpio.gz,用于将其打包成cpio格式(initramfs.cpio)再压缩为gzip格式生成initramfs.cpio.gz。

本实施例还提供一种无盘系统的启动方法,实施步骤包括:

s1)针对无盘系统计算机客户端,预先采用前述无盘系统的镜像文件制作方法制作好目标操作系统镜像文件;

s2)在无盘服务器上配置好tftp服务、dhcp服务、nfs服务,并将无盘系统计算机客户端的目标操作系统镜像文件放置在tftp服务目录(通常为/tftpboot)下,并在nfs挂载目录下配置好无盘系统配置程序dlfa_config.sh,以及用于被无盘系统配置程序dlfa_config.sh获取的系统软件、应用软件、设备驱动程序;

s3)给无盘系统计算机客户端加电,使得无盘系统计算机客户端以pxe网卡作为启动项从无盘服务器的dhcp服务获取ip地址信息,然后从tftp服务加载目标操作系统镜像文件完成内核启动,并在完成内核启动后挂载nfs服务,并从nfs挂载目录下下载并执行无盘系统配置程序dlfa_config.sh,通过无盘系统配置程序dlfa_config.sh获取系统软件、应用软件、设备驱动程序,最终完成目标操作系统的启动。

本实施例中无盘系统计算机客户端以pxe网卡作为启动项时,配置pxe网络启动配置文件/tftpboot/pxelinux.cfg/default如下:

defaultdlfs

labeldlfs

kernelvmlinuz-<kernel_version>

appendinitrd=initramfs-<kernel_version>.cpio.gznfs_src=<nfs_server_ip>:<nfs_dir>nfs_dist=<nfs_mount_point>crashkernel=256m

其中,default表示默认使用dlfs标签。dlfs是标签名,也可指定其他名字。kernel指定指定要启动的内核文件。initrd指定第五步生成的initramfs镜像文件。crashkernel指定为kdump预留的内存大小,一般可设置为128m,256m或auto。nfs_src,nfs_dist是第2.6步中setup脚本需要根据这两个参数在无盘客户端上挂载nfs文件系统。给无盘客户端加电,在bios中配置支持pxe的网卡为第一启动选项,通过网络引导拉核启动无盘客户端,访问服务器上的dhcp服务,为无盘计算机获取一个ip地址;执行文件下载命令,利用操作系统层通信协议访问服务器上的文件传输服务,从远程服务器上下载目标操作系统内核和镜像至无盘客户端的内存文件系统中,启动目标操作系统,完成无盘计算机的启动。

需要说明的是,类似“启动脚本setup”、“无盘系统配置程序dlfa_config.sh”等这种中文名称附带的英文名称的称谓而言,其英文名称仅仅为一个实现特例,在具体实现的时候可以根据需要修改为其他不同的英文名称。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1