做企业 IT 运维八年,Bandizip 是我服务器上常驻的工具,帮我扛过一次磁盘告警危机
我是一家制造业公司的 IT 运维,管着公司三十多台服务器、两百多台终端电脑,干这行八年了。运维这活,说好听点是系统管理员,说实在点就是 "救火队员"—— 磁盘满了要清、系统崩了要恢复、软件要批量装、用户电脑出问题要远程支持。每天处理的事情又杂又碎,但有一样东西我每台服务器上都装,就是 Bandizip。
一、服务器日志归档:磁盘告警是运维的噩梦,压缩是救命稻草
运维最头疼的事情之一,就是磁盘空间告警。尤其是 Windows Server 上的日志 ——IIS 日志、应用程序日志、安全日志、系统日志,还有各种业务系统自己产生的日志,一天几个 GB 地涨,不处理的话一两个月磁盘就满了。磁盘一满,业务系统就可能崩溃,那就是生产事故。
我管的一台文件服务器,之前就出过一次事。那台服务器跑着公司的共享文件夹和一个老业务系统,业务系统的日志每天涨 3 个 GB,我之前设了自动清理但脚本出了问题没跑,结果某天凌晨磁盘满了,共享文件夹写不进去,早上全公司的人都打不开文件,被领导骂了个狗血淋头。
从那以后我就把日志归档当成了头等大事,用 Bandizip 的命令行工具 bz.exe 写了个自动化脚本,每天凌晨 2 点自动跑:把超过 7 天的日志压缩成 7z 格式,按日期命名,存到专门的归档目录,压缩完删除原文件,超过 90 天的归档包自动删除。脚本很简单,就几行:
plaintext
@echo off
set DATE=%date:~0,4%%date:~5,2%%date:~8,2%
"C:\Program Files\Bandizip\bz.exe" c -fmt:7z -l:9 "D:\LogArchive\logs_%DATE%.7z" "D:\Logs\*.log"
del /q "D:\Logs\*.log"
然后在 Windows 任务计划程序里设成每天凌晨 2 点执行,就完事了。
Bandizip 在这个场景下的优势很明显:
第一,压缩率高。 日志文件是纯文本,压缩率特别高,一般能压到原大小的 5%-10%。3 个 GB 的日志压完也就两三百 MB,磁盘空间一下子就省出来了。我用 7z 格式最高压缩率,比 zip 格式再小 20% 左右。
第三,命令行稳定。 bz.exe 的命令行参数很全,格式(-fmt)、压缩级别(-l)、密码(-p)、分卷(-v)、排除文件(-ex)、目标目录(-o)都能设,写脚本很方便。而且 bz.exe 是绿色的,不依赖运行库,服务器上装了 Bandizip 就能直接调用,不会出现缺 DLL 的情况。
第四,批量测试压缩包完整性。 归档的日志压完之后,我会用 bt 命令批量测试压缩包完整性,确保压缩包没坏。bt 是 Bandizip 的批量测试命令,一行命令就能测整个目录下所有压缩包,有问题的会报错,我再重新压。日志归档如果压坏了,等需要查的时候打不开,那归档就没意义了,所以测试这步不能省。
现在我管的三十多台服务器,每台都跑着类似的日志归档脚本,磁盘再也没因为日志满过。那个出过事的文件服务器,现在日志目录常年保持在 10GB 以内,归档目录也才几十个 GB,安心得很。
二、系统备份和镜像:Windows Server 备份后的压缩和归档
运维的第二大头疼事是系统备份。Windows Server 有自带的 Windows Server Backup,能做系统状态备份和裸机恢复,但备份出来的文件很大,一台服务器的系统备份动辄几十 GB,不压缩的话备份磁盘很快就满了。
我现在的备份策略是:每周日用 Windows Server Backup 做一次完整的系统备份,备份到专门的备份磁盘,然后用 Bandizip 把备份文件压缩成 7z 格式,分卷(每卷 4GB),加密,存到异地备份服务器。压缩完删除原始备份文件,只保留压缩包。这样做的好处是:
第一,节省备份空间。 Windows Server Backup 的备份文件是 VHDX 格式,压缩率不高,但用 7z 最高压缩率再压一遍,一般能压到原大小的 40%-60%,一台 50GB 的系统备份压完 20-30GB,备份磁盘能多存一倍的备份点。
第二,分卷方便传输。 4GB 一卷的分卷,不管是拷到移动硬盘还是传到异地备份服务器,都很方便。传输过程中某一卷坏了,只需要重传那一卷,不用整个几十 GB 的文件重传。
第三,加密保护备份安全。 系统备份里包含了服务器的所有数据 —— 用户信息、配置文件、业务数据,这些都是敏感信息。Bandizip 的 AES-256 加密能保护备份文件不被未授权访问,就算备份磁盘丢了或者被偷了,没有密码也打不开。
第四,压缩包注释记录备份信息。 我在每个备份压缩包的注释里写清楚:服务器名、备份日期、操作系统版本、IP 地址、备份内容、恢复步骤。以后需要恢复的时候,不用解压就能看到备份的基本信息,快速判断是不是我要找的备份。Bandizip 的注释功能(-cmt 参数)在命令行里就能设,写脚本的时候自动把备份信息写进去,很方便。
三、软件批量部署:自解压 SFX 包是运维的神器
运维的日常工作之一,就是给公司的电脑装软件。新员工入职要装 Office、企业微信、VPN 客户端、内部系统客户端;软件升级要给所有电脑更新版本;出了安全漏洞要给所有终端打补丁。如果一台一台手动装,两百多台电脑得装到猴年马月。
大公司有 SCCM、Intune 这些专业的终端管理平台,能批量推送软件。但我们公司不大,预算有限,没买这些平台,我用的是 "域控 + 组策略 + 脚本" 的土办法,其中 Bandizip 的自解压 SFX 功能是关键一环。
很多软件的安装包是 EXE 格式,但 EXE 不能直接通过组策略(GPO)推送 ——GPO 只支持 MSI 格式的安装包。有些软件提供 MSI 版本,但很多软件只有 EXE。这时候我就用 Bandizip 把软件的安装文件和安装脚本打包成一个自解压 SFX 包,然后通过组策略的 "启动脚本" 或者 "登录脚本" 推送到终端电脑上,终端开机或者用户登录的时候自动运行 SFX 包,SFX 包解压后自动执行安装脚本,完成静默安装。
具体做法是这样的:
- 把软件的安装文件(比如 setup.exe)和一个静默安装脚本(install.bat,里面写
setup.exe /silent /norestart)放在同一个文件夹里; - 用 Bandizip 的命令行把这个文件夹打包成 EXE 自解压包:
plaintext
bz.exe c -sfx:"C:\Program Files\Bandizip\bdzsfx.x86.sfx" -y "D:\Deploy\SoftwareInstall.exe" "D:\Deploy\Source\*" - 在 SFX 的配置里设置解压后自动运行 install.bat,解压到临时目录,安装完自动删除临时文件;
- 把生成的 SoftwareInstall.exe 放到域控的共享文件夹里,在组策略里设成计算机启动脚本,所有加域的电脑开机时就会自动运行这个 SFX 包,静默安装软件。
Bandizip 的 SFX 功能在这个场景下有几个优势:
第一,SFX 包不需要终端装解压软件。 自解压包本身就是 EXE,双击就能运行,终端电脑上有没有 Bandizip 都无所谓。这对批量部署来说太重要了 —— 你不可能保证所有终端都装了某个压缩软件,但 EXE 是 Windows 原生支持的,所有电脑都能跑。
第二,SFX 配置灵活。 Bandizip 的 SFX 支持设置解压路径、解压后运行程序、窗口标题、解压完成提示、自动删除临时文件、密码保护等,基本上能满足各种部署需求。比如我做软件升级包的时候,会设成解压后自动运行升级脚本,升级完自动删除旧版本文件,全程用户无感知。
第三,压缩率高,包体积小。 软件安装文件很多是重复的,用 7z 格式压缩后体积能小很多,通过网络推送到终端的时候更快,对局域网带宽的压力更小。比如一个 200MB 的软件安装包,压完可能只有 80MB,两百台电脑同时推送也不会把局域网占满。
第四,支持命令行批量生成。 我有十几个软件要部署,每个都要做 SFX 包,手动做太麻烦。我写了个批处理脚本,循环调用 bz.exe,批量生成所有软件的 SFX 包,一次运行全部搞定,不用一个个手动操作。
用这个办法,我给公司两百多台电脑部署软件,基本上是 "一次配置,自动执行"。新员工入职,电脑一加域,开机自动装所有需要的软件,十几分钟就能用了;软件升级,我在域控上更新一下 SFX 包,所有电脑下次开机自动升级,不用一台一台跑。省下来的时间,我就能去处理更重要的事情。
四、终端用户支持:远程协助时的日志收集和文件传输
运维还有一块日常工作是终端用户支持 —— 员工电脑出问题了,要远程协助排查。排查问题最常用的手段就是看日志:Windows 事件查看器、应用程序日志、系统日志、蓝屏 dump 文件。但这些日志分散在电脑的各个角落,让用户自己找基本不可能,用户也不懂。
我现在的做法是:写一个日志收集脚本,用 Bandizip 打包成 SFX 自解压包,用户遇到问题的时候,我把 SFX 包发给他,他双击运行,脚本自动收集所有需要的日志(事件日志、应用日志、系统信息、网络配置、蓝屏 dump 等),打包成一个压缩包,放到桌面上,然后用户把压缩包发给我,我分析日志找问题。
这个 SFX 包的脚本大概是这样的:
plaintext
@echo off
mkdir C:\Temp\LogCollect
wevtutil epl System C:\Temp\LogCollect\System.evtx
wevtutil epl Application C:\Temp\LogCollect\Application.evtx
wevtutil epl Security C:\Temp\LogCollect\Security.evtx
systeminfo > C:\Temp\LogCollect\systeminfo.txt
ipconfig /all > C:\Temp\LogCollect\ipconfig.txt
copy C:\Windows\Minidump\* C:\Temp\LogCollect\
"C:\Program Files\Bandizip\bz.exe" c -fmt:zip -y "%USERPROFILE%\Desktop\Logs_%COMPUTERNAME%.zip" "C:\Temp\LogCollect\*"
rmdir /s /q C:\Temp\LogCollect
然后用 Bandizip 把这个脚本和 bz.exe 一起打包成 SFX 自解压包,用户双击就能运行,全程不用他操作任何东西,最后桌面上会出现一个以他电脑名命名的日志压缩包,发给我就行。
Bandizip 在这个场景下的优势:
第一,SFX 包用户操作简单。 用户不需要懂任何技术,双击运行就行,最后把生成的压缩包发过来。如果让用户自己去事件查看器里导出日志,十个用户有九个不会,还有一个会导错。
第二,压缩包体积小,传输方便。 日志文件特别是 evtx 格式的事件日志,压缩率很高,几个 GB 的日志压完可能只有几十 MB,用户通过微信或者邮件就能发过来。如果不压缩,几个 GB 的文件用户根本传不了。
第三,支持多种格式,兼容性好。 我收集日志的时候用 zip 格式,因为 zip 是 Windows 原生支持的,用户收到压缩包不用装额外软件就能打开(虽然他不需要打开,但万一需要呢)。分析的时候我用 Bandizip 打开,zip、7z、rar 都能解,不用换工具。
第四,命令行能嵌入脚本,自动化程度高。 日志收集脚本里直接调用 bz.exe 压缩,收集完自动打包,不用用户手动压缩。整个流程全自动,用户只需要双击一次。
这个日志收集 SFX 包我用了三年多,处理了几百次终端问题,效率提升太多了。以前处理一个终端问题,光让用户找日志、发日志就得折腾半小时,现在用户双击运行,五分钟就能把日志发过来,我直接分析就行。
五、数据库备份压缩:SQL Server 和 MySQL 的备份文件处理
公司有几台数据库服务器,跑着 SQL Server 和 MySQL,每天都要做数据库备份。数据库备份文件很大 —— 业务库的备份动辄几十 GB,不压缩的话备份磁盘很快就满了,而且传输到异地备份也很慢。
SQL Server 的备份有个选项叫 "压缩备份",在备份的时候就能压缩,压缩率大概是原大小的 30%-50%。但 SQL Server 的压缩备份有个问题:压缩备份的文件是 SQL Server 专有格式,只能用 SQL Server 恢复,而且压缩率不如专门的压缩软件。MySQL 的备份就更原始了,mysqldump 出来的是纯 SQL 文本,几个 GB 的库 dump 出来可能几十 GB,必须压缩。
我现在的做法是:数据库先做原生备份(SQL Server 用 bak,MySQL 用 mysqldump),然后用 Bandizip 把备份文件压缩成 7z 格式,最高压缩率,分卷,加密,然后传到异地备份服务器。压缩完删除原始备份文件,只保留压缩包。
Bandizip 在数据库备份压缩场景下的优势:
第一,压缩率极高。 SQL Server 的 bak 文件和 MySQL 的 dump 文件都是高度可压缩的,用 7z 最高压缩率能压到原大小的 10%-20%。一个 50GB 的 SQL Server 备份,压完可能只有 5-10GB,备份磁盘空间省了 80% 以上。MySQL 的 dump 文件压缩率更高,纯文本压缩率能到 5% 以下。
第二,分卷方便异地传输。 数据库备份压缩完还是可能有几个 GB,分卷成 4GB 一卷,传输到异地备份服务器的时候更稳定,某一卷传坏了只需要重传那卷。
第三,加密保护数据库备份。 数据库备份里是公司的核心业务数据 —— 客户信息、订单、财务数据,这些东西如果泄露了是天大的事。Bandizip 的 AES-256 加密能保护备份文件,就算异地备份服务器被攻破了,没有密码也打不开数据库备份。
第四,命令行集成到备份脚本。 我把数据库备份和压缩写成一个脚本,SQL Server 用 sqlcmd 命令备份,MySQL 用 mysqldump 备份,备份完自动调用 bz.exe 压缩,压缩完自动传异地备份,整个流程全自动,每天凌晨跑,不用人工干预。
有个细节:压缩数据库备份的时候,我会用 Bandizip 的测试功能(t 命令)测一下压缩包完整性,确保备份压缩包没坏。数据库备份如果压坏了,等需要恢复的时候打不开,那备份就白做了,后果不堪设想。所以压缩完必测,这是铁律。
六、企业版部署和授权:MSI 安装包和 GPO 批量推送
Bandizip 有企业版,提供 MSI 安装包,支持通过组策略(GPO)批量部署。MSI 是 Windows Installer 的格式,组策略原生支持,能直接推送到加域的电脑上,不用写脚本。
我部署 Bandizip 企业版的流程是这样的:
Bandizip 企业版还有几个对运维很实用的功能:
第一,批量授权。 企业版是按设备数授权的,买一次授权,所有设备都能用,不用每台电脑单独激活。授权文件是一个许可证文件,部署的时候跟 MSI 一起推送到终端,自动激活,不用用户输入序列号。
第二,自定义安装。 MSI 安装包支持自定义安装参数,比如可以选择不安装右键菜单扩展、不安装文件关联、不创建桌面快捷方式等。我给服务器部署的时候,就只装核心组件和命令行工具,不装右键菜单和桌面快捷方式,因为服务器上基本不用图形界面,只需要 bz.exe 命令行。
第四,无广告。 免费版 Bandizip 有广告弹窗,企业版没有广告。给公司终端部署肯定要用企业版,不然用户电脑上天天弹广告,影响工作还显得不专业。
用这个办法,Bandizip 企业版部署到两百多台终端和三十多台服务器,我只花了半天时间配置 GPO,剩下的都是自动执行。以后升级版本,只需要在 GPO 里更新 MSI 安装包,所有电脑下次开机自动升级,运维成本极低。
七、跟其他工具比,Bandizip 在运维场景下好在哪
我做运维这些年,服务器和终端上用过不少压缩工具,简单对比一下:
7-Zip: 优点是免费、开源、压缩率高、命令行强大。缺点是界面丑、更新慢、右键菜单偶尔出问题、不支持 RAR 格式创建、企业环境没有官方支持和批量部署方案。7-Zip 我之前用了很多年,后来换 Bandizip 主要是因为企业版的 MSI 部署和批量授权,还有界面更友好(终端用户用着更顺手)。
Windows 自带压缩: 优点是系统原生、不用装。缺点是功能太弱 —— 只支持 zip 格式、压缩率低、不支持加密(zip 加密弱)、不支持分卷、没有命令行、不能批量处理。应急用一下可以,日常运维根本不够用。
Bandizip: 优点是界面友好、压缩率高(支持 7z)、速度快(多核优化)、支持 40 + 格式、命令行强大(bz.exe)、SFX 自解压功能灵活、企业版有 MSI 部署和批量授权、无广告、价格比 WinRAR 便宜。缺点是不支持创建 RAR 格式、恢复记录功能不如 WinRAR、Mac 版功能弱、高压缩率时内存占用大。
我的最终方案是:服务器和终端默认装 Bandizip 企业版(日常压缩解压、日志归档、备份压缩、软件部署都用它),需要创建 RAR 格式或者需要恢复记录的场景用 WinRAR(少数服务器上装),Linux 服务器用自带的 tar/gzip/zip。三个工具配合,各取所长,覆盖所有运维场景。
八、踩过的坑和注意事项
用 Bandizip 做运维这么多年,也踩过不少坑,分享给同行避避坑。
第一,高压缩率内存占用大。Bandizip 用 7z 格式最高压缩率的时候,内存占用很大,压缩大文件(比如几十 GB 的数据库备份)的时候可能占用几个 GB 甚至十几个 GB 内存。服务器上如果内存紧张,可能导致其他业务卡顿甚至 OOM。我现在压缩大文件的时候,会用 - t 参数限制 CPU 线程数(比如 - t:4,只用 4 个线程),降低内存占用,虽然压缩慢一点,但不会影响其他业务。
第二,命令行密码参数的安全问题。bz.exe 的密码参数是 - p:password,密码直接写在命令行里,会出现在进程列表和命令历史里,有泄露风险。我写脚本的时候,密码不会明文写在脚本里,而是从环境变量或者加密的配置文件里读取,或者用 - cmdfile 参数从文件读取命令行,避免密码出现在进程列表里。
第三,SFX 包的数字签名问题。我做的 SFX 自解压包,如果没有数字签名,Windows SmartScreen 可能会拦截,用户运行的时候会提示 "未知发布者",有些终端的安全策略甚至会直接阻止运行。我现在做 SFX 包都会用公司的代码签名证书签名,签名之后 SmartScreen 就不会拦截了,用户运行也更放心。
第四,服务器上不要开自动更新。Bandizip 默认会自动检查更新,服务器上我都会关掉自动更新。因为服务器上的软件版本要稳定,自动更新可能引入兼容性问题或者 bug,而且更新的时候可能需要重启或者占用资源,影响业务。服务器上的软件更新都是我手动测试之后再批量部署,不自动更。
第五,压缩大文件前检查磁盘空间。Bandizip 压缩的时候,临时文件和最终压缩包都要占磁盘空间,压缩一个 50GB 的文件,可能需要 100GB 以上的临时空间。如果磁盘空间不够,压缩会失败,而且可能留下临时文件占空间。我现在压缩大文件之前,都会先检查目标磁盘的剩余空间,确保足够再开始压缩。
第六,跨平台压缩包的编码问题。我有时候会收到 Linux 或者 Mac 上压缩的 zip 包,解压出来中文文件名乱码。Bandizip 有个代码页参数(-cp),解压的时候指定代码页就能解决乱码问题,比如 - cp:65001 是 UTF-8,-cp:936 是 GBK。我一般先试 UTF-8,不行再试 GBK,基本上能解决所有乱码问题。
九、写在最后
做 IT 运维八年,我越来越觉得,运维这行的核心不是技术多高深,而是把琐碎的事情自动化、标准化、稳定化。日志归档、系统备份、软件部署、终端支持、数据库备份,这些事情每一件看起来都不起眼,但每天都在做,而且出了问题就是大事。一个好用的工具,能让这些琐碎的事情变得简单、可靠、自动化,省下来的时间和精力,就能去处理更重要的事情。
Bandizip 对我来说,就是运维工具箱里的一把瑞士军刀。它不是最专业的备份工具,不是最强大的部署平台,也不是最安全的加密软件,但它在压缩解压这个核心功能上做到了极致 —— 界面友好、压缩率高、速度快、格式全、命令行强大、SFX 灵活、企业版部署方便。而压缩解压,恰恰是运维每天都在用的基础功能。把基础功能做好,就是最大的价值。
最后给运维同行们一个建议:不要忽视压缩工具。选一个稳定、强大、企业级的压缩工具,部署到所有服务器和终端上,把日志归档、备份压缩、软件部署这些事情标准化、自动化,你会发现运维工作轻松很多。在工具上花的那点钱和时间,跟一次生产事故的损失比起来,根本不算什么。
希望我的经验能帮到正在运维一线打拼的同行们。祝大家服务器永不宕机,磁盘永远不满,工单永远清零。
THE END