最近,我在我的 Ubuntu 机器上安装了适用于 Linux 的 VMWare Workstation,在安装过程中我遇到了一个奇怪的问题。安装程序本身是某种与 makefile 捆绑在一起的存档。此 makefile 安装所有需要的组件,并根据日志判断编译一些模块并检查复制文件的 CRC。
该安装程序应按如下方式运行:
sudo sh ./VMware-Workstation-Full-9.0.1-894247.x86_64.bundle
但我第一次是用另一种方法做的:
chmod uga+x VMware-Workstation-Full-9.0.1-894247.x86_64.bundle
sudo ./VMware-Workstation-Full-9.0.1-894247.x86_64.bundle
之后安装失败,并显示以下消息:
[2012-12-06 15:07:18,348] [vmware-tools-windows 9.2.2] Failed to copy file from windows.iso to /usr/lib/vmware/isoimages/windows.iso
Traceback (most recent call last):
File "/tmp/vmis.KNkJ7S/install/vmware-installer/vmis/core/component.py", line 193, in doit
data = fileobj.read(10485760) # Read 10 MB at once. Not too large to fill
File "/tmp/vmis.KNkJ7S/install/vmware-installer/python/lib/gzip.py", line 227, in read
self._read(readsize)
File "/tmp/vmis.KNkJ7S/install/vmware-installer/python/lib/gzip.py", line 292, in _read
self._read_eof()
File "/tmp/vmis.KNkJ7S/install/vmware-installer/python/lib/gzip.py", line 311, in _read_eof
raise IOError, "CRC check failed"
IOError: CRC check failed
[2012-12-06 15:07:18,365] [vmware-tools-windows 9.2.2] Installation failed, rolling back installation.
我以为这可能是因为下载的文件已损坏,因为它使用 MD5 和 SHA1 的校验和与下载站点上提供的不同。删除文件后,重新下载并按应有的方式运行,一切正常。
所以我的问题纯粹是出于好奇。可能是因为在文件上设置了可执行标志导致 CRC 校验失败?
答案1
不,当你设置可执行标志时仅限文件索引节点,也就是存储信息的地方,变化。
文件内容保持不变,校验和也保持不变。
你说你的文件的 MD5/SHA1 校验和和网站上的不一样,所以是的,下载的文件已损坏该文件可能仅被部分下载,这可以解释为什么它最初可以工作,但在解压时却崩溃了。
(您可以通过一个简单的实验自己检查一下:
# ls -l /bin/gawk
-rwxr-xr-x 1 root root 267648 Aug 19 2011 /bin/gawk
# sha1sum /bin/gawk
d8fcc0aae41635dedb449523989af47f290fe22a /bin/gawk
模式为 755,校验和为d8fcc0aae41635dedb449523989af47f290fe22a
。
# stat /bin/gawk
(...)
Change: 2012-11-07 17:24:49.000000000 +0100
stat
显示Change
该 inode 最后一次被更改是在一个月前。
现在我改变文件模式:
# date
Thu Dec 6 16:07:48 CET 2012
# chmod 644 /bin/gawk
# sha1sum /bin/gawk
d8fcc0aae41635dedb449523989af47f290fe22a /bin/gawk
# stat /bin/gawk
(...)
Change: 2012-12-06 16:07:48.000000000 +0100
inode 已改变(与date
的输出相比),但校验和没有改变。)