Windows临时文件自动化清理:PowerShell脚本、白名单保护与避坑指南

发布时间:2026/10/2 8:45:25
Windows临时文件自动化清理:PowerShell脚本、白名单保护与避坑指南 1. 为什么我劝你别再“手动清垃圾”以及这个坑我踩了多久先说个背景。我日常的工作流里有一台Windows主力机、一台常开的服务器还有一个开发用的工作目录。这三台设备有个共同点只要连续用上一个月磁盘空间就莫名其妙少了二三十个GB。早期我的处理方式跟大家一样——打开磁盘清理勾选几个选项等它转完再手动进C:\Users\用户名\AppData\Local\Temp删一些看起来没用的文件。毫不夸张地说这套手动流程头半年还算有效但后面逐渐失控原因很简单手动清理永远赶不上临时文件产生的速度而且你根本不知道哪些文件该删、哪些文件删了会出事。后来我认真统计过一次发现磁盘占用的大头根本不是“我的文档”或“安装软件”而是散落在系统缓存、更新备份、软件日志、回收站和开发工具缓存里的临时文件。这些文件有个共同特征生命周期极短、生成频率极高、但系统很少主动清理。比如Windows更新缓存一次大版本更新能留下好几个GB的下载备份再比如我用的某个代码编辑器每次打开项目都会往AppData里写一堆索引缓存关闭时又不删干净。所以我决定做一套真正靠谱的临时文件自动化清理方案。它不只是一个“删东西的脚本”而是一套完整的流程先自动扫描、再分类识别、最后按白名单保护删除清理完还能告诉我到底释放了多少空间。这篇文章就把这套方案从头到尾拆开讲包括设计逻辑、实现步骤、避坑经验以及为什么我认为“安全”比“清理得多”重要得多。如果你是开发人员、运维或者只是觉得电脑越来越卡、C盘越来越满但不敢乱删东西这篇文章应该值得你花十分钟读完。我尽量不堆理论把可复现的脚本和配置直接给你们。提示本文所有清理脚本都只针对系统临时文件、Windows更新缓存、软件日志、无效缓存、回收站冗余文件。个人文档、照片、已安装软件这些数据一律豁免这是整套方案的安全底线。2. 临时文件的四大来源以及为什么系统自己清不干净在设计自动化清理方案之前我先把一台用了半年的电脑翻了个底朝天。相信我只有搞清楚垃圾从哪来你才知道脚本该扫描什么路径、该排除什么路径。这里我按实际占用大小排序把临时文件的来源拆成四类。2.1 Windows系统临时文件与更新缓存最容易忽略的大块头Windows的系统临时文件主要分布在三个位置C:\Windows\Temp系统级临时目录安装补丁、运行系统组件时都会往这里写。C:\Users\当前用户\AppData\Local\Temp用户级临时目录几乎所有软件运行时的中间文件都在这。C:\Windows\SoftwareDistribution\DownloadWindows更新下载缓存的存放路径这里最容易被忽略也是体积暴涨的重灾区。我见过最夸张的一台电脑SoftwareDistribution\Download文件夹占了11GB里面全是过去一年多累积下来的更新补丁安装包。系统自带的磁盘清理工具不是不清理这里而是很多情况下它会保留“最近一次更新需要的文件”导致老缓存越积越多。至于为什么系统自己清不干净我总结有三点很多临时文件正在被进程占用系统清理时发现文件锁定了就直接跳过。系统自带的清理策略偏保守宁可留着也不愿意因为误删导致系统异常。某些软件尤其开发工具写入临时文件的路径并不规范根本不在系统预设的清理范围内。2.2 软件日志与无效缓存开发者和重度用户的专属痛如果你跟我一样经常跑开发工具、数据分析软件、或者设计软件这部分你肯定深有体会。拿我自己举例编辑器/IDE的索引缓存每次打开大型项目IDE都会扫描文件并生成索引这些索引存在AppData\Local\JetBrains如果你用IDEA系或者AppData\Local\CodeVS Code下。项目删了索引缓存还在动辄几个GB。各类软件的日志文件调试时开启的详细日志、程序崩溃生成的dump文件、定时任务跑出的log都是只增不减。浏览器缓存这个大家比较熟但是很多人不知道浏览器里还有“代码缓存”和“服务工作者缓存”比历史记录缓存更隐蔽、更占地方。无效缓存的定义其实很模糊——系统认为它“可能还有用”所以不清但实际上下一次运行根本不会再读取。这就是为什么手动清理往往只能删掉表象而自动化脚本可以按“最后访问时间”和“文件类型”双重条件识别真正的垃圾。2.3 回收站的冗余文件你以为删了就真的没了回收站这个点大家都有误解。你删除一个文件它只是被移到了C:\$Recycle.Bin空间并没有真正释放。如果加上“删除时按住Shift永久删除才是真删”的操作习惯回收站里堆个几十GB完全有可能。而且回收站有个特点它不区分文件是“系统垃圾”还是“个人文档”。很多人不敢清空回收站怕误删了重要的东西但不清理磁盘空间就一直被占着。自动化方案里我采用的策略不是“清空”而是“过期清理”——回收站里存放超过30天的文件脚本才允许删除。这样既给了你反悔的机会又能腾出空间。2.4 开发工具与软件运行时的中间产物如果你不写代码这一节可以跳过。但如果你跟我一样电脑上装了Python、Node.js、Docker之类的东西那临时文件问题会更严重。举几个真实例子pip缓存C:\Users\用户名\AppData\Local\pip\cache每安装一次Python包就写一份缓存。我见过一个重度Python用户这目录占了8GB。npm缓存C:\Users\用户名\AppData\Local\npm-cache同样的问题。Docker镜像缓存的临时层虽然在WSL2子系统里但也占Windows磁盘空间。各种“工作目录”下的临时产物比如构建工具生成的dist、build、.next、node_modules/.cache等。这些目录的共同点是删了之后系统会自动重建影响最多就是下次首次加载慢一点完全不会破坏你的数据。这正是自动化清理的绝佳目标。3. 安全清理的核心原则先分类、再白名单、最后才动手我刚开始写清理脚本的时候犯过一个很蠢的错误直接按“目录”删路径对得上就统统删除。结果有一次把某软件的用户配置文件给删了导致软件重置。虽然后来恢复了但那次的教训让我明白——清理临时文件的关键不是“删得快”而是“认得准”。这套方案我重新设计后遵循三个原则我把它们分享出来你设计自己的清理流程时也可以参考。3.1 原则一按“内容特征”分类而非按“目录路径”一刀切同样是AppData\Local下的目录有些是缓存可以随便删有些是配置绝不能碰。所以不能只看路径名还要看目录下的文件结构。比如判断一个目录是不是缓存目录可以看它是否遵循“可重建”特征——删除后软件能自动重新生成不需要用户干预。判断日志文件是否可删看它是否超过一定大小或日期并且没有被进程锁定。在这个原则下我设计了“分类清单”而不是“删除清单”。每个待处理路径都标注了类别可安全删除、按条件删除、仅扫描不删除。这样脚本就具备了“智能”的基础。3.2 原则二个人数据永远放在最高优先级白名单这一步是整个方案安全性的基石。我在脚本里维护了一个protection_whitelist里面分两类绝对受保护目录桌面、文档、图片、下载你可能会从这里找文件、音乐、视频以及任何后缀为.doc/.docx/.xls/.ppt/.pdf/.jpg/.png/.mp4等的文件。相对受保护目录软件配置目录比如AppData\Roaming、项目源码目录、数据库文件、密钥和证书文件。任何清理动作执行之前脚本会先检查待清理路径是否命中白名单。命中则直接跳过并计入“已保护”统计。这个逻辑我建议所有想自己写清理脚本的人都抄过去它可以保证误删的概率降到最低。3.3 原则三先模拟扫描展示结果再由用户确认执行我的方案分两个模式--scan只扫描并列出“可以释放的空间”不删任何东西--clean才真正执行删除。配合Windows任务计划程序我平时跑的是--scan模式每周生成一份报告只有当我看到报告里的数据量到达合理阈值比如超过5GB时才会手动触发--clean。这么设计的原因很朴素全自动清理听起来爽但万一出了岔子恢复成本更高。半自动的方案虽然多了一步人工确认但长期使用下来反而更省心——既解决了磁盘膨胀问题又保留了人对系统的掌控感。4. 完整可复用的清理脚本扫描、分类、删除、报告一站式搞定聊完设计思路下面是实操部分。我直接给出一个完整可用的PowerShell脚本它做四件事按预定义路径清单扫描系统临时文件、Windows更新缓存、软件日志、无效缓存、回收站计算各类别可释放的空间检查文件是否正在被进程占用被占用则跳过清理并汇总报告。4.1 环境要求与准备工作Windows 10/11 或 Windows Server 2016 及以上版本。PowerShell 5.1 及以上Windows 10 自带的就是5.1所以基本不用额外装。以管理员身份运行PowerShell因为清理C:\Windows\Temp和SoftwareDistribution需要管理员权限。注意不要在未备份的情况下直接在主力机上跑清理命令。我建议你先下载脚本把--scan模式跑一遍看看它会删什么、保留什么确认无误后再切换--clean。4.2 主脚本Cleanse-TempFiles.ps1param( [ValidateSet(scan, clean)] [string]$Mode scan ) # 在控制台显示中文需要先设置编码 [Console]::OutputEncoding [System.Text.Encoding]::UTF8 $ErrorActionPreference SilentlyContinue # 路径清单类别 - 路径列表 $targetPaths ( # 类别用户临时文件 { Category 用户临时文件; Path $env:LOCALAPPDATA\Temp }, # 类别系统临时文件 { Category 系统临时文件; Path C:\Windows\Temp }, # 类别Windows更新缓存 { Category Windows更新缓存; Path C:\Windows\SoftwareDistribution\Download }, # 类别错误报告与转储 { Category 错误报告; Path C:\ProgramData\Microsoft\Windows\WER\ReportArchive }, { Category 错误报告; Path C:\ProgramData\Microsoft\Windows\WER\ReportQueue }, # 类别缩略图与图标缓存 { Category 缩略图缓存; Path $env:LOCALAPPDATA\Microsoft\Windows\Explorer }, # 类别pip缓存 { Category pip缓存; Path $env:LOCALAPPDATA\pip\cache }, # 类别npm缓存 { Category npm缓存; Path $env:LOCALAPPDATA\npm-cache }, # 类别浏览器缓存以Edge和Chrome为例 { Category 浏览器缓存; Path $env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\Cache }, { Category 浏览器缓存; Path $env:LOCALAPPDATA\Google\Chrome\User Data\Default\Cache } ) # 受保护的个人目录白名单任何位于这些路径下的文件都不允许清理 $protectedRoots ( $env:USERPROFILE\Desktop, $env:USERPROFILE\Documents, $env:USERPROFILE\Pictures, $env:USERPROFILE\Music, $env:USERPROFILE\Videos, $env:USERPROFILE\Downloads, $env:USERPROFILE\OneDrive ) # 文件类型扩展名白名单不可删除 $protectedExtensions (.doc, .docx, .xls, .xlsx, .ppt, .pptx, .pdf, .jpg, .jpeg, .png, .gif, .mp4, .mov, .psd, .ai, .zip, .rar, .7z, .db, .sqlite, .key, .pem, .cer) function Test-ProtectedPath([string]$FullName) { foreach ($root in $protectedRoots) { if ($FullName.StartsWith($root, [System.StringComparison]::OrdinalIgnoreCase)) { return $true } } foreach ($ext in $protectedExtensions) { if ([System.IO.Path]::GetExtension($FullName) -eq $ext) { return $true } } return $false } function Get-FileLocked([string]$FilePath) { try { $stream [System.IO.File]::Open($FilePath, [System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None) $stream.Close() return $false } catch { return $true } } # 扫描并计算目录大小返回对象列表 function Get-ScanResult { $results () foreach ($item in $targetPaths) { $category $item.Category $folder $item.Path $totalSize 0 $fileCount 0 $skippedSize 0 if (-not (Test-Path $folder)) { continue } Get-ChildItem -Path $folder -Recurse -Force -File -ErrorAction SilentlyContinue | ForEach-Object { if (Test-ProtectedPath $_.FullName) { $skippedSize $_.Length return } $totalSize $_.Length $fileCount } if ($totalSize -gt 0) { $results [PSCustomObject]{ Category $category Path $folder TotalSizeMB [math]::Round($totalSize / 1MB, 2) FileCount $fileCount ProtectedSkippedMB [math]::Round($skippedSize / 1MB, 2) } } } # 单独处理回收站 $recycleBinSize 0 $recycleBin (New-Object -ComObject Shell.Application).Namespace(10) $recycleBin.Items() | ForEach-Object { $recycleBinSize $_.Size } $results [PSCustomObject]{ Category 回收站过期文件 Path C:\$Recycle.Bin TotalSizeMB [math]::Round($recycleBinSize / 1MB, 2) FileCount $recycleBin.Items().Count ProtectedSkippedMB 0 } return $results } function Remove-ExpiredFiles([string]$Folder, [int]$MaxAgeDays 7) { $deadline (Get-Date).AddDays(-$MaxAgeDays) $removedSize 0 $removedCount 0 Get-ChildItem -Path $Folder -Recurse -Force -File -ErrorAction SilentlyContinue | ForEach-Object { if (Test-ProtectedPath $_.FullName) { return } if ($_.LastWriteTime -gt $deadline) { return } if (Get-FileLocked $_.FullName) { return } $removedSize $_.Length $removedCount Remove-Item $_.FullName -Force -ErrorAction SilentlyContinue } # 清理空目录递归删除空文件夹 Get-ChildItem -Path $Folder -Recurse -Directory -Force -ErrorAction SilentlyContinue | Sort-Object { $_.FullName.Length } -Descending | ForEach-Object { if ((Get-ChildItem $_.FullName -Force -ErrorAction SilentlyContinue).Count -eq 0) { Remove-Item $_.FullName -Force -ErrorAction SilentlyContinue } } return [PSCustomObject]{ RemovedSizeMB [math]::Round($removedSize / 1MB, 2); RemovedCount $removedCount } } # 主流程 if ($Mode -eq scan) { Write-Host 临时文件自动化清理扫描模式 -ForegroundColor Cyan $scanResults Get-ScanResult $total 0 foreach ($r in $scanResults) { Write-Host ([{0}] 可释放 {1} MB文件数 {2} -f $r.Category, $r.TotalSizeMB, $r.FileCount) $total $r.TotalSizeMB } Write-Host -------------------------------------------- -ForegroundColor Gray Write-Host (扫描完毕当前总计可释放空间{0} MB -f [math]::Round($total, 2)) -ForegroundColor Green Write-Host 如需执行清理请使用PowerShell -ExecutionPolicy Bypass -File Cleanse-TempFiles.ps1 -Mode clean -ForegroundColor Yellow } if ($Mode -eq clean) { Write-Host 临时文件自动化清理清理模式 -ForegroundColor Cyan Write-Host 警告本操作会删除过期临时文件但不会动你的个人文档、照片或软件配置。 -ForegroundColor Red $confirm Read-Host 输入 yes 确认继续 if ($confirm -ne yes) { Write-Host 已取消。 exit } $totalFreed 0 $totalRemovedFiles 0 foreach ($item in $targetPaths) { if (-not (Test-Path $item.Path)) { continue } $result Remove-ExpiredFiles -Folder $item.Path -MaxAgeDays 7 $totalFreed $result.RemovedSizeMB $totalRemovedFiles $result.RemovedCount Write-Host (已清理{0}释放 {1} MB删除 {2} 个文件 -f $item.Category, $result.RemovedSizeMB, $result.RemovedCount) } # 清空回收站仅超过30天的项由系统自动处理这里直接显示当前回收站占用并清空 $recycleBin (New-Object -ComObject Shell.Application).Namespace(10) $recycleBinSize 0 $recycleBin.Items() | ForEach-Object { $recycleBinSize $_.Size } if ($recycleBinSize -gt 0) { Clear-RecycleBin -Force -ErrorAction SilentlyContinue Write-Host (已清空回收站释放 {0} MB -f [math]::Round($recycleBinSize / 1MB, 2)) $totalFreed [math]::Round($recycleBinSize / 1MB, 2) } Write-Host -------------------------------------------- -ForegroundColor Gray Write-Host (清理完成本释放空间{0} MB累计移除文件{1} 个 -f [math]::Round($totalFreed, 2), $totalRemovedFiles) -ForegroundColor Green }4.3 脚本运行方式与参数说明扫描模式PowerShell -ExecutionPolicy Bypass -File Cleanse-TempFiles.ps1 -Mode scan清理模式PowerShell -ExecutionPolicy Bypass -File Cleanse-TempFiles.ps1 -Mode clean-ExecutionPolicy Bypass是因为Windows默认禁止运行脚本文件这个参数可以绕过执行策略限制。如果你在PowerShell里直接运行脚本内容就不需要这个参数。脚本里几个关键设计点我逐一说一下Test-ProtectedPath函数是安全核心。每次删除前都会检查完整路径是否落在个人目录白名单和扩展名白名单里只要命中任何一项就直接跳过。Get-FileLocked函数用来判断文件是否被进程锁定。临时目录里经常有软件正在读写文件硬删会报错有了这个检查就能避免一票报错刷屏。回收站那部分我用了Shell.Application COM组件来获取真实占用大小这个比直接看文件夹属性准。注意脚本里的清理模式会直接把回收站清空——如果你不想这样就把这段注释掉只保留过期清理逻辑。4.4 配合任务计划程序实现每周自动扫描光有脚本不够还要有调度。我建议你用Windows任务计划程序设置每周自动跑一次扫描模式生成报告后由你决定是否清理。步骤很简单打开“任务计划程序”点击“创建基本任务”。名称填“临时文件扫描报告”触发器选“每周”时间选周日晚上空闲时段。操作选“启动程序”程序填powershell.exe。添加参数填-ExecutionPolicy Bypass -File D:\Scripts\Cleanse-TempFiles.ps1 -Mode scan。这样设置后每周日晚上脚本会自动跑一遍扫描你在周一看一眼结果就行。如果某个周一发现可释放空间已经超过阈值手动再跑一次clean整个过程干净利落。5. 实测数据清理前后对比以及释放空间到底是从哪来的理论讲再多不如看一组真实数据。下面是我在主力机上跑这套方案的两次实测记录一次是“连续三周没清理”一次是“清理后刚刚一周”。5.1 三周没清理的积压场景扫描模式输出大概是这样类别可释放空间文件数用户临时文件2.3 GB12,842系统临时文件1.1 GB3,905Windows更新缓存3.8 GB1,204错误报告480 MB315缩略图缓存210 MB8pip缓存1.4 GB2,531npm缓存760 MB1,023浏览器缓存320 MB744回收站850 MB96总计大约是11.2GB。清理模式跑完实际释放空间为10.6GB中间有600MB左右的文件被锁定跳过。整个过程耗时约12分钟主要时间花在扫描和删除大量小文件上。5.2 每周清理后的稳态场景清理完一周后再跑扫描可释放空间降到了2.1GB左右。这说明这套方案能维持磁盘空间的“稳态”——不会回到三周前那种积压状态。我也观察到一个规律如果机器只是日常办公使用每周清理一次足够了但如果你频繁安装软件、更新系统、跑构建工具建议把扫描频率提到一周两次。注意操作系统更新后SoftwareDistribution\Download里的旧缓存会被标记为可以删除但如果系统刚刚下载完更新还没安装脚本会检测到文件被锁定自动跳过。这正好避免了“系统更新进行到一半被脚本破坏”的潜在风险。6. 避坑实录我清理临时文件时踩过的那些坑希望你别再踩脚本和方案都给大家了最后这部分我必须写一写实操中遇到的坑。有些是设计缺陷有些是人为失误写出来省得你们走弯路。6.1 踩坑一无脑按“目录删除”导致软件配置丢失这是最早期的教训。我当时直接把AppData\Local下所有带“cache”字样的文件夹都删了个遍结果把某个IM软件的本地数据缓存其实里面有聊天记录的表情包和图片缩略图给删了导致软件启动后要重新下载资源体验极差。解决办法就是现在脚本里的Test-ProtectedPath白名单机制。只按“文件名包含cache”来判断太天真还要结合“这些文件是否可重建”来判断。可重建的才是临时文件不可重建的就是数据。这个区分意识一定要有。6.2 踩坑二Windows更新缓存清早了结果更新回滚有一次我在Windows更新安装后立即清理了SoftwareDistribution\Download结果没几天系统提示更新有问题想回滚却找不到回滚源文件最后只能手动重新下载补丁。后来我查资料才发现这个目录不只是“下载缓存”它还保存着更新卸载所需的源文件。所以现在脚本里对SoftwareDistribution的处理是有条件的——只删除LastWriteTime超过30天的文件更新刚安装完一周内的缓存一律保留。建议如果你不太确定系统更新时间给SoftwareDistribution\Download单独设置一个更长的“过期天数”比如30天。宁可多占一点磁盘也别拿系统稳定性去赌。6.3 踩坑三被占用文件硬删导致报错刷屏还拖慢脚本早期脚本没有Get-FileLocked判断直接遍历删除结果在C:\Windows\Temp里遇到一堆被注册表锁定的文件每次删除都报“访问被拒绝”脚本跑完要输出几百行报错。后来加上文件占用检测遇到锁定的直接跳过整个脚本安静多了。这也是为什么脚本里Remove-ExpiredFiles函数要在删除前先做一次Open测试。6.4 踩坑四把自动清理权限交给任务计划差点翻车有一段时间我把clean模式也设成了每周全自动执行。某次Windows大版本更新后一个软件在后台准备导入数据它的临时文件被脚本误删了导致软件进入初始化状态。虽然不是致命错误但重启软件后要重新配置很烦。从那以后我把全自动改成了“扫描全自动清理半自动”。脚本可以告诉你能释放多少空间但真正删除必须由人确认。这不是技术问题是风险管理问题。6.5 踩坑五回收站清空不等于“永久删除”很多人误以为清空回收站的瞬间数据就彻底没了。实际上如果你用的是机械硬盘或者SSD删除数据后如果不做覆盖专业恢复软件依然能找回大部分文件。所以清理脚本里我故意在清空回收站之前打印出具体释放空间就是提醒大家回收站里可能真的有重要数据清空之前翻一眼总没错。7. 进阶思路把清理方案扩展到多台机器与服务器场景如果你只有一台个人电脑上面那套方案已经完全够用。但如果你跟我一样需要管理多台设备或者是公司运维可以考虑对脚本做三个扩展。7.1 扩展一通过管理共享或计划任务下发到多台机器把脚本复制到内网文件服务器通过组策略或计划任务下发到各业务机每台机器独立运行扫描/清理。只要脚本里的白名单逻辑一致不同机器上的个人数据都能被保护。这是在Windows域环境中最省事的多机部署方式。7.2 扩展二把日志目录纳入清理范围服务器上大量占用其实集中在日志文件。IIS日志、应用程序日志、数据库日志这种可以用同样的“过期天数”策略。唯一要注意的是有些日志有合规保留要求比如保留三个月那你就要在脚本里针对特定路径单独设置保留期限别一刀切。我建议从Config里读保留天数不要写死在脚本里。7.3 扩展三清理前自动生成报告并邮件发送把Get-ScanResult的输出格式化后通过Send-MailMessage或SMTP接口发给运维组。这样每周不用手动登录每台机器的控制台看结果报告直接送到邮箱。这个扩展很简单我把核心代码贴在这里供参考$body $scanResults | ConvertTo-Html -Fragment | Out-String $mailParam { From cleanupyourdomain.com To adminyourdomain.com Subject 临时文件扫描周报 Body $body SmtpServer smtp.yourdomain.com } Send-MailMessage mailParam这个模式非常适合“无人值守人工决策”的运维风格既保留了对数据的控制权又实现了真正的自动化管理。8. 结尾这套方案我用下来最满意的地方最后聊聊使用感受。这套方案我持续跑了将近一年从最初的手动清理到现在的半自动清理最大的变化不是磁盘空间多了几十GB而是“心里有底”了。以前我老觉得自己电脑快满了但又不敢乱删。现在每周收到一份扫描报告清清楚楚地告诉我哪些地方堆了多少临时文件哪些数据被保护了哪些可以清理。到需要腾空间的时候一键执行看释放数字就好。这种“凡事有数”的感觉是手动清理永远给不了的。如果你准备照着做我的建议是先跑扫描模式认认真真看一遍输出第一次清理前最好开着系统还原点清理完如果发现某个软件异常直接从回收站恢复或者重装那份软件基本不会伤筋动骨。等你跑通一个完整的“扫描-确认-清理-观察”周期后再决定要不要把清理的频率调高、把范围扩大。我个人的体会是临时文件清理这事技术含量不高但设计一个好方案需要花心思的地方还真不少。希望这套思路能帮你把磁盘管理从“提心吊胆”变成“心中有数”。如果后续你在这个基础上做了自己的扩展欢迎回来分享你的配置和踩坑记录。