昇腾机器节点磁盘状态检查与问题处理方法
一、问题背景
当我们需要在节点要拉取DeepSeek权重文件前,首先需要做的事情之一,是检查当前磁盘是否挂载到对应的目录下,正常情况下,执行命令:
lsblk
可以看到预期nvme0n1、nvme1n1、nvme2n1磁盘正常挂载home、docker目录,每一个磁盘都有MOUNTPOINT:
而如果是下面的情况,则是未挂载:
二、处理方法
针对未挂载的情况,我们需要执行自动化挂载脚本,将/dev/nvme0n1
挂载到/home
下,另外两个则合并挂载到/docker
下供容器使用(如果不单独给/docker
分配较大空间,当多人共用创建多个容器实例时容易将根目录占满):
cd /root/tools/
sh create_disk_partitions.sh
脚本执行成功后,磁盘就能够顺利分配、挂载了。
三、其他问题处理
3.1 /dev/nvme0n1 contains a mounted filesystem
在实际操作的过程中,出现了下面的问题:
/dev/nvme0n1 contains a mounted filesystem
这是因为nvme0n1已经挂载了/home路径,脚本中重复执行导致失败。
解决方法:
- 修改脚本、将挂载/home的几行注释掉,然后再执行脚本。
针对上述问题,参考他人的结论,还有一种处理方法:
- 将已挂载的/data0、1、2都手动卸载:
umount /data0
umount /data1
umount /data2
不过在卸载磁盘时,有很大概率会卸载失败,显示:
target is busy
说明有进程在使用该磁盘,此时我们可以执行命令:
fuser -kv /data0
该命令的作用:
查找所有正在使用 /home 挂载点下文件的进程,并向这些进程发送 SIGKILL 信号,强制终止这些进程。
此时再执行umount命令就能够成功了。
当我们完成所有磁盘的卸载、再执行磁盘初始化分配脚本,就能够达成目的了。
3.2 cannot open /dev/nvme0n1: Device or resource busy
拿到机器执行脚本,直接显示失败:
cannot open /dev/nvme0n1: Device or resource busy
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
此时,我们执行命令:
df -h
可以看到当前机器磁盘名称并非脚本中所写的nvme0n1,而是nvme0n1p1:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
解决方法:
- 修改脚本,将脚本中挂载磁盘名称改为nvme0n1p1:
同时,还有一种情况,则是磁盘的名称与脚本一致,出现:
cannot open /dev/nvme0n1: Device or resource busy
解决方法:
- 参考对应脚本中的内容,选择对应的部分向下执行,最后重启机器即可:
四、挂载脚本参考
#!/bin/bash
# Copyright 2024 Huawei Technologies Co., Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.# ============================================================================
# 将nvme0n1本地盘挂载到/home目录下,
# 将nvme1n1、nvme1n2本地盘合并作为逻辑卷统一挂载到/docker目录下,并设置开机自动挂载。
# ============================================================================set -ex# 将nvme0n1挂载到用户目录
mkfs -t xfs /dev/nvme0n1
mkdir -p /tmp/home
cp -r /home/* /tmp/home/
mount /dev/nvme0n1 /home
mv /tmp/home/* /home/
rm -rf /tmp/home# 将nvme1n1、nvme1n2合并挂载到/docker目录
pvcreate /dev/nvme1n1
pvcreate /dev/nvme2n1
vgcreate nvme_group /dev/nvme1n1 /dev/nvme2n1
lvcreate -l 100%VG -n docker_data nvme_group
mkfs -t xfs /dev/nvme_group/docker_data
mkdir /docker
mount /dev/nvme_group/docker_data /docker# 迁移docker文件到新的/docker目录
systemctl stop docker
mv /var/lib/docker/* /docker
sed -i '/"default-runtime"/i\ "data-root": "/docker",' /etc/docker/daemon.json
systemctl start docker# 设置开机自动挂载
uuid=`blkid -o value -s UUID /dev/nvme_group/docker_data` && echo UUID=${uuid} /docker xfs defaults,nofail 0 0 >> /etc/fstab
uuid=`blkid -o value -s UUID /dev/nvme0n1` && echo UUID=${uuid} /home xfs defaults,nofail 0 0 >> /etc/fstab
mount -a
df -h
参考资料:
- NPU服务器上配置Lite Server资源软件环境