尝试改进Windows全盘备份的排除选项(失败)
之前我使用wbadmin进行全盘备份,之后使用restic备份生成的vhdx产物。
wbadmin start backup -backuptarget:D: -include:C: -quiet
但有一个问题,我无法排除一些不需要的文件夹,例如.venv, node_modules等。这些文件夹内容巨大而且毫无意义。wbadmin虽然提供-exclude参数,但并不支持任意位置的通配符。官方文档写得有点模糊,没提到具体通配符具体支持到了什么程度,是只支持在路径末尾使用通配符来匹配文件还是支持任意位置。所以我让AI给我写了个测试脚本。
restic_scripts on main is 📦 v0.1.0 via 🐍 v3.11.3 took 2s
❯ sudo pwsh .\test_wbadmin_native_glob.ps1 -BackupTarget "D:" -RunBackup
Lab root: C:\Tools\playground\restic_scripts\wbadmin-glob-lab
Candidate exclude patterns to test:
FileNameWildcard: C:\Tools\playground\restic_scripts\wbadmin-glob-lab\logs\*.tmp
DirectoryWildcard: C:\Tools\playground\restic_scripts\wbadmin-glob-lab\profiles\*\cache2
BrowserCacheWildcard: C:\Tools\playground\restic_scripts\wbadmin-glob-lab\chrome\User Data\*\Code Cache
BrowserServiceWorkerWildcard: C:\Tools\playground\restic_scripts\wbadmin-glob-lab\chrome\User Data\*\Service Worker\CacheStorage
JetBrainsWildcard: C:\Tools\playground\restic_scripts\wbadmin-glob-lab\jetbrains\*\caches
VenvSingleLevelWildcard: C:\Tools\playground\restic_scripts\wbadmin-glob-lab\*\.venv
VenvRecursiveWildcard: C:\Tools\playground\restic_scripts\wbadmin-glob-lab\**\.venv
Recommended test order:
1. logs\*.tmp
2. profiles\*\cache2
3. chrome\User Data\*\Code Cache
4. jetbrains\*\caches
5. *\.venv
6. **\.venv
Example preview command:
.\test_wbadmin_native_glob.ps1 -BackupTarget 'D:'
Example execution command:
.\test_wbadmin_native_glob.ps1 -BackupTarget 'D:' -RunBackup
To actually run wbadmin, add -RunBackup and use an admin shell.
BackupTarget must be another volume or a network share accepted by wbadmin.
Lab tree:
chrome\User Data\Default\Code Cache\EXCLUDE__chrome_default_code_cache.bin
chrome\User Data\Profile 1\Bookmarks.json
chrome\User Data\Profile 1\Code Cache\EXCLUDE__chrome_profile1_code_cache.bin
chrome\User Data\Profile 1\Service Worker\CacheStorage\EXCLUDE__chrome_profile1_sw_cache.txt
jetbrains\PyCharm2025.1\caches\EXCLUDE__jetbrains_cache.txt
jetbrains\PyCharm2025.1\config\KEEP__jetbrains_config.xml
logs\EXCLUDE__logs__trace.tmp
logs\KEEP__logs__app.log
logs\nested\KEEP__nested__trace.tmp
profiles\alpha\cache2\EXCLUDE__profiles_alpha_cache2.txt
profiles\alpha\data\KEEP__profiles_alpha_data.txt
profiles\beta\cache2\EXCLUDE__profiles_beta_cache2.txt
projects\service-a\.venv\EXCLUDE__projects_service_a_venv.txt
projects\service-a\packages\worker\.venv\EXCLUDE__projects_worker_venv.txt
projects\service-a\packages\worker\src\KEEP__projects_worker_src.txt
projects\service-a\src\KEEP__projects_service_a_src.txt
README.md
workspace-alpha\.venv\EXCLUDE__workspace_alpha_venv.txt
workspace-alpha\src\KEEP__workspace_alpha_src.txt
Prepared wbadmin commands:
[FileNameWildcard]
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\logs\*.tmp -quiet
[DirectoryWildcard]
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\profiles\*\cache2 -quiet
[BrowserCacheWildcard]
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\chrome\User Data\*\Code Cache -quiet
[BrowserServiceWorkerWildcard]
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\chrome\User Data\*\Service Worker\CacheStorage -quiet
[JetBrainsWildcard]
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\jetbrains\*\caches -quiet
[VenvSingleLevelWildcard]
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\*\.venv -quiet
[VenvRecursiveWildcard]
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\**\.venv -quiet
=== Testing pattern: FileNameWildcard ===
Running command:
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\logs\*.tmp -quiet
wbadmin 1.0 - 备份命令行工具
(C) Microsoft Corporation 版权所有。保留所有权利。
正在检索卷信息...
在此版本的 Windows 上不支持对卷进行部分备份。
=== Testing pattern: DirectoryWildcard ===
Running command:
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\profiles\*\cache2 -quiet
wbadmin 1.0 - 备份命令行工具
(C) Microsoft Corporation 版权所有。保留所有权利。
正在检索卷信息...
错误 - 无法验证文件路径“C:\Tools\playground\restic_scripts\wbadmin-glob-lab\profiles\*\cache2”
文件名、目录名或卷标语法不正确。
=== Testing pattern: BrowserCacheWildcard ===
Running command:
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\chrome\User Data\*\Code Cache -quiet
wbadmin 1.0 - 备份命令行工具
(C) Microsoft Corporation 版权所有。保留所有权利。
正在检索卷信息...
错误 - 无法验证文件路径“C:\Tools\playground\restic_scripts\wbadmin-glob-lab\chrome\User Data\*\Code Cache”
文件名、目录名或卷标语法不正确。
=== Testing pattern: BrowserServiceWorkerWildcard ===
Running command:
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\chrome\User Data\*\Service Worker\CacheStorage -quiet
wbadmin 1.0 - 备份命令行工具
(C) Microsoft Corporation 版权所有。保留所有权利。
正在检索卷信息...
错误 - 无法验证文件路径“C:\Tools\playground\restic_scripts\wbadmin-glob-lab\chrome\User Data\*\Service Worker\CacheStorage”
文件名、目录名或卷标语法不正确。
=== Testing pattern: JetBrainsWildcard ===
Running command:
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\jetbrains\*\caches -quiet
wbadmin 1.0 - 备份命令行工具
(C) Microsoft Corporation 版权所有。保留所有权利。
正在检索卷信息...
错误 - 无法验证文件路径“C:\Tools\playground\restic_scripts\wbadmin-glob-lab\jetbrains\*\caches”
文件名、目录名或卷标语法不正确。
=== Testing pattern: VenvSingleLevelWildcard ===
Running command:
wbadmin start backup -backuptarget:D: -include:C:\Tools\playground\restic_scripts\wbadmin-glob-lab -exclude:C:\Tools\playground\restic_scripts\wbadmin-glob-lab\*\.venv -quiet
wbadmin 1.0 - 备份命令行工具
(C) Microsoft Corporation 版权所有。保留所有权利。
正在检索卷信息...
错误 - 无法验证文件路径“C:\Tools\playground\restic_scripts\wbadmin-glob-lab\*\.venv”
可见,wbadmin只支持exclude在路径末尾用于匹配文件的通配符,而不支持匹配目录的通配符,也不支持在路径中间使用通配符。也就是说,我只能排除特定路径下特定文件类型的文件,无法排除任意位置的特定文件夹,这对于我的使用场景来说是远远不够的。
因此如果我需要实现我想要的排除功能就需要自己扫盘然后手动展开通配符之后拼接构建参数传给wbadmin。但是扫全盘毫无疑问是非常慢的。想到可以使用everything来做文件索引和搜索,配合它的命令行工具es.exe来快速获取需要排除的文件夹路径列表,然后再传给wbadmin。
让gpt帮我写完之后,补了一些测试确认exclusion展开没问题。
最后准备用的时候反转了
❯ sudo wbadmin start backup -backuptarget:D: -include:C: -exclude:C:\Tools
wbadmin 1.0 - 备份命令行工具
(C) Microsoft Corporation 版权所有。保留所有权利。
正在检索卷信息...
在此版本的 Windows 上不支持对卷进行部分备份。
该试一下的()。合理推测是消费级windows压根不支持排除。但我还是决定把尝试过程留存一下,说不定还有别人/ai也会遇到一样的问题呢()
另外需要提示如果使用了allCritical选项的话,wbadmin会忽略exclude参数直接备份所有文件,这也是我之前没测出exclude在我这用不了的原因之一。
Last modified on 2026-03-08