在 OSX Lion 中存在一种我无法解释的行为(在其他版本中可能也存在)。
当我复制或复制一些包含动态库的应用程序(例如 iTunes)时,这些库的物理大小会发生变化(大小会增加)。这可能是由于磁盘碎片造成的。但不仅仅是这样,因为令人惊讶的是,原始物理大小小于逻辑大小(通常物理大小总是大于逻辑大小,除非涉及压缩)。
为了说明我的情况:
antoine@amarante:/Applications$ ls -ls iTunes.app/Contents/MacOS/libgnsdk_submit.1.8.2.dylib
384 -rwxrwxr-x+ 1 root admin 558704 8 jul 2011 iTunes.app/Contents/MacOS/libgnsdk_submit.1.8.2.dylib
ls
假设块大小为 512 字节,则 384 个块占 196608 字节,而报告的逻辑大小为 558704 字节。或者,如获取信息Finder 中的窗口:
558.704 octets (197 Ko sur disque)
在我复制整个 iTunes 应用程序后,也会出现这种情况。第一个iTunes copie
是通过 Finder 完成的复制,第二个iTunes-cp
是使用 CLI 命令完成的复制cp -a
。
antoine@amarante:/Applications$ ls -ls iTunes*.app/Contents/MacOS/libgnsdk_dsp.1.8.2.dylib
11632 -rwxr-xr-x+ 1 antoine admin 5955104 8 jul 2011 iTunes copie.app/Contents/MacOS/libgnsdk_dsp.1.8.2.dylib
11632 -rwxrwxr-x+ 1 antoine admin 5955104 8 jul 2011 iTunes-cp.app/Contents/MacOS/libgnsdk_dsp.1.8.2.dylib
3944 -rwxrwxr-x+ 2 root admin 5955104 8 jul 2011 iTunes.app/Contents/MacOS/libgnsdk_dsp.1.8.2.dylib
我们看到,复制的文件的物理大小(11632*512 = 5955584 字节)大于逻辑大小(5955104),但原始文件除外,原始文件小得多。当我.dylib
单独复制单个文件时,行为是相同的。这种情况发生在一些动态库文件中,但不是全部。
原始库文件怎么会比副本小?是否涉及压缩?或者我的原始文件是否以某种方式损坏?我该如何检查?
答案1
事实上,Mac 10.6 及更高版本的 HFS+ 中存在压缩。它是透明的,甚至很难用标准操作系统工具检测到。
而且,这并不总是会这样做。为了向后兼容,默认是不压缩的,但它们会在安装操作系统时对其进行压缩。
- http://hints.macworld.com/article.php?story=20090902223042255有很多血腥的细节。
- http://reviews.cnet.com/8301-13727_7-20015100-263.html列出了各种命令行工具如何查看压缩文件的大小。
工具列表(以防链接断裂):