功能亮点
全面硬件检测:
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; do
if [[ $line == *"Ethernet controller"* ]]; then
nic_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=0
if [ $gpu_count -eq 0 ]; then
echo "未检测到显卡"
else
idx=1
while IFS= read -r line; do
model=$(echo "$line" | cut -d: -f3-)
if [[ $model == *"Intel"* || $model == *"UHD"* ]]; then
type="集成显卡"
else
type="独立显卡"
fi
echo "显卡$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" ]; then
echo "未检测到RAID卡"
else
echo "$raid_info" | while read -r line; do
model=$(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=0
while IFS= read -r block; do
size=$(echo "$block" | grep "Size:" | grep -v "No Module" | awk '{print $2}')
[ -z "$size" ] && continue
if [[ $size =~ [0-9]+ ]]; then
mem_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-"* ]]; then
ddr_gen="DDR4 (虚拟化环境)"
else
ddr_gen="$type"
fi
echo "内存$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; do
dev="/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/HDD
rotational=$(cat /sys/block/$disk/queue/rotational 2>/dev/null)
if [ "$rotational" = "0" ]; then
type="\033[1;32mSSD\033[0m"
ssd_count=$((ssd_count+1))
else
type="\033[1;33mHDD\033[0m"
hdd_count=$((hdd_count+1))
fi
# 输出单块硬盘信息
echo -e "磁盘$((++disk_count)): $dev | 型号: ${model:-未知} | 大小: $size | 类型: $type"
done
echo -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; then
echo -e "\033[1;31m[软件RAID detected]\033[0m"
while read -r md_dev; do
echo -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"; then
echo -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
else
echo "未检测到RAID配置"
fi
2.权限并执行
chmod +x hardware_disk_info.sh
./hardware_disk_info.sh | tee /home/hardware_disk_info.txt