怎么用脚本生成硬盘使用报告

wen 实用脚本 1

本文目录导读:

怎么用脚本生成硬盘使用报告

  1. Linux Shell 脚本
  2. Windows PowerShell 脚本
  3. 定时任务设置
  4. 使用说明

Linux Shell 脚本

基础版 - 显示磁盘空间使用情况

#!/bin/bash
echo "=========================================="
echo "      硬盘使用报告 - $(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="
echo ""
echo "=== 磁盘分区使用情况 ==="
df -h | grep -v "tmpfs\|devtmpfs\|overlay"
echo ""
echo "=== 磁盘总容量和已用空间 ==="
df -h --total | grep "total"
echo ""
echo "=== inode 使用情况 ==="
df -i | grep -v "tmpfs\|devtmpfs\|overlay"

进阶版 - 带阈值警告的详细报告

#!/bin/bash
# 报告文件路径
REPORT_FILE="/tmp/disk_report_$(date +%Y%m%d).txt"
WARNING_THRESHOLD=80  # 警告阈值(百分比)
echo "正在生成硬盘使用报告..."
echo "==========================================" > "$REPORT_FILE"
echo "硬盘使用报告 - 生成时间: $(date)" >> "$REPORT_FILE"
echo "==========================================" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "1. 磁盘分区使用情况:" >> "$REPORT_FILE"
df -h >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "2. 磁盘性能统计:" >> "$REPORT_FILE"
if command -v iostat &> /dev/null; then
    iostat -x 1 1 >> "$REPORT_FILE"
else
    echo "iostat 未安装" >> "$REPORT_FILE"
fi
echo "" >> "$REPORT_FILE"
echo "3. 主要挂载点详情:" >> "$REPORT_FILE"
# 检查主要挂载点
df -h | grep -v "tmpfs\|devtmpfs\|overlay\|loop" | while read line; do
    if [[ $line == *"Filesystem"* ]]; then
        echo "$line" >> "$REPORT_FILE"
        continue
    fi
    usage=$(echo $line | awk '{print $5}' | sed 's/%//')
    mount_point=$(echo $line | awk '{print $6}')
    filesystem=$(echo $line | awk '{print $1}')
    if [ "$usage" -ge "$WARNING_THRESHOLD" ] 2>/dev/null; then
        echo "⚠️ 警告: $mount_point ($filesystem) 使用率 $usage% 超过阈值 $WARNING_THRESHOLD%" >> "$REPORT_FILE"
    fi
done
echo "" >> "$REPORT_FILE"
echo "4. 大型目录搜索(超过1GB):" >> "$REPORT_FILE"
find / -type d -maxdepth 3 -exec du -sh {} \; 2>/dev/null | sort -rh | head -20 >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "报告已保存至: $REPORT_FILE"
echo "报告文件大小: $(du -h "$REPORT_FILE" | cut -f1)"
# 发送邮件(需配置 sendmail 或 mail 命令)
if command -v mail &> /dev/null; then
    mail -s "硬盘使用报告" admin@example.com < "$REPORT_FILE"
    echo "报告已发送至 admin@example.com"
fi

Windows PowerShell 脚本

# disk_report.ps1
Write-Host "正在生成硬盘使用报告..." -ForegroundColor Green
$reportDate = Get-Date -Format "yyyyMMdd"
$reportPath = "C:\Reports\DiskReport_$reportDate.html"
# 创建报告目录
if (!(Test-Path "C:\Reports")) {
    New-Item -ItemType Directory -Path "C:\Reports" -Force
}
# HTML 报告头部
$htmlHead = @"
<!DOCTYPE html>
<html>
<head>硬盘使用报告</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        h1 { color: #333; border-bottom: 2px solid #4CAF50; }
        h2 { color: #666; }
        table { border-collapse: collapse; width: 100%; margin: 20px 0; }
        th { background-color: #4CAF50; color: white; padding: 12px; text-align: left; }
        td { padding: 10px; border-bottom: 1px solid #ddd; }
        tr:hover { background-color: #f5f5f5; }
        .warning { color: red; font-weight: bold; }
        .ok { color: green; }
        .summary { background-color: #f9f9f9; padding: 20px; border-radius: 5px; }
    </style>
</head>
<body>
    <h1>硬盘使用报告</h1>
    <p>生成时间: $(Get-Date)</p>
    <hr>
"@
# 获取磁盘信息
$disks = Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3" | ForEach-Object {
    $used = $_.Size - $_.FreeSpace
    $usedPercent = [math]::Round(($used / $_.Size) * 100, 2)
    [PSCustomObject]@{
        Drive = $_.DeviceID
        Total = "{0:N2} GB" -f ($_.Size / 1GB)
        Used = "{0:N2} GB" -f ($used / 1GB)
        Free = "{0:N2} GB" -f ($_.FreeSpace / 1GB)
        UsedPercent = $usedPercent
        Status = if ($usedPercent -gt 80) { "⚠️ 警告" } else { "✓ 正常" }
    }
}
# 生成 HTML 表格
$tableRows = ""
foreach ($disk in $disks) {
    $rowClass = if ($disk.UsedPercent -gt 80) { "warning" } else { "ok" }
    $tableRows += @"
        <tr class="$rowClass">
            <td>$($disk.Drive)</td>
            <td>$($disk.Total)</td>
            <td>$($disk.Used)</td>
            <td>$($disk.Free)</td>
            <td>$($disk.UsedPercent)%</td>
            <td>$($disk.Status)</td>
        </tr>
"@
}
$summary = @"
<div class="summary">
    <h2>lt;/h2>
    <p>总共磁盘数: $($disks.Count)</p>
    <p>警告磁盘数: $(($disks | Where-Object { $_.UsedPercent -gt 80 }).Count)</p>
    <p>正常磁盘数: $(($disks | Where-Object { $_.UsedPercent -le 80 }).Count)</p>
    <p>总容量: $(($disks | ForEach-Object { [double]($_.Total -replace ' GB','') } | Measure-Object -Sum).Sum.ToString("N2")) GB</p>
</div>
"@
# 完整 HTML 内容
$htmlContent = @"
$htmlHead
<h2>磁盘使用详情</h2>
<table>
    <tr>
        <th>驱动器</th>
        <th>总容量</th>
        <th>已用空间</th>
        <th>可用空间</th>
        <th>使用率</th>
        <th>状态</th>
    </tr>
    $tableRows
</table>
$summary
<h2>建议操作</h2>
<ul>
"@
# 添加建议
$warningDisks = $disks | Where-Object { $_.UsedPercent -gt 80 }
if ($warningDisks.Count -gt 0) {
    foreach ($disk in $warningDisks) {
        $htmlContent += "<li><strong>$($disk.Drive)</strong>: 使用率 $($disk.UsedPercent)%,建议清理或扩展空间</li>"
    }
} else {
    $htmlContent += "<li>所有磁盘使用率正常</li>"
}
$htmlContent += @"
</ul>
</body>
</html>
"@
# 保存报告
$htmlContent | Out-File -FilePath $reportPath -Encoding UTF8
Write-Host "报告已生成: $reportPath" -ForegroundColor Green
Write-Host "磁盘使用摘要:" -ForegroundColor Yellow
$disks | Format-Table Drive, UsedPercent, Status -AutoSize
# 打开报告
Start-Process $reportPath

定时任务设置

Linux - crontab

# 每天凌晨1点运行
0 1 * * * /path/to/disk_report.sh
# 每小时运行一次
0 * * * * /path/to/disk_report.sh

Windows - 任务计划程序

# 创建定时任务(每天上午9点运行)
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\disk_report.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "09:00AM"
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount
Register-ScheduledTask -TaskName "DiskReport" -Action $action -Trigger $trigger -Principal $principal

使用说明

  1. Linux 脚本

    • 保存为 disk_report.sh
    • 添加执行权限:chmod +x disk_report.sh
    • 运行:./disk_report.sh
  2. Windows PowerShell

    • 以管理员身份运行 PowerShell
    • 设置执行策略:Set-ExecutionPolicy RemoteSigned
    • 运行:.\disk_report.ps1
  3. 自定义配置

    • 修改 WARNING_THRESHOLD 变量调整告警阈值
    • 修改报告路径和格式
    • 可添加邮件发送功能

这些脚本可以满足日常硬盘监控需求,你可以根据实际环境进行修改和扩展。

抱歉,评论功能暂时关闭!