本文目录导读:

要用脚本生成文件系统报告,主要取决于你的操作系统和具体需求,以下是几种常见的方法,涵盖Linux和Windows环境。
Linux 环境
基础磁盘使用报告(Shell脚本)
#!/bin/bash
# 文件系统使用报告
echo "=========================================="
echo "文件系统使用报告 - $(date)"
echo "=========================================="
echo ""
# 1. 磁盘分区使用情况
echo "--- 磁盘分区使用情况 ---"
df -h
echo ""
# 2. inode使用情况
echo "--- Inode使用情况 ---"
df -i
echo ""
# 3. 磁盘整体使用情况
echo "--- 磁盘使用统计 ---"
df -h --total | grep total
echo ""
# 4. 找出占用空间最大的目录(从根目录开始,5层深)
echo "--- 占用空间最大的前10个目录 ---"
du -h / 2>/dev/null | sort -rh | head -10
echo ""
# 5. 文件系统类型信息
echo "--- 文件系统类型 ---"
df -T
echo ""
# 6. 磁盘I/O统计(需要sysstat包)
if command -v iostat &> /dev/null; then
echo "--- 磁盘I/O统计 ---"
iostat -x 1 2
fi
保存为 filesystem_report.sh 并执行:
chmod +x filesystem_report.sh ./filesystem_report.sh > report.txt
使用Python生成更详细的报告
#!/usr/bin/env python3
import os
import subprocess
import json
from datetime import datetime
def get_filesystem_info():
"""获取文件系统信息"""
info = {
"timestamp": datetime.now().isoformat(),
"hostname": os.uname().nodename,
"filesystems": []
}
# 执行df命令获取信息
result = subprocess.run(['df', '-h', '-T'], capture_output=True, text=True)
lines = result.stdout.strip().split('\n')[1:] # 跳过标题行
for line in lines:
parts = line.split()
if len(parts) >= 7:
fs_info = {
"filesystem": parts[0],
"type": parts[1],
"size": parts[2],
"used": parts[3],
"avail": parts[4],
"use_percent": parts[5],
"mounted_on": parts[6]
}
info["filesystems"].append(fs_info)
return info
def generate_report():
"""生成报告"""
info = get_filesystem_info()
print("=" * 60)
print(f"文件系统报告 - {info['hostname']}")
print(f"生成时间: {info['timestamp']}")
print("=" * 60)
# 统计信息
total_size = 0
total_used = 0
warning_fs = []
print(f"\n{'文件系统':<20} {'类型':<10} {'大小':<10} {'已用':<10} {'可用':<10} {'使用率':<8} {'挂载点'}")
print("-" * 80)
for fs in info['filesystems']:
print(f"{fs['filesystem']:<20} {fs['type']:<10} {fs['size']:<10} "
f"{fs['used']:<10} {fs['avail']:<10} {fs['use_percent']:<8} {fs['mounted_on']}")
# 检查使用率是否超过80%
try:
use_pct = int(fs['use_percent'].rstrip('%'))
if use_pct > 80:
warning_fs.append(fs['filesystem'])
except ValueError:
pass
# 警告信息
if warning_fs:
print(f"\n{'=' * 60}")
print("⚠️ 警告:以下文件系统使用率超过80%:")
for fs in warning_fs:
print(f" - {fs}")
return info
if __name__ == "__main__":
info = generate_report()
# 可选择保存为JSON格式
with open('filesystem_report.json', 'w') as f:
json.dump(info, f, indent=2)
高级报告:包含分区和inode信息
#!/bin/bash
# 高级文件系统报告
OUTPUT_FILE="filesystem_report_$(date +%Y%m%d_%H%M%S).html"
cat > $OUTPUT_FILE << EOF
<!DOCTYPE html>
<html>
<head>文件系统报告 - $(date)</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; }
table { border-collapse: collapse; width: 100%; margin: 20px 0; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
tr:nth-child(even) { background-color: #f2f2f2; }
.warning { color: red; font-weight: bold; }
.ok { color: green; }
</style>
</head>
<body>
<h1>文件系统使用报告</h1>
<p>生成时间: $(date)</p>
<p>主机名: $(hostname)</p>
EOF
# 添加磁盘使用表格
echo "<h2>磁盘分区使用情况</h2>" >> $OUTPUT_FILE
echo "<table><tr><th>文件系统</th><th>大小</th><th>已用</th><th>可用</th><th>使用率</th><th>挂载点</th></tr>" >> $OUTPUT_FILE
df -h | tail -n +2 | while read line; do
echo "<tr>" >> $OUTPUT_FILE
for item in $line; do
echo "<td>$item</td>" >> $OUTPUT_FILE
done
echo "</tr>" >> $OUTPUT_FILE
done
echo "</table>" >> $OUTPUT_FILE
# 添加警告信息
echo "<h2>警告信息</h2>" >> $OUTPUT_FILE
echo "<ul>" >> $OUTPUT_FILE
df -h | tail -n +2 | while read fs size used avail use mounted; do
use_pct=${use%\%}
if [ "$use_pct" -gt 80 ] 2>/dev/null; then
echo "<li class='warning'>⚠️ $mounted 使用率: $use (已用: $used / 总计: $size)</li>" >> $OUTPUT_FILE
fi
done
echo "</ul>" >> $OUTPUT_FILE
echo "</body></html>" >> $OUTPUT_FILE
echo "HTML报告已生成: $OUTPUT_FILE"
Windows 环境
PowerShell脚本
# filesystem_report.ps1
Write-Host "=" * 60
Write-Host "Windows 文件系统报告 - $(Get-Date)"
Write-Host "=" * 60
# 1. 获取磁盘信息
Write-Host "`n--- 磁盘使用情况 ---"
Get-PSDrive -PSProvider FileSystem |
Select-Object Name, Used, Free, @{N="Size";E={$_.Used + $_.Free}} |
Format-Table -AutoSize
# 2. 获取逻辑磁盘详细信息
Write-Host "`n--- 逻辑磁盘详细信息 ---"
Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3" |
Select-Object DeviceID, @{N="Size(GB)";E={[math]::Round($_.Size/1GB, 2)}},
@{N="Free(GB)";E={[math]::Round($_.FreeSpace/1GB, 2)}},
@{N="Used(%)";E={[math]::Round(($_.Size-$_.FreeSpace)/$_.Size*100, 2)}},
FileSystem
# 3. 检查磁盘使用率超过90%的警告
Write-Host "`n--- 磁盘使用率警告 ---"
$disks = Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3"
$warning = @()
foreach ($disk in $disks) {
$usedPercent = ($disk.Size - $disk.FreeSpace) / $disk.Size * 100
if ($usedPercent -gt 90) {
$warning += $disk.DeviceID
Write-Host "⚠️ 警告: $($disk.DeviceID) 使用率: $([math]::Round($usedPercent, 2))%" -ForegroundColor Red
}
}
# 4. 生成HTML报告
$html = @"
<!DOCTYPE html>
<html>
<head>Windows 文件系统报告</title>
<style>
body { font-family: 'Segoe UI', Arial, sans-serif; margin: 20px; }
h1 { color: #0078d4; }
table { border-collapse: collapse; width: 100%; margin: 20px 0; }
th { background-color: #0078d4; color: white; padding: 10px; }
td { border: 1px solid #ddd; padding: 8px; }
.warning { background-color: #fff3cd; color: #856404; }
</style>
</head>
<body>
<h1>Windows 文件系统报告</h1>
<p>生成时间: $(Get-Date)</p>
"@
# 添加到HTML
$html += "<table><tr><th>盘符</th><th>大小(GB)</th><th>已用(GB)</th><th>可用(GB)</th><th>使用率(%)</th></tr>"
foreach ($disk in $disks) {
$size = [math]::Round($disk.Size/1GB, 2)
$free = [math]::Round($disk.FreeSpace/1GB, 2)
$used = $size - $free
$percent = [math]::Round(($used/$size)*100, 2)
$class = if ($percent -gt 90) { "warning" } else { "" }
$html += "<tr class='$class'><td>$($disk.DeviceID)</td><td>$size</td><td>$used</td><td>$free</td><td>$percent%</td></tr>"
}
$html += "</table></body></html>"
$html | Out-File -FilePath "filesystem_report_$(Get-Date -Format 'yyyyMMdd_HHmmss').html"
VBScript (适合旧系统)
' filesystem_report.vbs
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
WScript.Echo "=================================="
WScript.Echo "文件系统报告 - " & Now
WScript.Echo "=================================="
WScript.Echo ""
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType=3")
For Each objDisk in colDisks
WScript.Echo "盘符: " & objDisk.DeviceID
WScript.Echo "文件系统: " & objDisk.FileSystem
WScript.Echo "总大小: " & Round(objDisk.Size / 1073741824, 2) & " GB"
WScript.Echo "可用空间: " & Round(objDisk.FreeSpace / 1073741824, 2) & " GB"
WScript.Echo "已用空间: " & Round((objDisk.Size - objDisk.FreeSpace) / 1073741824, 2) & " GB"
WScript.Echo "使用率: " & Round((objDisk.Size - objDisk.FreeSpace) / objDisk.Size * 100, 2) & "%"
' 检查是否超过90%
If ((objDisk.Size - objDisk.FreeSpace) / objDisk.Size * 100) > 90 Then
WScript.Echo "警告: 磁盘使用率超过90%!"
End If
WScript.Echo "-------------------"
Next
' 输出到文件
Set objFile = objFSO.CreateTextFile("filesystem_report.txt", True)
' ... 同样的内容写入文件 ...
定时执行报告
Linux (crontab)
# 每天8点生成报告 0 8 * * * /path/to/filesystem_report.sh
Windows (任务计划程序)
# 创建每天8点的任务 $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\scripts\filesystem_report.ps1" $trigger = New-ScheduledTaskTrigger -Daily -At 08:00AM Register-ScheduledTask -TaskName "文件系统报告" -Action $action -Trigger $trigger
推荐使用方案
- 快速检查: 使用
df -h(Linux) 或Get-PSDrive(Windows) - 日常监控: 使用Python脚本生成JSON/HTML报告
- 报警系统: 结合使用率检查和邮件通知
- 自动化: 配置定时任务,自动生成和发送报告
选择哪种方法取决于你的环境、需求和熟悉程度,Python脚本通常是最灵活和可维护的选择。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播