z01不是坏了,是还没凑齐
在linux服务器上遇到以.z01结尾的文件,先别急着删,它大概率是分卷压缩包的其中一块。z01本身没法独立解压,你得找到它对应的.z02、.z03甚至.zip文件,把它们放在同一个目录下,用unzip或者7z命令才能完整解开,下面把操作步骤和坑一次说清楚。
linux z01文件怎么解压:先看看文件全不全
服务器上出现z01文件,通常是你从Windows那边打包传过来的,或者运维同事用WinRAR分了卷,分卷压缩的意思是把一个大文件切成几块,方便传输和存储,命名规律一般是这样的:
- 第一个分卷叫.zip或者.z01(取决于打包工具)
- 后续分卷依次是.z01、.z02、.z03……
- 有些工具则命名成.part1.rar、.part2.rar这种
在动手解压之前,先在终端里看一眼目录内容:
ls -lh /data/backup/
如果看到类似backup.z01、backup.z02、backup.zip这样的文件列表,那就说明分卷齐全,如果只有孤零零一个backup.z01,那基本可以放弃解压了缺了其他分卷,谁也解不开。
这里有个重要的技术细节:z01不是ZIP分卷的唯一标识,有些打包工具生成的第一个分卷就是.zip本身,后面跟着.z01、.z02;还有些工具把所有分卷都命名为.z01开头,所以在执行解压命令之前,先用file命令确认一下文件实际格式:
file backup.z01
输出里会显示Zip archive data之类的字样,证明它确实是ZIP分卷的一部分,如果显示data或者unknown,可能是文件损坏或者根本不是压缩包。
服务器收到z01压缩包怎么办:unzip和7z都能干
用unzip直接解压主分卷
这是最简单的路径。你只需要找到那个不带数字后缀的.zip文件,对它执行unzip命令就行,unzip会自动读取同目录下的.z01、.z02分卷。
cd /data/backup/ unzip backup.zip
执行后会看到类似这样的输出:
Archive: backup.zip
creating: backup/
extracting: backup/config.yaml
extracting: backup/data.db
这说明unzip已经自动把z01、z02分卷的内容合并解压出来了。
但有个前提条件:服务器上得装unzip,CentOS系用yum install unzip,Debian系用apt install unzip,如果系统提示unzip: command not found,那就是没装。
用7z处理更保险
如果unzip报错,或者说你拿到的分卷是Windows那边的WinRAR压缩的,用7-Zip的Linux版本(p7zip)更稳妥。7z对分卷格式的兼容性比unzip好一些,尤其处理多分卷的时候。
# 安装p7zip yum install -y p7zip # 或者 apt install p7zip-full # 解压 7z x backup.zip
7z的命令格式跟unzip略有不同,x表示解压并保留目录结构,输出的进度条也更直观,遇到中文文件名的压缩包,7z的乱码问题也少一些。
这里有个实用的判断标准:
| 工具 | 优点 | 缺点 |
|---|---|---|
| unzip | 系统自带概率高,命令简单 | 对某些分卷格式兼容性一般 |
| 7z | 兼容性强,支持格式多 | 可能需要额外安装,命令稍复杂 |
多数情况下unzip就够用了,但如果解压中途报错bad zipfile offset或者invalid compressed data,不妨换成7z试试。
分卷解压失败的常见原因排查
在实际服务器操作中,解压失败的原因就那么几种,按出现概率从高到低排:
分卷文件不完整或命名被改
最常见的情况是传输过程中部分分卷丢包了,或者有人手动改了文件名,比如把backup.z01改名成了backup.part1,这样unzip就认不出来了。
检查方法很简单:
# 看文件大小是否合理 ls -lh /data/backup/ # 对比分卷大小是否接近
如果几个分卷文件大小差异悬殊,比如一个5MB、一个500MB,那基本可以断定传输过程中出问题了,重新传一遍吧。
磁盘空间不足
在解压之前先查一下磁盘剩余空间:
df -h /data/backup/
分卷压缩的目的是把大文件变小块传输,但解压后的体积往往会超过所有分卷之和,比如100个分卷各有100MB,解压出来可能是10GB的文件。行业共识认为,解压前至少预留两倍于分卷总大小的空间,这样最稳妥。
权限问题导致解压中断
普通用户账号解压到root目录或者系统目录时会遇到Permission denied,这时候用sudo或者切换到root用户,或者换成chown把目录属主改一下。
中文文件名乱码
服务器上如果locale不是UTF-8,解压Windows那边压缩的中文文件会出现乱码,用7z加参数可以解决:
7z x backup.zip -o/data/backup -mcp936
或者用unzip的码表参数:
unzip -O gbk backup.zip
注意:-O这个参数不是所有版本的unzip都支持,有些精简版不行,乱码这件事,多数场景下是Windows和Linux编码体系不一致造成的,跟压缩包本身没关系。
linux分卷解压失败后怎么定位损坏的分卷
如果unzip和7z都试过了,仍然报错,先不要盲目重新下载所有分卷。分卷压缩包有校验信息,报错信息里会直接指出哪个分卷有问题。
比如运行7z x backup.zip后出现:
CRC Failed : backup/data_003.bin
这说明解压到data_003.bin这个文件的时候校验失败了,接下来缩小范围:
# 单独测试每个分卷的完整性
for i in backup.z01 backup.z02 backup.zip; do
unzip -t $i 2>&1 | tail -2
done
unzip -t是测试模式,不实际解压,只检查完整性,跑一圈下来就能确定是哪个分卷传坏了。
另外一个容易忽略的点是:某些分卷工具之间并不完全兼容,比如Windows上用WinRAR压缩的多卷ZIP,Linux上老版本的unzip可能不认,这个场景下换用7z几乎都能解决,因为p7zip的解析逻辑更接近Windows端的实现。
解压完之后的收尾工作
分卷解压不是解开就完事了,服务器空间那么金贵,建议养成好习惯:
- 确认解压结果完整:
du -sh /data/backup/看看目录大小 - 验证关键文件是否存在:
ls -l或者find . -type f | wc -l - 删掉无用的分卷:确认没问题之后
rm -f backup.z backup.zip
有些生产服务器上还会写个简单的验证脚本,比如对比解压前后文件数量,或者检查某个关键文件的时间戳,靠谱的运维都是这么干的,别嫌麻烦。
Q&A:linux服务器z01解压常见问题
只有z01没有其他分卷,能解压吗?
不能,z01是一个分卷的一部分,缺少任何一块都无法还原完整文件,这就好比拼图少了一块,整张图也不完整,如果你只有z01,先去问问发文件的人要其他分卷。
z01解压和普通zip解压有什么区别?
区别在于文件名和依赖关系,普通zip是一个独立文件,直接unzip xxx.zip就完事;z01必须和其他分卷配合,而且解压命令针对的是主分卷(通常是.zip文件),不是直接对z01执行命令。
解压提示need PK compat. vX.Y是什么意思?
说明你用的unzip版本太老,不认这个压缩包的分卷格式,用unzip -v看一下版本号,如果低于6.0,建议升级或者换用p7zip,这个提示在老旧服务器上很容易出现,别慌,跟压缩包本身无关。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/790376.html


