当前位置: 首页 > news >正文

一键获取服务器硬件脚本:CPU/内存/磁盘/RAID检测脚本详解

功能亮点

​​全面硬件检测​​:

CPU型号、核心数和架构信息
网卡型号和数量统计
显卡类型(集成/独立)和型号
RAID控制器信息
内存型号、大小、速率和总容量

​​详细磁盘分析​​:

每块硬盘的型号和容量
SSD/HDD类型自动识别
磁盘总数及类型统计

​​智能RAID检测​​:

自动区分软件RAID(mdadm)和硬件RAID(MegaRAID/LSI)
显示RAID级别、状态和成员磁盘
虚拟磁盘配置详情展示

虚拟化环境适配​​:

自动识别VMware等虚拟环境
特殊处理虚拟化环境的内存信息

​​可视化输出​​:

彩色分类标题(蓝/绿/紫)
结构化数据展示
时间戳记录

1.创建hardware_disk_info.sh脚本

vi hardware_disk_info.sh
[root@anolis home]# cat hardware_disk_info.sh 
#!/bin/bash
# 硬件信息检测脚本 (CPU/网卡/显卡/RAID/内存)echo "==================== 硬件信息报告 ===================="
date "+%Y-%m-%d %H:%M:%S"
echo "====================================================="# ------------------------- CPU信息 -------------------------
echo -e "\n\033[1;34m【CPU信息】\033[0m"
cpu_model=$(lscpu | grep 'Model name' | sed 's/Model name:\s*//')
[ -z "$cpu_model" ] && cpu_model=$(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2 | sed 's/^ //')
arch=$(lscpu | grep 'Architecture' | awk '{print $2}')
physical_cpus=$(lscpu | grep 'Socket(s)' | awk '{print $2}')
[ -z "$physical_cpus" ] && physical_cpus=$(grep 'physical id' /proc/cpuinfo | sort | uniq | wc -l)
cores_per_cpu=$(lscpu | grep 'Core(s) per socket' | awk '{print $4}')
logical_cores=$(grep -c '^processor' /proc/cpuinfo)echo "型号        : $cpu_model"
echo "架构        : $arch"
echo "物理CPU数量 : $physical_cpus"
echo "每CPU核心数 : $cores_per_cpu"
echo "总逻辑核心数: $logical_cores"# ------------------------- 网卡信息 -------------------------
echo -e "\n\033[1;34m【网卡信息】\033[0m"
nic_count=0
while IFS= read -r line; doif [[ $line == *"Ethernet controller"* ]]; thennic_count=$((nic_count+1))model=$(echo "$line" | cut -d: -f2- | sed 's/^ //')echo "网卡$nic_count : $model"fi
done < <(lspci)
echo "物理网卡总数: $nic_count"# ------------------------- 显卡信息 -------------------------
echo -e "\n\033[1;34m【显卡信息】\033[0m"
gpu_list=$(lspci | grep -i 'VGA\|3D\|Display')
gpu_count=$(echo "$gpu_list" | wc -l)
[ -z "$gpu_list" ] && gpu_count=0if [ $gpu_count -eq 0 ]; thenecho "未检测到显卡"
elseidx=1while IFS= read -r line; domodel=$(echo "$line" | cut -d: -f3-)if [[ $model == *"Intel"* || $model == *"UHD"* ]]; thentype="集成显卡"elsetype="独立显卡"fiecho "显卡$idx : $type | $model"idx=$((idx+1))done <<< "$gpu_list"echo "显卡总数: $gpu_count"
fi# ------------------------- RAID卡信息 -------------------------
echo -e "\n\033[1;34m【RAID卡信息】\033[0m"
raid_info=$(lspci | grep -i 'RAID\|SCSI')
if [ -z "$raid_info" ]; thenecho "未检测到RAID卡"
elseecho "$raid_info" | while read -r line; domodel=$(echo "$line" | cut -d: -f3- | sed 's/^ //')echo "RAID控制器: $model"done
fi# ------------------------- 内存信息 -------------------------
echo -e "\n\033[1;34m【内存信息】\033[0m"
total_physical_mem=0
mem_count=0while IFS= read -r block; dosize=$(echo "$block" | grep "Size:" | grep -v "No Module" | awk '{print $2}')[ -z "$size" ] && continueif [[ $size =~ [0-9]+ ]]; thenmem_count=$((mem_count+1))part_num=$(echo "$block" | grep "Part Number:" | cut -d: -f2 | sed 's/^ //;s/[ \t]*$//')type=$(echo "$block" | grep "Type:" | cut -d: -f2 | sed 's/^ //;s/[ \t]*$//')speed=$(echo "$block" | grep "Speed:" | grep -v "Unknown" | awk '{print $2,$3}')# 虚拟环境特殊处理if [[ $part_num == "VMW-"* ]]; thenddr_gen="DDR4 (虚拟化环境)"elseddr_gen="$type"fiecho "内存$mem_count:"echo "  型号 : ${part_num:-未知}"echo "  代数 : $ddr_gen"echo "  大小 : $size GB"echo "  速率 : ${speed:-未知}"total_physical_mem=$((total_physical_mem + size))fi
done < <(sudo dmidecode -t memory | awk '/^Memory Device$/{flag=1;block=""} flag{block=block $0 "\n"} /^$/{flag=0; print block}')echo "-----------------------------------"
echo "内存条总数 : $mem_count"
echo "总内存容量 : $total_physical_mem GB"
echo "====================================================="#!/bin/bash
# 硬盘与RAID信息检测脚本echo -e "\033[1;36m===== 硬盘基本信息 =====\033[0m"# 获取磁盘列表
disks=$(lsblk -dno NAME | grep -v loop)
disk_count=0
ssd_count=0
hdd_count=0# 遍历所有磁盘
for disk in $disks; dodev="/dev/$disk"[ ! -b "$dev" ] && continue# 获取型号和大小model=$(lsblk -dno MODEL $dev | sed 's/^ *//; s/ *$//')[ -z "$model" ] && model=$(sudo hdparm -I $dev 2>/dev/null | grep "Model Number:" | cut -d: -f2 | sed 's/^ *//; s/ *$//')size=$(lsblk -dno SIZE $dev)# 检测SSD/HDDrotational=$(cat /sys/block/$disk/queue/rotational 2>/dev/null)if [ "$rotational" = "0" ]; thentype="\033[1;32mSSD\033[0m"ssd_count=$((ssd_count+1))elsetype="\033[1;33mHDD\033[0m"hdd_count=$((hdd_count+1))fi# 输出单块硬盘信息echo -e "磁盘$((++disk_count)): $dev | 型号: ${model:-未知} | 大小: $size | 类型: $type"
doneecho -e "\n\033[1;36m【汇总统计】\033[0m"
echo "总磁盘数: $disk_count (SSD: $ssd_count, HDD: $hdd_count)"# ----------------- RAID检测模块 -----------------
echo -e "\n\033[1;35m===== RAID状态检测 =====\033[0m"# 软件RAID (mdadm)
if grep -q 'md' /proc/mdstat; thenecho -e "\033[1;31m[软件RAID detected]\033[0m"while read -r md_dev; doecho -e "\n\033[1;34m阵列: $md_dev\033[0m"# RAID级别和状态raid_level=$(mdadm --detail $md_dev | grep "Raid Level" | awk -F: '{print $2}' | sed 's/^ *//')state=$(mdadm --detail $md_dev | grep "State :" | cut -d: -f2-)# 成员磁盘members=$(mdadm --detail $md_dev | grep -A10 "RaidDevice" | awk '/active sync/{print $NF}')echo "级别: $raid_level | 状态: $state"echo "成员磁盘: ${members//$'\n'/ }"done < <(grep 'md' /proc/mdstat | cut -d: -f1 | sed 's/^/\/dev\//')# 硬件RAID (MegaRAID/LSI)
elif command -v MegaCli64 &>/dev/null && sudo MegaCli64 -AdpAllInfo -aAll | grep -q "Adapter"; thenecho -e "\033[1;31m[硬件RAID detected]\033[0m"adapter_count=$(sudo MegaCli64 -AdpCount | grep "Controller Count" | cut -d: -f2)echo "适配器数量: $adapter_count"# RAID配置详情sudo MegaCli64 -LDInfo -Lall -aAll | awk '/Virtual Drive:/ {vd=$3}/RAID Level/ {level=$4}/Size/ {size=$3}/State/ {state=$3}/Number Of Drives/ {disks=$4}vd && level && size && state && disks {print "虚拟磁盘" vd ": RAID" level " | 大小:" size " | 状态:" state " | 磁盘数:" disks;vd=level=size=state=disks=""}'
# 无RAID
elseecho "未检测到RAID配置"
fi

2.权限并执行

chmod +x hardware_disk_info.sh
./hardware_disk_info.sh | tee /home/hardware_disk_info.txt
http://www.lqws.cn/news/546013.html

相关文章:

  • 电子行业 MES 系统:生产管理的智能引擎
  • Minio的扩容
  • 【docker】docker run参数说明
  • Imbalanced-learn 5. Ensemble of samplers
  • 【水印论文阅读1】将水印规则的定义域从离散的符号空间转移到连续的语义空间
  • 【大模型水印论文阅读2】前缀文本编码、均匀性约束
  • 【linux】程序地址空间
  • 信息抽取领域关键Benchmark方法:分类体系
  • 不同类型的微型导轨精度降低速度有何差异?
  • 专注搜索引擎优化的专业模板平台
  • 【MySQL进阶】服务器配置与管理——系统变量,选项,状态变量
  • CVE-2015-5531源码分析与漏洞复现(Elasticsearch目录遍历漏洞)
  • C语言高级编程
  • 【日志】Unity游戏实习该怎么准备
  • Unity知识点-Renderer常用材质变量
  • 数据结构之顺序表(C语言版本)
  • 【高并发服务器项目测试报告】
  • 大事件项目记录4-用户接口开发-更新用户基本信息
  • 【论文阅读 | CVPR 2025 |MambaVision:一种混合 Mamba-Transformer 视觉骨干网络】
  • Node.js到底是什么
  • Dockerfile——AI教你学Docker
  • 【Python】实现对LGBT+ rights worldwide (2025)数据集的可视化展示
  • 还在手动部署?用Jenkins+Docker+Git实现自动化CI/CD
  • 使用ant-design-vue 写个适用于web端的条件搜索栏组件,可折叠展开
  • 2025Mybatis最新教程(七)
  • 机器学习中为什么要用混合精度训练
  • 2025.6.27总结
  • HTTP协议中Connection: Keep-Alive和Keep-Alive: timeout=60, max=100的作用
  • SpringMVC系列(四)(请求处理的十个实验(下))
  • 多模态融合相机L3CAM