Skip to content

常用操作 ​

一. OA相关 ​

1. 内网资源获取 ​

黄区、绿区

安装sdk、driver、获取软件源、证书

repo.metax-tech.com

2. 绿区文件上传下载 ​

1. 上传文件到跳板机

1 打开oa-driver

bash
https://oa-drive.metax-tech.com/

2 上传到文件夹

bash
团队文件夹-> oa2sw_ai-models

3 在跳板机访问资源

bash
https://models.hub.metax-tech.com/

2. 从跳板机下载文件到本地电脑

待补充

二. OS操作 ​

1. 安装docker ​

bash
# 麒麟系统自带docker包
sudo dnf install -y docker
或者
sudo yum install -y docker

# 将当前用户加入docker组,避免每次输入超级密码
sudo usermod -aG docker $USER

# 刷新起作用
newgrp docker

# ubuntu安装docker
sudo apt install docker.io docker-compose

2. PiP软件源 ​

bash
# 外网使用
pip3 install tqdm -i https://mirrors.aliyun.com/pypi/simple/ 

# 内网使用
pip3 install tqdm -i https://repo.metax-tech.com/r/pypi/simple --trusted-host repo.metax-tech.com

5. Kenel Not Found ​

bash
root:~$ modprobe metax # 加载沐曦驱动

6. 麒麟系统改密码修改策略 ​

tex
# 在这些文件中找到包含 pam_pwquality.so 的行,同样在末尾添加 usercheck=0
sudo vim /etc/pam.d/system-auth  # 系统全局认证配置
sudo vim /etc/pam.d/password-auth  # 密码相关认证配置

sudo vim /etc/security/pwquality.conf
# 关闭“密码包含用户名”检测(0=关闭,1=开启,默认1)
usercheck = 0

7. 创建新用户 ​

bash
# ubuntu
sudo useradd -m -s /bin/bash test
passwd test
usermod -aG sudo test

# kylin
adduser metax
usermod -aG wheel metax
passwd metax

8 . nmcli配置IP地址 ​

bash
# 查看所有网络连接(名称、UUID、类型等)
nmcli connection show  # 可缩写为 nmcli con show

# 查看设备状态(接口名、类型、连接状态等)
nmcli device status    # 可缩写为 nmcli dev status

# 修改连接的 IPv4 配置(静态模式)
nmcli connection modify ens33 \
  ipv4.method manual \                  # 手动配置(静态 IP)
  ipv4.addresses 192.168.1.100/24 \     # IP 地址+子网掩码(CIDR 格式)
  ipv4.gateway 192.168.1.1 \            # 网关
  ipv4.dns "8.8.8.8,114.114.114.114"    # DNS 服务器(多个用逗号分隔)
  
# 创建以太网连接(类型为 ethernet)
nmcli connection add \
  type ethernet \                       # 连接类型(以太网)
  con-name ens33-static \               # 连接名称(自定义)
  ifname ens33 \                        # 接口名(需与实际设备一致)
  ipv4.method manual \
  ipv4.addresses 192.168.1.100/24 \
  ipv4.gateway 192.168.1.1 \
  ipv4.dns "8.8.8.8,114.114.114.114"
  
# 激活连接(替换为实际连接名)
nmcli connection up ens33-static  # 静态连接示例
# 或
nmcli connection up ens33-dhcp    # DHCP 连接示例

# 查看接口的 IP 信息
ip addr show ens33  # 替换为实际接口名

# 查看连接的详细配置(确认 DNS、网关等)
nmcli connection show ens33-static | grep ipv4

在 现代主流发行版(如 Ubuntu 18.04+、CentOS 7+、Fedora) 中,当 netplan 目录无配置文件时,第一时间尝试 nmcli 是高效且合理的,因为 NetworkManager 是最常见的默认网络管理服务。若 nmcli 操作提示 “无可用连接” 或服务未运行,再进一步排查 systemd-networkd 或传统配置方式即可。

9. 麒麟系统固定内核版本 ​

bash
sudo yum install yum-plugin-versionlock
sudo yum versionlock add kernel-$(uname -r)

10. ssh免密登录 ​

1. 手动免密

bash
# 在本机生成密匙,然后推送到另一主机,两边都这样操作
ssh-keygen -t rsa
ssh-copy-id metax@192.168.1.20 

# 批量分发公钥(替换为你的用户名,比如root)
for ip in $(cat nodes.txt); do
    ssh-copy-id -i /root/.ssh/id_rsa.pub root@$ip
done

# 用你的dis_cmd.py脚本执行,批量更换内网源
python3 dis_cmd.py -t nodes.txt -m "sed -i \
-e 's/http.*com\/ubuntu/http:\/\/repo.metax-tech.com\/r\/ubuntu/g' \
-e 's/http.*cn\/ubuntu/http:\/\/repo.metax-tech.com\/r\/ubuntu/g' \
/etc/apt/sources.list"

2. 脚本免密

bash
#!/bin/bash
#
# 脚本名称:setup_bidir_ssh.sh
# 功能描述:为多台 Ubuntu 22.04 节点的 root 用户配置双向免密 SSH
#           节点 IP 从文件中读取,每行一个 IP
# 使用方法:
#   1. 默认读取当前目录下的 ip.txt : sudo ./setup_bidir_ssh.sh
#   2. 指定文件路径                 : sudo ./setup_bidir_ssh.sh /path/to/iplist.txt
#
# 注意事项:所有节点 root 密码必须相同,脚本必须以 root 权限执行

set -euo pipefail

# ---------- 全局变量 ----------
SSH_USER="root"
AUTH_KEYS_FILE="authorized_keys"
TMP_DIR="/tmp/ssh_setup_$$"
TMP_AUTH_KEYS="${TMP_DIR}/authorized_keys_merged"
SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=5"

# ---------- 颜色输出函数 ----------
red()    { echo -e "\033[31m$*\033[0m"; }
green()  { echo -e "\033[32m$*\033[0m"; }
yellow() { echo -e "\033[33m$*\033[0m"; }

# ---------- 检查运行权限 ----------
if [ "$EUID" -ne 0 ]; then
    red "错误:请使用 root 用户执行此脚本。"
    exit 1
fi

# ---------- 确定 IP 列表文件 ----------
IP_FILE="${1:-ip.txt}"   # 若未提供参数,默认使用 ip.txt

if [ ! -f "$IP_FILE" ]; then
    red "错误:IP 列表文件 '$IP_FILE' 不存在!"
    echo "请提供文件路径作为参数,或将文件命名为 ip.txt 放在当前目录。"
    exit 1
fi

# ---------- 从文件读取 IP,去除空行和前后空白 ----------
mapfile -t NODES < <(grep -v '^\s*$' "$IP_FILE" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')

if [ ${#NODES[@]} -lt 2 ]; then
    red "错误:IP 列表文件中至少需要 2 个有效 IP。"
    exit 1
fi

green "待配置节点数:${#NODES[@]}"
green "节点列表:"
printf "  %s\n" "${NODES[@]}"

# ---------- 安装必要工具 ----------
if ! command -v sshpass &> /dev/null; then
    yellow "未找到 sshpass,正在安装..."
    apt-get update -qq && apt-get install -y sshpass
fi

# ---------- 获取 root 密码 ----------
read -s -p "请输入所有节点的 root 统一密码: " ROOT_PASS
echo
if [ -z "$ROOT_PASS" ]; then
    red "密码不能为空!"
    exit 1
fi

SSHPASS_CMD="sshpass -p \"${ROOT_PASS}\""

# ---------- 连通性测试 ----------
green "测试所有节点的 SSH 连通性..."
for node in "${NODES[@]}"; do
    yellow "正在测试 $node ..."
    eval $SSHPASS_CMD ssh $SSH_OPTS -q ${SSH_USER}@$node exit
    if [ $? -eq 0 ]; then
        green "   $node 连接成功"
    else
        red "   $node 连接失败,请检查网络或密码"
        exit 1
    fi
done

# ---------- 创建临时目录 ----------
mkdir -p "$TMP_DIR"
touch "$TMP_AUTH_KEYS"

# ---------- 1. 在各节点生成密钥对并收集公钥 ----------
for node in "${NODES[@]}"; do
    yellow "处理节点 $node ..."

    # 确保远程 ~/.ssh 目录存在且权限正确
    eval $SSHPASS_CMD ssh $SSH_OPTS ${SSH_USER}@$node \
        "mkdir -p ~/.ssh && chmod 700 ~/.ssh"

    # 生成密钥对(若不存在)
    eval $SSHPASS_CMD ssh $SSH_OPTS ${SSH_USER}@$node \
        "[ -f ~/.ssh/id_rsa ] || ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa"

    # 获取公钥内容并追加到本地合并文件
    PUB_KEY=$(eval $SSHPASS_CMD ssh $SSH_OPTS ${SSH_USER}@$node \
        "cat ~/.ssh/id_rsa.pub")
    echo "$PUB_KEY" >> "$TMP_AUTH_KEYS"
    green "  已收集 $node 的公钥"
done

# ---------- 2. 去重并分发合并后的 authorized_keys ----------
sort -u -o "$TMP_AUTH_KEYS" "$TMP_AUTH_KEYS"

for node in "${NODES[@]}"; do
    yellow "向 $node 分发 authorized_keys ..."

    # 将合并文件复制到远程节点
    eval $SSHPASS_CMD scp $SSH_OPTS "$TMP_AUTH_KEYS" \
        ${SSH_USER}@$node:~/.ssh/$AUTH_KEYS_FILE

    # 远程设置权限
    eval $SSHPASS_CMD ssh $SSH_OPTS ${SSH_USER}@$node \
        "chmod 600 ~/.ssh/$AUTH_KEYS_FILE"
done

# ---------- 3. 清理临时文件 ----------
rm -rf "$TMP_DIR"
green "临时文件已清理"

# ---------- 4. 验证双向免密 ----------
green "验证双向免密登录(随机抽取 3 对节点)..."
declare -a nodes=("${NODES[@]}")
for i in {1..3}; do
    src=${nodes[$RANDOM % ${#nodes[@]}]}
    dst=${nodes[$RANDOM % ${#nodes[@]}]}
    [ "$src" = "$dst" ] && continue
    yellow "测试从 $src 免密登录到 $dst ..."
    ssh -o StrictHostKeyChecking=no -o BatchMode=yes ${SSH_USER}@$src \
        "ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 ${SSH_USER}@$dst echo OK" \
        2>/dev/null | grep -q "OK" && green "  成功" || red "  失败"
done

green "所有配置完成!"

11. 配置BMC ​

bash
yum install -y ipmitool
ipmitool lan set 1 ipsrc static
ipmitool lan set 1 ipaddr 10.0.233.100
ipmitool lan set 1 netmask 255.255.255.0
ipmitool lan set 1 defgw ipaddr 10.0.232.1

15. 改DNS ​

bash
1. 编辑 DNS 配置文件
sudo vim /etc/resolv.conf

2. 添加以下 DNS 服务器(任选其一或都加)
nameserver 8.8.8.8
nameserver 10.2.129.6

12. 麒麟系统查看内核与固定 ​

bash
grubby --info=ALL # 插卡所有内核
grubby --set-default /boot/vmlinuz-4.19.90-24.4.v2101.ky10.x86_64 # 设置为固定内核
reboot

13. rsync传输 ​

bash
rsync -avzP metax@10.7.179.43:/home/metax/maca-sdk-3.2.1.10/appimage/megatron_lm.tar.gz /drives/c/Users/你的Windows用户名/Desktop

C:\Users\o25497\Desktop

14. 内核顺序修改 ​

bash
# 1. 查看所有 GRUB 菜单项
awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg
你会得到类似这样的输出:
plaintext
Ubuntu
Advanced options for Ubuntu
Ubuntu, with Linux 5.15.0-168-generic
Ubuntu, with Linux 5.15.0-168-generic (recovery mode)
Ubuntu, with Linux 5.15.0-119-generic
Ubuntu, with Linux 5.15.0-119-generic (recovery mode)
UEFI Firmware Settings

# 2. 修改 GRUB 配置固定内核
编辑 GRUB 配置文件:
sudo vim /etc/default/grub
将 GRUB_DEFAULT 的值修改为你想要固定的内核菜单项的完整路径,例如要固定为 5.15.0-119-generic:
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-119-generic"
💡 注意:> 符号用于表示从 “Advanced options for Ubuntu” 子菜单中选择具体内核,名称必须和上一步 awk 命令的输出完全一致。

# 3. 更新 GRUB 并重启
sudo update-grub
sudo reboot

为了防止系统自动更新内核覆盖你的设置,可以锁定当前内核包:
sudo apt-mark hold linux-image-5.15.0-119-generic linux-headers-5.15.0-119-generic

15. 逻辑卷扩展 ​

bash
# 1. 查看根目录属于哪个卷组的哪个卷:ubuntu--vg--1-ubuntu--lv(ubuntu-vg-1下的ubuntu-lvs卷)
df -h /

Filesystem                            Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg--1-ubuntu--lv  295G   88G  195G  32% /

# lvs可以看到卷组和卷的对应关系(根目录对应的卷组和卷就是第二个)
lvs

 LV        VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 ubuntu-lv ubuntu-vg   -wi-a-----  <1.10t
 ubuntu-lv ubuntu-vg-1 -wi-ao---- 300.00g

# 查看对应卷还有多少空间可以用(根目录所在的卷已用443G,还有143G可以用来扩展)
vgs

 VG          #PV #LV #SN Attr   VSize   VFree
 ubuntu-vg     1   1   0 wz--n-   6.98t   5.88t
 ubuntu-vg-1   1   1   0 wz--n- 443.57g 143.57g


# 二、正式扩容操作(核心步骤)
# 方式 1:扩容到指定大小(例如 2TB,按需修改数值)
sudo lvextend -L 2T /dev/ubuntu-vg-1/ubuntu-lv
resize2fs /dev/ubuntu-vg-1/ubuntu-lv

# 方式 2:增加指定容量(例如增加 500GB)
sudo lvextend -L +500G /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

执行后会看到类似输出:
plaintext
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 141, new_desc_blocks = 256
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 536870912 (4k) blocks long.

# 四、异常处理(可选,仅当步骤 2 报错时用)
如果执行 resize2fs 时报 xfs filesystem 相关错误,说明你的文件系统是 xfs(非默认),改用以下命令:
sudo xfs_growfs /

16. 固定IP配置 ​

bash
# 方法1:将默认yml文件改名
mv /etc/netplan/50-clould.xxx.yml 00-cloud.xxx.yml

# 添加配置
tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg > /dev/null <<'EOF'
network: {config: disabled}
EOF

17. 安装fuse ​

bash
sudo apt install fuse libfuse2 -y

18. 改ulimit值 ​

bash
sudo cat << EOF >> /etc/security/limits.conf
* soft nofile unlimited
* hard nofile unlimited
EOF

19. rdma ​

bash
#!/bin/bash
# 网卡列表(通过ibdev2netdev查看可获得)
ens="ens123np0 ens120np0 ens121np0 ens118np0 ens122np0 ens116np0 ens117np0 ens119np0"
mlxs="mlx5_0 mlx5_1 mlx5_3 mlx5_10 mlx5_4 mlx5_5 mlx5_6 mlx5_7"
for ens1 in ${ens}
do
mlnx_qos -i ${ens1} --trust=dscp --pfc 0,0,0,0,0,1,0,0
echo 1 > /sys/class/net/${ens1}/ecn/roce_np/enable/5
echo 1 > /sys/class/net/${ens1}/ecn/roce_rp/enable/5
done
for mlx1 in ${mlxs}
do
cma_roce_tos -d ${mlx1} -t 160
echo 160 > /sys/class/infiniband/${mlx1}/tc/1/traffic_class
done
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
ip -s -s neigh flush all

20. 多线程压缩文件 ​

bash
pigz -9 -p 100 oonx-arm-1.12.0.tar

# -9 极限压缩,-p 指定多少线程
# 执行后会生成 oonx-arm-1.12.0.tar.gz,原文件 oonx-arm-1.12.0.tar 会被删除

# 解压后同时保留 oonx-arm-1.12.0.tar.gz 和 oonx-arm-1.12.0.tar
gzip -dk oonx-arm-1.12.0.tar.gz

# tar.xz 标准解压(推荐)
tar -xJf 文件名.tar.xz

# xz文件解压
xz -d 文件名.xz

21. 软件源 ​

bash
# ubuntu源
cat > /etc/apt/sources.list <<'EOF'
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF
apt update

# 麒麟源
sed -i.bak 's@http.*/NS/@http://repo.metax-tech.com/r/kylin/@g' /etc/yum.repos.d/*.repo
yum makecache

# bclinux源
sed -i.bak 's@http.*bclinux/@https://repo.metax-tech.com/r/bclinux/@g' /etc/yum.repos.d/*.repo
yum makecache

23. 看板卡board_type ​

bash
sudo bash -c 'smi_dirs=($(find /sys/devices/pci* -name smi)); for m in "${!smi_dirs[@]}"; do smi_dir=${smi_dirs[$m]}; echo 1 0 > $smi_dir/testmode; echo 28 1 > $smi_dir/reade2prom; raw_data=$(cat $smi_dir/reade2prom); values=$(echo "$raw_data" | awk -F": " "{print \$2}" | tr -s " \t" " "); values=($(echo "$values" | tr " " "\n" | grep -v "^$" | tac | tr "\n" " ")); board_type="0x00"; if [[ ${#values[@]} -gt 0 ]]; then board_type="0x$(IFS=; echo "${values[*]}")"; fi; echo "GPU$m: $board_type"; done'

24. 硬盘操作 ​

31.1 格式化 ​

bash
mkfs.ext4 /dev/nvme1n1

31.2 nfs共享目录 ​

服务端:10.0.232.61(/data 目录共享)

客户端:另外 5 台服务器(挂载 /data)


一、服务端 ​

1. 安装 NFS 服务 ​
bash
apt update && apt install -y nfs-kernel-server
2. 配置共享目录 ​
bash
vim /etc/exports

写入这一行(直接复制):

bash
/mnt/share  *(rw,sync,no_root_squash,no_subtree_check) # 所有都能访问
/nvme1n1/share  10.0.232.0/24(rw,sync,no_root_squash,no_subtree_check) # 只允许这个网段访问

服务端 /etc/exports 配置:

  • rw:可读写
  • sync:数据安全
  • no_root_squash:root 有权限(服务器集群必备)
  • no_subtree_check:提升性能
3. 生效配置 + 启动服务 ​
bash
exportfs -ra
systemctl restart nfs-server
systemctl enable nfs-server
4. 放行防火墙(必须) ​
bash
ufw allow from 10.0.232.0/24 to any port nfs

二、客户端 ​

1. 安装 NFS 客户端 ​
bash
apt update && apt install -y nfs-common
2. 创建挂载目录 ​
bash
mkdir -p /mnt/share
3. 挂载 NFS ​
bash
mount 10.0.232.61:/mnt/share /mnt/share
4. 永久挂载(开机自动挂) ​
bash
echo "10.0.232.61:/mnt/share  /mnt/share  nfs  defaults  0 0" >> /etc/fstab

三、验证 ​

任意机器执行:

bash
df -h

看到:

10.0.232.61:/data  7.0T   95G  6.9T   2% /data

就是成功!

25. 更改用户名 ​

  1. 要用另一个用户操作,不要占用metax用户,并且杀掉所有跟metax有关的进程
bash
sudo -i
pkill -9 -u metax
  1. 验证
bash
id metax
ps -u metax
  1. 更改
bash
usermod -l mars metax
groupmod -n mars metax
usermod -d /home/mars -m mars

26. 更改系统第一启动项 ​

  1. 查看启动顺序
bash
sudo efibootmgr

​ 输出如下信息:

tex
root@metax:~# sudo efibootmgr
BootCurrent: 0013
Timeout: 3 seconds
BootOrder: 0001,0002,0003,0004,0010,0013,0007,000D,000E,0005,0006,0008,0009,000A,000B,000C,000F,0011,0012,0000
Boot0000* Enter Setup
Boot0001* CTyunOS(UEFI NVME(PCI5-0-0): SAMSUNG MZQL27T6HBLA-00B7C)
Boot0002* UEFI NVME(PCI6-0-0): SAMSUNG MZQL27T6HBLA-00B7C
Boot0003* UEFI NVME(PCI45-0-0): SAMSUNG MZQL27T6HBLA-00B7C
Boot0004* UEFI NVME(PCI46-0-0): SAMSUNG MZQL27T6HBLA-00B7C
Boot0005* UEFI SLOT10: Port 0 - Nvidia Network Adapter - 8C:91:3A:2C:28:1C PXE IPv4
Boot0006* UEFI SLOT7: Port 0 - Nvidia Network Adapter - 8C:91:3A:2C:2B:A4 PXE IPv4
Boot0007* UEFI CPU0_P6A_SLOT11: Port 0 - Nvidia Network Adapter - 8C:91:3A:2C:62:20 PXE IPv4
Boot0008* UEFI SLOT8: Port 0 - Nvidia Network Adapter - 8C:91:3A:2C:63:08 PXE IPv4
Boot0009* UEFI SLOT9: Port 0 - Nvidia Network Adapter - 8C:91:3A:2C:63:50 PXE IPv4
Boot000A* UEFI SLOT3: Port 0 - Nvidia Network Adapter - 8C:91:3A:2C:2A:9C PXE IPv4
Boot000B* UEFI SLOT4: Port 0 - Nvidia Network Adapter - 8C:91:3A:2C:27:84 PXE IPv4
Boot000C* UEFI SLOT6: Port 0 - Nvidia Network Adapter - 8C:91:3A:2C:2B:AC PXE IPv4
Boot000D* UEFI CPU1_G4C_SLOT1: Port 0 - Mellanox Network Adapter - CC:40:F3:FB:6E:DC PXE IPv4
Boot000E* UEFI CPU1_G4C_SLOT1: Port 1 - Mellanox Network Adapter - CC:40:F3:FB:6E:DD PXE IPv4
Boot000F* UEFI SLOT5: Port 0 - Nvidia Network Adapter - 8C:91:3A:2C:61:A8 PXE IPv4
Boot0010* UEFI MegaRAID Controller (PCI:E1-0-0) Drive 0 Logical Channel Pun 239
Boot0011* BootMenu
Boot0012* PxeMenu
Boot0013* Ubuntu Linux(UEFI MegaRAID Controller (PCI:E1-0-0) Drive 0 Logical Channel Pun 238)
Boot0015*
root@metax:~#
  1. 修改顺序,将Boot0013移动到Boot0001的位置
bash
efibootmgr -o 0013,0001,0002,0003,0004,0010,0007,000D,000E,0005,0006,0008,0009,000A,000B,000C,000F,0011,0012,0000
  1. 重启生效