使用磁盘对拷实现计算节点系统重装

高性能集群的用户量是非常庞大的,计算任务也是比较重,软件安装也是非常复杂,特别是一些大型计算任务在集群上运行之后,节点的软件系统、文件系统都会变得更加复杂,为了保证节点的系统、磁盘、网络配置等非常干净,在使用完系统之后,为了方便后续用户的正常使用,往往需要重装系统,重装系统有多种方式,使用U盘、光盘等安装一个全新的系统是一般会考虑的方法,但是我们现在的环境是高性能计算集群,节点上面有IB网络、高性能并行文件系统、MPI等并行程序库,如果直接安装一个新的系统,后续安装这些软件和配置系统环境将会是一个非常庞大的任务,为了解决这个难题,查找了很多资料,发现Linux也可以采用硬盘对拷的方式来安装系统。

数据无价,拷贝之前一定要确定磁盘的用户数据备份了。

首先将需要重装的节点上面的硬盘卸载下来,插入到一个负载不是很大的节点的备用硬盘仓中,然后使用fdisk -l来查看新插入的硬盘的编号,由于本集群的计算节点只有两个硬盘仓,所以后插入的硬盘的编号就是/dev/sdb了。

卸载lustre文件系统以及nfs文件系统挂载点。

1
2
3
4
for i in {'/public','/home','/vpublic01','/vpublic02'};
do
umount $i;
done;

执行dd命令

1
dd if=/dev/sda of=/dev/sdb bs=32256 conv=notrunc,noerror &

后面的&表示以后台形式运行,运行之后会返回一个编号,就是这个进程的PID。

执行如下命令来查看拷贝的进度。

1
2
3
4
5
while kill -USR1 2643;
do
echo;
sleep 10;
done

把2643替换为你自己的进程PID就可以了。
这里的300GB的硬盘,大概拷贝需要40分钟左右,因为是Serial SCSI硬盘,速度稍微快一点。

修改以太网卡和InfiniBand网卡的Ip地址

修改/etc/sysconfig/network-scripts/中的ifcfg-ib0和ifcfg-br0两个文件中的IP地址即可

删除/etc/udev/rules.d/70-persistent-net.rules文件

查看/etc/udev/rules.d/70-persistent-net.rules文件,修改对应参数,我一般比较懒,直接删除,重启会重建。

修改/etc/sysconfig/network文件

节点调试

将硬盘取回,放到原节点,启动节点,则会进入一个初始化的过程,它会提示你输入root密码或者按Ctrl-D取消,这时需要输入root密码,因为是拷贝的其他节点的数据,因此root密码也是被拷贝节点的密码,输入之后,有可能提示你磁盘有问题。这个时候需要进行修复。此时一般会提示你哪个分区有问题,例如/dev/sda1有问题或者是/dev/sda2有问题,那么需要我们进行修复,输入一下命令,建议将所有分区一次性修复。

1
2
3
4
5
#修复第一个分区,这个分区一般是引导分区
fsck -y /dev/sda1

#修复第二个分区,这个分区一般是主文件分区
fsck -y /dev/sda2

有时会提示你是/dev/sda2有问题,但是建议也修复一下/dev/sda1,这样重启之后不会因为文件系统有小故障导致重新修复再次重启。

输入reboot重启即可。

将被拷贝的机器的文件系统挂载还原。或者直接重启也可以。

再次强调,数据无价,拷贝之前一定要确定磁盘的用户数据备份了。

ZHANGCHI wechat
关注微信号进一步交流