unzip 解压_Windows下unzip遇到的warning “use backslashes as path separators”

3dd8f1e42057b5b058c3c77d4e7bf6bf.png

IT skills & English, 点击蓝字关注

IBM Spectrum Symphony是基于SOA架构的分布式计算框架,它能在自由伸缩的共享集群中,为计算密集型和数据密集型的应用提供强大的企业级管理。

Symphony有一个配置是这样的,在应用的profile里头,有个方法是Register,可以配置成actionOnSI="blockHost"。这样当某service实例在Register方法中由于某种原因(比方说磁盘不足、单点故障等)而失败的话,计算节点就会被阻止加入到计算,那么Symphony会从资源组里分配其他可用的计算节点参与运算。这样做的目的是避免作业一直分配到某个不能成功完成运算的节点,导致时间浪费甚至作业得不到计算。

      <Method name="Register">        <Timeout actionOnSI="blockHost" duration="600"/>        <Exit actionOnSI="blockHost"/>      Method>

某天,客户遇到这样一个问题。他们更新了应用的service代码,要部署到cluster。部署是成功的,但是在解压缩的时候,出错了,结果就是节点被blocked。为了方便理解,先贴上Symphony SOAM这部分的架构图。红框部分是Symphony中间件,客户仅需要开发客户端client和服务端service,client用于提交作业,service实例用于计算作业,至于资源调度和作业调度则由中间件完成,客户不需要考虑。

8546dce44704bd57962aa0361a105a8b.png

所以我们需要看SIM(图中的Service Instance Manager)的日志,因为是SIM管理着SI(图中的Service Instance),包括SI的启动、更新、退出等。下面是SIM的日志

15:51:06.951 GMT DEBUG [5268:17244] CLI.dpl.download.Uncompress - Uncompress::copyArchive: Copying file C:\Windows\TEMP\\SI_Package_Name_Version\SI_Package_Name_Version.zip to D:\grid\ibm/soam\deploy\SI_Package_Name_Version.v1\SI_Package_Name_Version.zip15:51:06.966 GMT DEBUG [5268:17244] CLI.dpl.download.Uncompress - Uncompress::execNextStep: Executing uncompress or validate step: D:\grid\ibm\soam\7.2\w2k3_x64-vc7-psdk\bin\..\bin\utils\unzip -o -q "SI_Package_Name_Version.zip"15:51:06.966 GMT DEBUG [5268:17244] CLI.dpl.download.Uncompress - Uncompress::execCmd: Execute PATH: D:\grid\ibm/soam/7.2/w2k3_x64-vc7-psdk/lib64;D:\grid\ibm/soam/7.2/w2k3_x64-vc7-psdk/bin;D:\grid\ibm/soam/7.2/w2k3_x64-vc7-psdk/lib;D:\grid\ibm\3.6\lib;D:\grid\ibm\soam\7.2\w2k3_x64-vc7-psdk\bin;D:\grid\ibm\soam\7.2\w2k3_x64-vc7-psdk\lib;D:\grid\ibm\soam\7.2\w2k3_x64-vc7-psdk\lib64;D:\grid\ibm\3.6\bin;D:\grid\ibm\3.6\lib;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\\Hewlett-Packard\HPSUT\bin;C:\Program Files\HP\HP BTO Software\lib;C:\Program Files\HP\HP BTO Software\bin;C:\Program Files\HP\HP BTO Software\bin\win64;C:\Program Files\HP\HP BTO Software\bin\win64\OpC;;D:\grid\ibm\3.6\lib;D:\grid\ibm\3.6\bin15:51:06.966 GMT DEBUG [5268:17244] CLI.dpl.download.RunTask - RunTask::execBlock(): Started: D:\grid\ibm\soam\7.2\w2k3_x64-vc7-psdk\bin\..\bin\utils\unzip -o -q "SI_Package_Name_Version.zip" with tid 38888115:51:07.869 GMT DEBUG [5268:17244] CLI.dpl.download.RunTask - RunTask::execBlock(): There may be some exceptions or errors during decompressing process, and the status of the process is 115:51:07.869 GMT DEBUG [5268:17244] CLI.dpl.download.Uncompress - Uncompress::execNextStep: Decompress or validate command failed.15:51:07.869 GMT INFO [5268:17244] CLI.dpl.deployutils - warning: SI_Package_Name_Version.zip appears to use backslashes as path separators15:51:07.869 GMT DEBUG [5268:17244] CLI.dpl.download.Uncompress - Uncompress::extract: Deleting file D:\grid\ibm/soam\deploy\SI_Package_Name_Version.v1\SI_Package_Name_Version.zip 15:51:07.869 GMT DEBUG [5268:17244] CLI.dpl.download.InstallModule - InstallModule::copyModuleAndDecompress(): Failed to uncompress: C:\Windows\TEMP\\SI_Package_Name_Version\SI_Package_Name_Version.zip15:51:07.869 GMT ERROR [5268:17244] CLI.dpl.download.InstallModule - Domain : Failed to uncompress the package, C:\Windows\TEMP\\SI_Package_Name_Version\SI_Package_Name_Version.zip. Check if the de-archive utility is available or there is enough disk storage for uncompressing.15:51:07.916 GMT DEBUG [5268:17244] CLI.SoamDeploy.CliSoamDeployDownloadImpl - Deleting tmp file: C:\Windows\TEMP\\SI_Package_Name_Version\SI_Package_Name_Version.zip15:51:07.916 GMT ERROR [5268:17244] CLI.SoamDeploy.CliSoamDeployDownloadImpl - Domain : The package  failed to install. The deployed package file could not be decompressed. Check if: (1) the decompression utility is available, (2) there is enough disk storage for decompressing the file, or (3) the package file is too large to be decompressed.

从SIM日志来看,新的SI的package是已经下载到本地了,但是在解压缩的时候,报了个warning级别的消息:"SI_Package_Name_Version.zip appears to use backslashes as path separators",解压缩的命令是unzip -o -q "SI_Package_Name_Version.zip"。根据后边的日志,可能的原因包括:

(1) unzip工具不存在;

(2) 磁盘空间不足;

(3) 包太大。

当然,客户检查下来,这三个怀疑点都不是问题。

那会不会是压缩包本身有问题呢?于是让客户在同一台计算节点上,手动去解压缩那个包。果然,手动解压缩也有类似的warning,只不过虽然报了这个warning,解压缩是成功的,所有文件和目录都解压出来了。

D:\grid\ibm\soam\deploy\Applications\SampleAppJava\SI_Package_Name_Version.v1>D:\grid\ibm\soam\7.2\w2k3_x64-vc7-psdk\bin\..\bin\utils\unzip -o -q SI_Package_Name_Version.zipwarning: SI_Package_Name_Version.zip appears to use backslashes as path separators

至此,可以断定跟Symphony关系不大,要么是压缩包有问题,要么是unzip不能解压缩这个压缩包。

通过询问客户得知,客户的压缩文件都是经过Windows的Powershell压缩工具Compress-Archive生成的。于是模仿客户的包的格式,在实验室里可以复现相同问题。原来问题在于,使用Compress-Archive压缩带有文件夹的内容时,压缩没有问题;但用unzip去解压缩时,就会遇到“use backslashes as path separators”问题。进一步测试发现,在Windows中如果通过右击内容,选择"Compress(zipped) folder"的方式,或者通过7-zip来压缩的方式,unzip都可以完美解压。

PS C:\Users\Administrator> Compress-Archivecmdlet Compress-Archive at command pipeline position 1Supply values for the following parameters:Path[0]: C:\Users\Administrator\file1.logPath[1]: C:\Users\Administrator\lab\Path[2]:DestinationPath: C:\Users\Administrator\package.zipPS C:\Users\Administrator> C:\symphony\soam\7.3\w2k3_x64-vc7-psdk\bin\utils\unzip.exe -o -q .\package.zipwarning: ./package.zip appears to use backslashes as path separatorsPS C:\Users\Administrator> Compress-Archive

所以,严格地说,这不是Symphony的问题,是Windows的Compress-Archive工具的问题。一顿Google,果然找到Powershell报告这是一个Microsoft.PowerShell.Archive的bug,在版本1.2.3.0得到修复,详情请参考:

https://github.com/PowerShell/Microsoft.PowerShell.Archive/issues/48

由于客户坚持要用Microsoft.PowerShell.Archive去压缩,所以解决方法只能是升级Microsoft.PowerShell.Archive。

具体方法请参考:

https://www.powershellgallery.com/packages/Microsoft.PowerShell.Archive/1.2.3.0

下面是我在实验室里升级Microsoft.PowerShell.Archive和验证问题得到解决的操作:

PS C:\Users\egoadmin> Install-Module -Name Microsoft.PowerShell.Archive -RequiredVersion 1.2.3.0 NuGet provider is required to continuePowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGetprovider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or'C:\Users\egoadmin\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider byrunning 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to installand import the NuGet provider now?[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): yUntrusted repositoryYou are installing the modules from an untrusted repository. If you trust this repository, change itsInstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from'PSGallery'?[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): APS C:\Users\egoadmin>PS C:\Users\egoadmin> Get-Module -ListAvailable -Name Microsoft.PowerShell.ArchiveDirectory: C:\Program Files\WindowsPowerShell\ModulesModuleType Version Name ExportedCommands---------- ------- ---- ----------------Manifest 1.2.3.0 Microsoft.PowerShell.Archive {Compress-Archive, Expand-Archive}Directory: C:\windows\system32\WindowsPowerShell\v1.0\ModulesModuleType Version Name ExportedCommands---------- ------- ---- ----------------Manifest 1.0.1.0 Microsoft.PowerShell.Archive {Compress-Archive, Expand-Archive}PS C:\Users\egoadmin\Downloads> dirDirectory: C:\Users\egoadmin\DownloadsMode LastWriteTime Length Name---- ------------- ------ ----d----- 6/1/2020 7:53 AM labd----- 6/1/2020 7:42 AM unzip552-a---- 6/1/2020 7:53 AM 38 1234.txt-a---- 6/1/2020 7:38 AM 1295576 ChromeSetup.exe-a---- 6/1/2020 7:40 AM 1305781 unzip552.zipPS C:\Users\egoadmin\Downloads> Compress-Archive cmdlet Compress-Archive at command pipeline position 1Supply values for the following parameters:Path[0]: labPath[1]: 1234.txtPath[2]:DestinationPath: 1.zipPS C:\Users\egoadmin\Downloads> dirDirectory: C:\Users\egoadmin\DownloadsMode LastWriteTime Length Name---- ------------- ------ ----d----- 6/1/2020 7:53 AM labd----- 6/1/2020 7:42 AM unzip552-a---- 6/1/2020 8:03 AM 290 1.zip-a---- 6/1/2020 7:53 AM 38 1234.txt-a---- 6/1/2020 7:38 AM 1295576 ChromeSetup.exe-a---- 6/1/2020 7:40 AM 1305781 unzip552.zipC:\Users\Administrator\Downloads>E:\SpectrumComputing\soam\7.2\w2k3_x64-vc7-psdk\bin\utils\unzip.exe -o -q 1.zip C:\Users\Administrator\Downloads>dirVolume in drive C has no label.Volume Serial Number is 74B6-4C2CDirectory of C:\Users\Administrator\Downloads06/01/2020 12:54 AM 
 .06/01/2020 12:54 AM   ..06/01/2020 01:06 AM 290 1.zip06/01/2020 07:53 AM 38 1234.txt06/01/2020 12:54 AM   lab2 File(s) 328 bytes3 Dir(s) 4,173,824 bytes free

The End

c9db6c8631678201dcf180ab8b90d1b1.gif

原创文章转载声明:请在文章开头注明作者、公众号名字及原文链接网址,禁止盗用、篡改标题和文章内容。对于二次转载,请按一次转载的要求办理。谢谢!

相关阅读

使用valgrind排查内存泄漏问题

不得了!进程内存使用居高不下!

使用gdb快速读取dump文件

理解Spark RDD中的aggregate函数

Azure计算节点无法连上本地主节点,原来跟MTU有关

扫码关注

提高IT Skills和English

073b51d1388a0e21230597ae4758ebdb.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值