空闲云盘扫描脚本
1.空闲磁盘场景


2.空闲云盘扫描脚本
a.win系统的空闲云盘扫描脚本
# 优化版本:仅在发现问题时输出信息
$issues = @()
$issuesFound = $false
try {
# 获取服务器IP地址(仅在需要输出时才获取)
$serverIP = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object {
$_.InterfaceAlias -notlike "*Loopback*" -and
$_.IPAddress -ne "127.0.0.1"
} | Select-Object -First 5).IPAddress
}
catch {
$serverIP = "无法获取IP地址"
}
try {
# 获取所有物理磁盘
$Disks = Get-Disk -ErrorAction Stop
foreach ($disk in $Disks) {
# 检查脱机状态
if ($disk.OperationalStatus -eq "Offline") {
$issues += "磁盘 $($disk.FriendlyName) (ID: $($disk.Number)) 处于脱机状态"
$issuesFound = $true
}
# 只有在磁盘联机时才检查是否已分区
elseif ($disk.OperationalStatus -eq "Online") {
try {
$partitions = Get-Partition -DiskNumber $disk.Number -ErrorAction SilentlyContinue
if (-not $partitions -or $partitions.Count -eq 0) {
$issues += "磁盘 $($disk.FriendlyName) (ID: $($disk.Number)) 已联机但未进行分区"
$issuesFound = $true
}
}
catch {
# 可选:记录分区检查错误(也可静默)
# $issues += "无法读取磁盘 $($disk.Number) 的分区信息: $($_.Exception.Message)"
# $issuesFound = $true
}
}
}
}
catch {
# 获取磁盘失败也视为问题(根据需求决定是否报告)
# 若希望完全静默无错误也不输出,可注释以下三行
$issues += "无法获取物理磁盘信息: $($_.Exception.Message)"
$issuesFound = $true
}
# === 只有在发现问题时才输出结果 ===
if ($issuesFound) {
Write-Host ""
Write-Host "=" * 50 -ForegroundColor Cyan
Write-Host "检查结果: 发现问题" -ForegroundColor Red
Write-Host "服务器IP: $serverIP" -ForegroundColor Red
Write-Host "问题详情:" -ForegroundColor Red
$issues | ForEach-Object { Write-Host " - $_" -ForegroundColor Red }
Write-Host "=" * 50 -ForegroundColor Cyan
}b.linux空闲云盘扫描脚本
#!/bin/bash
# 获取服务器IP信息的函数
get_ip_info() {
echo "=== Server IP Information ==="
# 获取所有网络接口的IP地址
ip addr show | grep -E 'inet ' | grep -v '127.0.0.1' | awk '{print "Interface: " $NF ", IP: " $2}'
echo "============================"
}
# 检查磁盘分区和挂载情况
check_disk_mount() {
local has_issue=false
# 获取所有磁盘设备(排除虚拟设备和光驱)
disks=$(lsblk -d -o NAME,TYPE | grep disk | awk '{print "/dev/"$1}')
# 检查每个磁盘
for disk in $disks; do
# 检查磁盘是否已分区
partitions=$(lsblk -o NAME,TYPE "$disk" | grep -c part)
if [ "$partitions" -eq 0 ]; then
# 磁盘未分区
echo "Warning: Disk $disk is not partitioned"
has_issue=true
else
# 磁盘已分区,检查分区是否挂载
disk_partitions=$(lsblk -o NAME,TYPE,MOUNTPOINT "$disk" | grep part)
# 逐行检查每个分区
while IFS= read -r line; do
partition_name=$(echo "$line" | awk '{print "/dev/"$1}')
mount_point=$(echo "$line" | awk '{print $3}')
# 如果分区没有挂载点(显示为空或[SWAP]除外)
if [ -z "$mount_point" ] || [ "$mount_point" = "" ]; then
# 检查是否为swap分区
if ! lsblk -o NAME,LABEL,TYPE "$partition_name" | grep -q swap; then
echo "Warning: Partition $partition_name is not mounted"
has_issue=true
fi
fi
done <<< "$disk_partitions"
fi
done
# 如果发现问题,打印IP信息
if [ "$has_issue" = true ]; then
get_ip_info
return 1
fi
return 0
}
# 主函数
main() {
# 检查是否以root权限运行(可选,某些信息可能需要root权限)
if [ "$EUID" -ne 0 ]; then
echo "Note: Running without root privileges, some information may be limited"
fi
# 执行磁盘检查
check_disk_mount
}
# 执行主函数
main
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 云架构师夏天
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果