Windows 命令详解(四):磁盘与系统维护命令速查表

2026-08-06 Windows

这一篇讲盘上的事:怎么看清楚这块盘是什么格式、剩多少空间,怎么查错修错,怎么整理碎片,怎么格式化转换,怎么加密,怎么备份,以及引导坏了怎么修。

先说边界,免得和站内已有的三篇撞车:

命令 已有专文
sfc(系统文件检查) Windows SFC 命令完全指南
dism(映像与组件维护) Windows DISM 命令完全指南
diskpart(分区管理) Windows 磁盘管理命令完全指南

这三条本文不再复述,用到分区创建、选择、删除这类操作时直接看上面那篇。本文覆盖的是它们之外、日常维护真正会用的那批命令,语法与参数照旧取自微软官方 Windows Commands 参考,出处列在文末。

一、先看清这块盘的现状

命令 作用 基本写法 示例
vol 显示磁盘的卷标和序列号 vol [<drive>:] vol D:
label 创建、修改或删除卷标 label [/mp] [<volume>] [<label>] label D:Data
mountvol 创建、删除或列出卷装入点(挂载点) mountvol [<drive>:]<path> <volumename> mountvol Z: /l
fsutil fsinfo 列出所有盘、查询驱动器类型、卷信息、NTFS 专属信息、文件系统统计 fsutil fsinfo [drives | drivetype <volumepath> | volumeinfo <rootpath> | ntfsinfo <rootpath> | statistics <volumepath>] fsutil fsinfo ntfsinfo C:
fsutil volume 查询剩余空间、列出卷、查某个簇属于哪个文件、卸载卷 fsutil volume [diskfree | list | querycluster | filelayout | dismount | allocationreport] <volumepath> fsutil volume diskfree C:
chkntfs 显示或修改开机时的自动磁盘检查设置 chkntfs <volume> [...] chkntfs C:

fsutil fsinfo 的几个子命令各有各的用途,别混:

子命令 给出什么
fsutil fsinfo drives 列出本机所有盘符
fsutil fsinfo drivetype <卷> 该卷的类型(固定磁盘、可移动、网络等)
fsutil fsinfo volumeinfo <根路径> 卷信息:卷标、序列号、文件系统、是否支持区分大小写等
fsutil fsinfo ntfsinfo <根路径> NTFS 专属信息:簇大小、MFT 相关参数等
fsutil fsinfo statistics <卷> 该卷的文件系统统计

算剩余空间时,fsutil volume diskfree C: 比 dir 更直接——它问的是文件系统本身还有多少可用簇,不会把「根目录下的文件」也算进来。

chkntfs C: 单独敲会告诉你这个卷是什么文件系统、有没有安排开机自检;chkntfs /t 看自动检查的倒计时秒数、chkntfs /t:30 改成 30 秒、chkntfs /x D: 把某个卷排除在开机自检之外、chkntfs /d 恢复默认设置。

二、查错与修错

命令 作用 基本写法 示例
chkdsk 检查卷的文件系统和文件系统元数据是否有逻辑与物理错误 chkdsk [<volume>[[<path>]<filename>]] [/f] [/r] [/x] [/scan] [/spotfix] chkdsk D: /f
fsutil dirty query 查卷的脏位是否置位 fsutil dirty query <volumepath> fsutil dirty query C:
fsutil dirty set 置位卷的脏位 fsutil dirty set <volumepath> fsutil dirty set C:
fsutil repair query 查询卷的自愈状态 fsutil repair query <volumepath> fsutil repair query C:
fsutil repair initiate 对指定文件发起校验 fsutil repair initiate <volumepath> <filereference> fsutil repair initiate C: 0x5
fsutil repair wait 等待修复完成 fsutil repair wait <volumepath> fsutil repair wait C:
fsutil repair enumerate 列出修复事件 fsutil repair enumerate <volumepath> fsutil repair enumerate C:

chkdsk 的参数里,不带参数只检查并报告状态、不做任何修复,这一点官方页面写在第一段里。要它动手就得明确加开关:

参数 作用
/f 修复磁盘上的错误。磁盘必须能被锁定;锁不上会提示你安排在下一次启动时检查
/v 检查过程中显示每个目录里的每个文件名
/r 定位坏扇区并恢复可读信息,磁盘同样必须被锁定;/r 已包含 /f 的功能
/x 必要时先强制卸载卷,所有打开的句柄失效;/x 也包含 /f 的功能
/i 仅 NTFS:对索引项做不那么严格的检查,跑得更快
/c 仅 NTFS:不检查文件夹结构里的循环,跑得更快
/l[:<size>] 仅 NTFS:改日志文件大小;不带 size 时显示当前大小
/b 仅 NTFS:清除坏簇列表并重新扫描所有簇
/scan 仅 NTFS:对卷做在线扫描
/forceofflinefix 仅 NTFS,须与 /scan 同用:跳过在线修复,把所有缺陷排入离线修复队列
/perf 仅 NTFS,须与 /scan 同用:用更多系统资源把扫描尽快跑完
/spotfix 仅 NTFS:对卷做在线「点修复」
/sdcleanup 仅 NTFS:回收不需要的安全描述符数据(隐含 /f)
/offlinescanandfix 对卷做离线扫描并修复
/freeorphanedchains 仅 FAT/FAT32/exFAT:释放孤立簇链而不是恢复其内容
/markclean 仅 FAT/FAT32/exFAT:未发现损坏时把卷标记为干净,即使没写 /f

chkdsk 的返回码是脚本判断的依据,官方给的是这四档:

返回码 含义
0 没有发现错误
1 发现错误并已修复
2 执行了磁盘清理(如回收垃圾),或者因为没写 /f 而没有清理
3 无法检查磁盘、错误无法修复,或者因为没写 /f 而没修

两个经验上的提醒:/r 会逐扇区读整块盘,机械盘上大容量分区跑几个小时很正常,中间不要断电、不要强行中止;/r、/f 这类要独占卷的检查尽量放在重启后从恢复环境里做——系统盘正在使用中,很多时候根本锁不上,结果就是你排了队、重启时才见到它跑。

fsutil dirty query C: 返回「脏」说明这个卷被标记过需要检查;脏位置位后,下次开机 autochk 会自动检查这个卷(这是官方对该命令的说明)。想确认「我说的这次自动检查到底会不会发生」,用 chkntfs 系列看安排情况。

fsutil repair 对应的是 NTFS 的自愈机制:它试图在系统运行时在线修正文件系统损坏,从而不一定要动用 chkdsk。repair query 看自愈是否开启、repair initiate 对指定文件发起校验、repair wait 等它修完、repair enumerate 列出发生过哪些修复事件。

三、碎片整理与优化

命令 作用 基本写法 示例
defrag 定位并合并本地卷上的碎片文件以改善性能 defrag <volumes> | /c | /e <volumes> [/h] [/m [n] | [/u] [/v]] defrag C: /u /v
defrag /a 只做分析,不动数据 defrag C: /a /u defrag C: D: /a
defrag /o 按介质类型选择最合适的优化方式 defrag /c /o defrag C: /o /u

defrag 的完整参数(官方表):

参数 作用
<volume> 指定要整理或分析的卷(盘符或装入点路径)
/a 对指定卷做分析
/b 做启动优化以提升启动性能
/c 对所有卷执行操作
/d 传统碎片整理(默认方式);在分层卷上只作用于容量层
/e 对除指定卷之外的所有卷执行操作
/g 优化指定卷上的存储分层
/h 以普通优先级运行(默认是低优先级)
/i [n] 每卷的分层优化最多运行 n 秒
/k 对指定卷做 slab 合并
/l 对指定卷做 retrim
/m [n] 在后台并行处理每个卷,最多用 n 个线程
/o 按每种介质类型做合适的优化
/t 跟踪指定卷上正在进行的操作
/u 在屏幕上打印进度
/v 打印包含碎片统计的详细信息
/x 对指定卷做空闲空间合并

为什么更推荐 /o 而不是硬记「整理碎片」这四个字:/o 是按介质类型自己选合适的动作。SSD 上正确的动作是 retrim(通知闪存块哪些数据已作废)而不是反复搬动数据,机械盘上才是真正的碎片整理。Windows 自带的优化驱动器界面做的就是这件事,defrag /o 是它的命令行对应物。

defrag C: /a /u 是「先分析、看数字、再决定要不要真整理」的稳妥顺序;/m 会并行处理多个卷,在机械盘上并行反而会拖慢,SSD 上没这个问题。

四、格式化、转换与空间清理

命令 作用 基本写法 示例
format 把卷格式化成 Windows 可用的文件系统 format volume [/FS:<file-system>] [/V:<label>] [/Q] [/A:<size>] [/P:<passes>] format D: /FS:NTFS /Q /V:Data
convert 在磁盘类型之间转换(基本/动态、GPT/MBR) convert basic | dynamic | gpt | mbr convert gpt
cipher 在 NTFS 卷上查看或改变文件/目录的加密状态 cipher [/e | /d | /c] [/s:<directory>] [pathname [...]] cipher /e D:\private
cipher /w:<目录> 清除整个卷上空闲空间里残留的数据 cipher /w:<directory> cipher /w:D:\
cleanmgr 磁盘清理工具的命令行用法 cleanmgr [/d <driveletter>] [/sageset:n] [/sagerun:n] [/tuneup:n] [/lowdisk] [/verylowdisk] cleanmgr /sagerun:1
diskperf 启用或禁用物理/逻辑磁盘性能计数器 diskperf [-y[d|v] | -n[d|v]] [\computername] diskperf -yv

format 的常用参数和几个容易忽略的点:

参数 作用
/FS:<filesystem> 指定文件系统:FAT、FAT32、NTFS、exFAT、ReFS 或 UDF
/V:<label> 指定卷标
/Q 快速格式化:只删除文件表和根目录,不逐扇区扫描
/A:<size> 指定分配单元(簇)大小
/P:<count> 把卷上每个扇区清零,然后用不同的随机数覆写 count 次
/C 仅 NTFS:新建的文件默认压缩
/X 必要时强制卸载卷再格式化,打开的句柄全部失效
/S:<state> 是否支持短文件名(enable/disable),默认禁用
/TXF:<state> 是否启用 TxF,默认启用
/I:<state> 仅 ReFS:新卷是否启用完整性
/DAX:<state> 仅 NTFS:为该卷启用直接访问存储(DAX)模式
/LogSize:<size> 仅 NTFS:指定 NTFS 日志文件大小(KB),最小 2MB
/NoTrim 格式化期间不发送 trim(删除通知)
/DevDrv 仅 ReFS:把卷格式化为开发驱动器

官方页面第一句就说清楚了:格式化硬盘必须是 Administrators 组成员;命令会先弹出一句「不可移动磁盘上的所有数据都将丢失」让你确认,这是它唯一的刹车。/Q 快是因为它不扫坏道,代价是坏道不会被发现;要彻底擦除数据(比如把盘转让出去)用 /P,它按次数覆写全盘扇区。/X 会在有程序正占用这个卷时强制卸载,U 盘「正在使用中」格不掉时它能顶上,但记得那意味着占用它的程序会出错。

convert 管的是磁盘类型转换:basic 把空动态盘转成基本盘、dynamic 把基本盘转成动态盘、gpt 把空的基本 MBR 盘转成 GPT、mbr 反向转换(四个子命令各自有官方页面,见出处)。做这类转换之前,先在磁盘管理里确认这块盘上有没有需要保留的数据——基本盘与动态盘的互转不是随手可逆的日常操作,本文不展开,需要时按对应子命令的官方页面逐条核对参数。

cipher /w:<目录> 是「清掉空闲空间里的残留数据」,官方说明是:移除整个卷上空闲空间里的数据;写这个参数时其它参数会被忽略,指定的目录只要指向该卷上的任意位置即可(如果是装入点或指向别的卷的目录,被清的就是那个卷)。卖旧盘之前用它清一遍空闲空间,比手动删文件有意义得多。

cleanmgr /sageset:n 会弹出磁盘清理的设置界面让你勾选要清的项,并把这份选择存在注册表的编号 n 下;之后 cleanmgr /sagerun:n 就按这个编号静默执行。这套配合计划任务能做成自动清理(n 可以取 0 到 9999)。/lowdisk 用默认设置跑、/verylowdisk 用默认设置且不弹任何提示。

diskperf 解决的是「性能监视器里看不到磁盘计数器」:diskperf -y 启用全部磁盘性能计数器、-yd 只启用物理磁盘、-yv 只启用逻辑磁盘、-n 禁用(后面可加 d/v 细分),尾端还可以跟 \计算机名 对远程机器操作。

五、文件级与全盘加密

命令 作用 基本写法 示例
cipher /e 加密指定文件或目录(目录被标记后,之后放进去的文件会自动加密) cipher /e <路径> cipher /e D:\private
cipher /d 解密指定文件或目录 cipher /d <路径> cipher /d D:\private
cipher /s:<目录> 对指定目录下所有子目录执行同一操作 cipher /s:D:\data /e cipher /s:D:\data /e
cipher /k 为 EFS 生成新证书和密钥(写这个参数时其它参数被忽略) cipher /k cipher /k
cipher /r:<文件名> 生成 EFS 恢复代理密钥与证书,写出 .pfx 与 .cer cipher /r:D:\backup\efsrec cipher /r:D:\backup\efsrec
cipher /x[:efsfile] [<文件名>] 把 EFS 证书和密钥备份到指定文件 cipher /x D:\backup\efs cipher /x D:\backup\efs
cipher /u [/n] 查找本地盘上所有加密文件;带 /n 时只查不改 cipher /u /n cipher /u /n
cipher /h 连同隐藏/系统属性的文件一起处理 cipher /h /s:D:\data cipher /h /s:D:\data
manage-bde -status 报告所有盘的 BitLocker 保护状态 manage-bde -status [<drive>] manage-bde -status C:
manage-bde -on / -off 打开 / 关闭 BitLocker manage-bde -on <drive> [-recoverypassword] [-recoverykey] manage-bde -on D: -recoverypassword
manage-bde -protectors 管理密钥保护器(查看、添加、删除、启用、禁用) manage-bde -protectors {-get | -add | -delete} <drive> manage-bde -protectors -get C:
manage-bde -tpm 配置 TPM manage-bde -tpm [-turnon] [-takeownership <ownerpassword>] manage-bde -tpm -turnon

cipher 与 BitLocker(manage-bde)是两个层面的东西:cipher 是 EFS 文件级加密,针对具体文件/目录,密钥跟着用户账户和证书走;manage-bde 是整盘加密,保护的是「盘被拔下来挂到别的机器上」这种场景。

用 EFS 之前必须先备份证书和密钥:cipher /x 把当前用户的 EFS 证书与密钥导到文件,或者用 cipher /r: 生成恢复代理密钥。重装系统前不导出 EFS 密钥,加密文件就是打不开的——这不是危言耸听,是 EFS 的设计使然。

manage-bde 的完整子命令(官方页面的语法行):-status、-on、-off、-pause、-resume、-lock、-unlock、-autounlock、-protectors、-tpm、-setidentifier、-forcerecovery、-changepassword、-changepin、-changekey、-keypackage、-upgrade、-wipefreespace。其中两个要特别小心:-forcerecovery 会把盘上所有与 TPM 相关的密钥保护器删掉,下次重启时只能用恢复密码或恢复密钥解锁——换主板、换 TPM 之前才该用,敲之前一定确认手上有恢复密钥;-wipefreespace 的官方说明是「擦除盘上的空闲空间」,用途和 cipher /w 重叠,区别在于前者面向 BitLocker 加密盘。

六、快照与备份

命令 作用 基本写法 示例
vssadmin list shadows 列出指定卷现有的卷影副本 vssadmin list shadows [/for=<ForVolumeSpec>] [/shadow=<ShadowID>] vssadmin list shadows /for=C:
vssadmin list writers 列出所有已订阅的卷影复制写入器 vssadmin list writers vssadmin list writers
vssadmin list providers 列出已注册的卷影复制提供程序 vssadmin list providers vssadmin list providers
vssadmin list shadowstorage 列出卷影副本存储关联 vssadmin list shadowstorage vssadmin list shadowstorage
vssadmin list volumes 列出可用于卷影副本的卷 vssadmin list volumes vssadmin list volumes
vssadmin delete shadows 删除卷影副本 vssadmin delete shadows /for=<ForVolumeSpec> [/all] vssadmin delete shadows /for=C: /all
vssadmin resize shadowstorage 调整卷影副本存储区上限 vssadmin resize shadowstorage /for=<卷> /on=<卷> [/maxsize=<大小>] vssadmin resize shadowstorage /for=C: /on=D: /maxsize=900MB
wbadmin get versions 列出可用的备份及其版本信息 wbadmin get versions [-backupTarget:{<位置>}] wbadmin get versions -backupTarget:H:
wbadmin start backup 按参数创建一次备份 wbadmin start backup -backupTarget:<目标> -include:<卷或文件夹> wbadmin start backup -backupTarget:H: -include:C: -systemstate
wbadmin enable backup 创建或修改每日备份计划 wbadmin enable backup [-addtarget:<目标>] [-schedule:<时间>] [-include:<卷>] wbadmin enable backup -addtarget:H: -schedule:03:00 -include:C:
wbadmin get status 报告正在运行的备份/恢复操作的状态 wbadmin get status wbadmin get status
diskshadow -s <脚本> 用脚本驱动 VSS(创建、暴露、删除快照) diskshadow -s script.txt diskshadow -s D:\scripts\snap.txt

vssadmin list writers 是排查备份类问题的第一步:第三方备份软件报「快照失败」时,跑它看各个写入器是不是都处于正常状态(有问题的会显示成 State: [x] Failed 之类)。vssadmin list shadows /for=C: 则用来确认「这个卷上到底有没有快照、快照是什么时候建的」。

vssadmin delete shadows /for=C: /all 会删掉该卷上的所有卷影副本,而系统还原点正是存在卷影副本里的——空间告急时用它快速回收空间,代价就是还原点也一起没了,动手前想清楚。

wbadmin 是 Windows Server Backup 的命令行前端,几个子命令的分工:get versions 列出可用备份(从哪个目标、哪台机器)、start backup 立即做一次备份、enable backup 建/改每日计划、get status 看正在跑的任务、get disks 列出可作为备份目标的磁盘。备份目标写盘符或网络共享路径,-include: 后面写要备份的卷或用逗号分隔的文件夹,带 -systemstate 表示把系统状态一起备份。

diskshadow 面的是「脚本化快照」这个需求:官方示例脚本里依次是 set context persistent nowriters、set metadata <路径>、begin backup、add volume c: alias ...、create、expose %别名% p:、exec ...,也就是把 VSS 的整条流程写成文件让它跑。需要把快照挂成盘符、再让别的程序去读快照内容(比如做一致性备份或杀毒扫描)时用它。

七、引导配置

命令 作用 基本写法 示例
bcdedit 查看和修改启动配置数据(BCD)存储 bcdedit /command [<argument1>] [<argument2>] ... bcdedit /enum all
bcdedit /enum 列出存储里的条目(不带参数运行 bcdedit 等价于 /enum active) bcdedit /enum [{ID}] [/v] bcdedit /enum active
bcdedit /set 设置某个条目选项的值 bcdedit /set <ID> <选项> <值> bcdedit /set {default} description "Windows 11"
bcdedit /deletevalue 删除条目的某个元素 bcdedit /deletevalue <ID> <选项> bcdedit /deletevalue {default} safeboot
bcdedit /copy 在同一个存储里复制一条启动条目 bcdedit /copy <ID> /d <描述> bcdedit /copy {current} /d "Windows 11 安全模式"
bcdedit /create 新建一条启动条目 bcdedit /create /application <类型> /d <描述> bcdedit /create /application osloader /d "自定义启动项"
bcdedit /delete 删除一条启动条目 bcdedit /delete <ID> [/f] bcdedit /delete {标识} /f
bcdedit /export / /import 导出/恢复系统存储(导入会先清掉现有条目) bcdedit /export <文件> bcdedit /export D:\bcdbak
bcdedit /default / /timeout / /displayorder 设默认启动项 / 启动菜单等待秒数 / 显示顺序 bcdedit /timeout 10 bcdedit /timeout 10
bcdboot 快速建立系统分区或修复系统分区上的启动环境 bcdboot <source> [/l] [/s] bcdboot C:\Windows /l zh-cn

bcdedit 官方页面第一段就点明:修改 BCD 需要管理员权限。它的用途是创建新存储、修改已有存储、增删启动项与启动参数,等于取代了旧系统的 Bootcfg.exe。

改引导配置之前,bcdedit /export <文件> 先导出一份是必须的习惯——/import 会先清空现有条目再导入,所以那份导出文件就是你的回退方案。bcdedit /v 会把所有标识符按完整形式显示(默认会用友好简写),排查「菜单里多出来的那个启动项到底是谁」时用它。

bcdboot 干的是另一件事:把一组启动环境文件复制到系统分区、快速建好或修好启动环境。<source> 指向 Windows 目录(如 C:\Windows),/l 指定区域设置,/s 指定系统分区的卷标。典型场景是「系统分区被格式化过、启动文件丢了,但 Windows 目录还在」——用 PE 启动后 bcdboot C:\Windows /s S: /l zh-cn 把启动环境重建回那个分区。

至于启动菜单里那条「修复计算机」的恢复环境、以及 bootrec 这类工具,属于另一个文档范畴(bootrec 不在 Windows Commands 这套参考里),需要时用 bcdedit /enum all 先看清现状再动手。

八、一条命令抓一份磁盘体检

下面两个脚本都是只读或只分析的:chkdsk 不带参数只报告、defrag /a 只分析、manage-bde -status、vssadmin list 都只看不改。跑完在桌面生成一份 txt。

PowerShell 版(存成 win-cmd-check-4.ps1):

# Windows 命令详解(四)自检脚本:只读/只分析,不做任何修复与格式化
$log = Join-Path ([Environment]::GetFolderPath('Desktop')) 'win-cmd-check-4.txt'

Set-Content -Path $log -Value 'Windows 磁盘体检(四):只读与只分析'
Add-Content -Path $log -Value ('生成时间:' + (Get-Date).ToString('yyyy-MM-dd HH:mm:ss'))

function Run([string]$title, [string]$cmd) {
    Add-Content -Path $log -Value ''
    Add-Content -Path $log -Value ('===== ' + $title + ' =====')
    cmd /c $cmd 2>&1 | Add-Content -Path $log
}

Run '盘符一览'          'fsutil fsinfo drives'
Run '各盘类型'          'fsutil fsinfo drivetype C:'
Run '各盘卷信息'        'fsutil fsinfo volumeinfo C:'
Run 'NTFS 卷信息'       'fsutil fsinfo ntfsinfo C:'
Run '卷剩余空间'        'fsutil volume diskfree C:'
Run '卷标与序列号'      'vol C:'
Run '开机自检安排'      'chkntfs C:'
Run '脏位状态'          'fsutil dirty query C:'
Run '自愈状态'          'fsutil repair query C:'
Run '文件系统检查(只报告)' 'chkdsk C:'
Run '碎片分析(只分析)' 'defrag C: /a /u'
Run 'BitLocker 状态'    'manage-bde -status'
Run '卷影副本'          'vssadmin list shadows /for=C:'
Run '卷影写入器'        'vssadmin list writers'
Run '备份历史'          'wbadmin get versions'

Write-Host ('报告已写入:' + $log)

批处理版(存成 win-cmd-check-4.bat):

几点说明:chkdsk C: 在系统盘上只能报告状态,想真修要重启后排队,这是设计如此;defrag /a 在大容量机械盘上也要跑一会儿;manage-bde -status、vssadmin 系列要管理员权限的命令行才能看全,普通窗口下会报权限不足——这不是脚本写错了。脚本里的盘符都写的 C:,要体检别的盘改成对应盘符即可。

九、这个系列的其它几篇

十、出处

下列页面均属于微软官方 Windows Commands 参考(https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/):

chkdsk、chkntfs、fsutil 及其子页 fsutil-volume、fsutil-fsinfo、fsutil-dirty、fsutil-repair、fsutil-8dot3name、fsutil-behavior、defrag、format、convert、cipher、cleanmgr、diskperf、mountvol、vol、label、recover、vssadmin 及其子命令页、wbadmin 及其子命令页、diskshadow、bcdedit、bcdboot、manage-bde 及其子命令页。

几条重点页面的完整地址: