一键获取服务器硬件脚本: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