当前版本:wimlib-1.14.4(发布于2024年2月24日)wimlib是一个开源、跨平台的库,用于创建、提取和修改Windows映像(WIM)归档文件。使用 WIMLIB 进行多线程 VSS 备份和还原的示例命令:

wimlib 和 DISM 工具的对比,主要关注它们在处理 WIM 文件和映像管理方面的区别:
| 功能/特性 | wimlib | DISM |
|---|---|---|
| 平台支持 | Windows, Linux | 仅支持 Windows |
| 命令行支持 | 支持 Linux 和 Windows 环境 | 仅支持 Windows(命令行和 PowerShell) |
| WIM 文件处理 | 处理 WIM 文件,支持创建、编辑、压缩、提取等 | 处理 WIM 文件,支持创建、编辑、安装等 |
| 图形界面支持 | 无 | 有(通过 Windows Admin Center 或其他 GUI 工具) |
| 压缩算法 | 支持 LZX, XPRESS, MSZIP 等压缩算法 | 仅支持 LZX |
| 映像导出 | 可以导出 WIM 映像到 ISO 文件 | 不直接支持导出 WIM 到 ISO 文件 |
| 增量备份 | 支持增量备份功能 | 不支持增量备份 |
| 映像安装 | 仅支持提取、应用 WIM 文件 | 支持安装映像到 Windows 系统,功能更全面 |
| 性能 | 在 Linux 环境下表现优秀,跨平台性能强 | 在 Windows 环境下性能优化,功能更丰富 |
| 易用性 | 需要更多的命令行操作,但功能强大 | 功能多样,集成于 Windows,图形化界面更友好 |
| 脚本和自动化 | 支持 Bash 脚本和批处理脚本 | 支持 PowerShell 脚本和批处理脚本 |
wimlib 和 DISM 工具在 多线程支持 方面的对比,表格化呈现它们在并行处理和性能优化上的不同:
| 功能/特性 | wimlib | DISM |
|---|---|---|
| 多线程支持 | 支持,内置多线程处理功能。 | 不直接支持,通常使用单线程,有限的并行操作。 |
| 并行处理 | 自动利用多核 CPU,特别是在创建、提取或优化 WIM 文件时表现出色。 | 默认情况下,执行大部分任务时是单线程的。 |
| 性能优化 | 可通过指定线程数来调整性能,支持并行处理,适用于多核处理器。 | 基本上只支持单线程操作,虽然某些任务(如安装)可并行化,但没有明确的线程控制选项。 |
| 工作负载分配 | wimlib-imagex 在处理大量文件时会自动进行负载分配,利用多个核心。 |
主要通过 Windows 系统的资源管理来进行调度,通常不做负载平衡。 |
| 对并行硬盘操作的支持 | 多线程可以并行处理硬盘 I/O 操作,尤其是在处理大型映像文件时。 | 不支持显式的多线程硬盘操作,依赖于操作系统的调度。 |
| 命令行参数控制线程数 | 支持通过命令行参数(如 --threads)设置使用的线程数。 |
没有显式的参数来控制线程数,默认使用系统设置。 |
| 适用场景 | 高效处理大量文件或大型映像,特别是在服务器和工作站上。 | 适用于常规的系统管理任务,主要用于 Windows 环境下的系统映像和修复。 |
| 任务调度 | 支持并行任务调度,能同时进行多个映像操作(如多个 wimlib-imagex 命令)。 |
单线程操作,不支持同时并行执行多个 DISM 命令。 |
重点说明:
-
wimlib 支持通过多线程优化性能,特别是在处理大型映像时(如创建、提取、压缩 WIM 文件等操作)。它能够显式地通过
--threads参数来配置使用的线程数,从而在多核 CPU 上显著提升性能。 -
DISM(Deployment Imaging Service and Management Tool)在大多数操作中使用单线程,虽然在某些情况下(如安装映像或修复 Windows 系统映像)可能会并行处理某些任务,但它没有像
wimlib那样提供细粒度的多线程控制选项。DISM 在性能优化方面通常依赖于操作系统的资源管理,而不是手动设置线程。
如果需要处理多个 WIM 文件或进行高效的系统映像备份,wimlib 是更合适的选择,尤其是对于多核处理器系统。而 DISM 更适合需要在 Windows 环境中执行管理任务的用户,且操作简单直接。
wimlib 和 DISM 工具在 速度 方面的对比,表格化呈现它们在不同任务下的性能差异:
| 功能/特性 | wimlib | DISM |
|---|---|---|
| 创建映像速度 | 较快,支持多线程并行处理,尤其在处理大文件时能显著提升速度。 | 较慢,默认使用单线程,处理大型映像时速度较慢。 |
| 提取映像速度 | 较快,使用多核 CPU 和并行 I/O 操作优化提取速度。 | 较慢,提取映像时常表现为单线程操作,速度较慢。 |
| 压缩映像速度 | 较快,支持高效的压缩算法和多线程处理,能够大幅度减少压缩时间。 | 较慢,压缩过程通常没有显著的优化,速度较慢。 |
| 更新映像速度 | 较快,支持增量更新,且能够通过多线程提升更新效率。 | 较慢,更新过程中的操作较为冗长,性能不如 wimlib。 |
| 恢复映像速度 | 较快,支持并行恢复,尤其在处理较大映像文件时优势明显。 | 较慢,恢复操作通常较为缓慢,且没有并行恢复的能力。 |
| 文件处理速度 | 较快,能够在处理大量小文件时展现出较高的效率。 | 较慢,在大量小文件的情况下,速度较慢。 |
| 整体性能 | 优越,通过多线程优化在多核 CPU 上表现出色,适合批量操作。 | 一般,单线程操作导致整体性能在处理大规模映像时逊色。 |
| 启动和初始化速度 | 较快,启动和初始化过程较为高效。 | 较慢,初始化和启动过程可能需要较长时间。 |
| 适用场景 | 高效处理大文件或大量文件,特别适用于服务器和工作站。 | 适用于 Windows 系统映像的修复和管理,速度较慢时适合单次操作。 |
重点总结:
-
wimlib 通常比 DISM 快,特别是在创建、提取和压缩映像时。其多线程支持和高效的 I/O 操作能够显著提高速度,在处理大文件或大量文件时尤其表现突出。
-
DISM 在处理任务时默认采用单线程,因此在大多数操作中速度较慢,尤其是在涉及大量文件或大文件的处理时。尽管它在一些 Windows 系统管理任务中表现可靠,但在速度上通常逊色于 wimlib。
如果你的任务需要频繁操作 WIM 文件,特别是创建、提取或压缩映像,wimlib 在速度方面明显占优。
wimlib 和 DISM 在 备份 方面的对比,表格化呈现它们在备份操作时的不同特性和区别:
| 功能/特性 | wimlib | DISM |
|---|---|---|
| 备份方式 | 主要通过创建 WIM 映像文件进行备份。 | 通过 Windows 映像服务来创建和管理 WIM 映像文件,支持备份操作。 |
| 备份速度 | 较快,支持多线程并行操作,可以在较短时间内完成备份。 | 较慢,通常采用单线程操作,备份大文件或多个文件时速度较慢。 |
| 增量备份 | 支持增量备份,能够高效地备份新变更的文件。 | 支持增量备份,但性能较 wimlib 稍逊,处理速度较慢。 |
| 压缩备份文件 | 支持高效的文件压缩,可减小备份文件大小。 | 支持压缩,但压缩算法和速度相较 wimlib 较为逊色。 |
| 恢复备份 | 较快,恢复时支持并行操作和多核处理。 | 恢复时较为慢,通常采用单线程操作,恢复时间较长。 |
| 备份的兼容性 | 广泛支持,适用于多种 Windows 环境,包括桌面和服务器版本。 | 主要用于 Windows 系统,尤其是 Windows 7 及之后的版本。 |
| 文件级备份 | 不直接支持文件级备份,但可通过 WIM 映像提取指定文件。 | 支持文件级备份,能从映像中提取特定文件或文件夹。 |
| 备份的灵活性 | 灵活性较高,能够自定义备份映像的大小和压缩级别。 | 灵活性较差,备份过程的配置较为固定,无法过多自定义。 |
| 易用性 | 简便,提供简单的命令行界面,适合自动化操作。 | 复杂,命令行参数较多,操作复杂,需较多配置。 |
| 适用场景 | 更适合需要高效备份、增量备份和恢复的场景,尤其是服务器和工作站。 | 适合管理 Windows 映像的修复和备份,尤其在操作系统层面的管理上有优势。 |
| 文件支持类型 | 支持压缩和解压多种文件格式,支持处理较大的文件。 | 专注于 Windows 操作系统映像,支持较少的文件格式。 |
重点总结:
-
备份速度:
- wimlib 在备份时比 DISM 更快速,尤其在处理大文件或多个文件时表现更优,主要得益于其支持多线程并行操作。
-
增量备份:
- 两者都支持增量备份,wimlib 在性能上通常优于 DISM,特别是在操作大量文件时。
-
压缩性能:
- wimlib 提供高效的压缩选项,能够更快地减小备份文件的大小,而 DISM 的压缩速度相对较慢。
-
恢复速度:
- wimlib 恢复备份时支持并行操作,速度较快;而 DISM 恢复通常较慢,操作过程多为单线程。
-
易用性:
- wimlib 更加简洁易用,命令行界面简单,适合自动化备份任务;而 DISM 功能更多,但相对较复杂,需要更多的配置。
如果需要 快速 和 高效 的备份解决方案,尤其是在大文件或批量备份的场景下,wimlib 更具优势。而如果目标是管理和修复 Windows 操作系统映像,并进行更为 细致的系统级管理,那么 DISM 会是更适合的工具。
|
当前版本:wimlib-1.14.4(发布于2024年2月24日)
wimlib是什么? wimlib是一个开源、跨平台的库,用于创建、提取和修改Windows映像(WIM)归档文件。WIM是一种文件归档格式,某种程度上类似于ZIP(及其他许多文件归档格式);但与ZIP不同的是,它能存储特定于Windows的元数据,允许在一个归档中存储多个“映像”,自动去重所有文件内容,并支持可选的固实压缩以获得更好的压缩率。wimlib及其命令行前端wimlib-imagex提供了微软的WIMGAPI、ImageX和DISM之外的免费且跨平台的替代方案。 wimlib除了其他功能外,还:
wimlib以源码tarball形式(针对UNIX/Linux)或即用型二进制文件形式(针对Windows XP及以后版本)发布。软件包括一个C库、wimlib-imagex命令行前端及其相关文档。 特性 一般能力包括:
wimlib可用于备份、安装或恢复Windows操作系统;创建Windows PE的定制映像;或在Windows或UNIX/Linux上归档文件。 wimlib在Windows和类UNIX系统上均得到完全支持。在Windows上,wimlib使用本地Windows API调用来正确处理诸如硬链接、符号链接、连接点、命名数据流和安全描述符等高级NTFS特性。在UNIX上,wimlib处理硬链接和符号链接,并可选择性地处理UNIX特有的元数据,如uid、gid、模式和扩展属性。UNIX用户可以利用与NTFS-3G的集成,直接从包含NTFS文件系统的块设备捕获和应用。这允许从活动的Linux系统备份和部署Windows操作系统。Linux用户还可以利用FUSE支持,以只读或读写方式挂载WIM映像(参见:wimmount, wimmountrw)。 wimlib包含XPRESS、LZX和LZMS压缩算法的高级实现。这些算法随着时间推移不断改进,现在通常比微软的对应算法性能更好、压缩率更高。默认情况下,wimlib使用(多线程)LZX压缩创建WIM归档,但也提供了控制格式、块大小、压缩级别、线程数以及是否以固实模式压缩的选项。 wimlib完全支持WIM格式内置的文件内容去重或“单一实例存储”。每个独特的文件内容由其SHA-1消息摘要标识,并在给定的WIM归档中仅存储一次。即使内容从同一归档中的多个WIM映像、多个相同文件或硬链接,或多个文件流(如命名数据流)引用,也是如此。创建或更新WIM归档时,wimlib会自动执行所需的去重。这一能力意味着WIM格式和wimlib对于增量备份和分发多个类似的目录树(如操作系统映像)非常有用。 wimlib也可用于处理ESD(电子软件下载,.esd)归档,以及WIM(.wim)归档。ESD归档是使用固实模式LZMS压缩的WIM归档,因此通常比常规WIM归档小得多。然而,微软有时会以(部分)加密形式分发ESD归档。wimlib本身不能解密这类归档。 wimlib-imagex文档 wimlib包含一个C库和一个名为wimlib-imagex的命令行前端。wimlib-imagex的文档随下载一起提供,为了方便起见,这里也进行了托管:
对于开发者 开发者可能对库的C API文档感兴趣。除了wimlib-imagex之外,已经有多个应用程序在使用该库。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
wimlib作为一个开源的跨平台库,用于创建、提取和修改Windows映像(WIM)档案,其底层原理涉及到几个关键的技术环节和设计原则,具体如下: 文件系统理解与操作
数据压缩与去重
二进制差异与增量更新
元数据管理
存储优化与格式兼容
性能优化
wimlib的底层原理围绕着高效、灵活和兼容的目标展开,通过一系列复杂的算法和技术手段,实现了对WIM文件的高效创建、读取、修改和管理。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
虽然详细的内部架构文档可能需要直接参考wimlib的官方文档或源代码以获得最精确的信息,但根据wimlib的基本功能和工作方式,我们可以概述其架构的主要组成部分和关键模块: 1. 核心处理引擎这是wimlib的核心,负责所有基本的WIM文件操作,包括:
2. 元数据处理模块专门处理WIM文件中的元数据,包括:
3. 文件系统遍历与处理
4. API接口层为外部应用程序(如使用Qt调用wimlib的程序)提供易于使用的API接口,包括创建、附加、提取、清单、挂载等操作。 5. 命令行工具(wimlib-imagex)作为wimlib的一部分,wimlib-imagex是一个命令行工具,封装了核心库的功能,供用户直接在终端或脚本中执行WIM操作。 6. I/O和性能优化层
7. 兼容性与格式支持确保与Windows Imaging Format (WIM)标准的兼容性,同时支持ESD等相关的Windows映像格式。 8. 错误处理与日志记录提供详尽的错误检查和处理机制,以及日志记录功能,便于调试和故障排查。 结构设计原则wimlib的设计遵循模块化原则,使得各部分职责明确,易于维护和扩展。同时,它注重跨平台兼容性,能够在多种操作系统上编译和运行。此外,为了适应不同的应用场景,wimlib在设计上兼顾了效率与灵活性,既支持快速的批量处理,也允许细致的文件级操作。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
wimlib模型可以分为几个核心组件和层次,这些部分共同协作以实现高效、灵活的Windows映像(WIM)管理和操作。以下是对wimlib模型的一个概括性描述: 1. 核心引擎层核心引擎是wimlib的核心组件,它负责WIM文件的基本操作,包括创建、读取、修改和写入。这个层级包含了对WIM文件格式的解析与构建逻辑,以及所有底层压缩、解压缩算法的实现。它还包括了对WIM文件内部结构的管理,如映像头部、文件资源表、文件元数据等。 2. 文件系统交互层文件系统交互层介于核心引擎和操作系统之间,负责将核心层的请求转化为操作系统层面的文件操作,如读取文件、写入文件、遍历目录等。这一层还需要处理不同操作系统(如Windows, Linux)的文件系统差异,确保跨平台的兼容性。 3. 元数据处理与安全模块元数据处理模块专门负责管理WIM文件中的所有元数据信息,包括但不限于文件权限、所有权、ACL(访问控制列表)、时间戳等。安全模块则确保WIM文件中的安全信息得到正确处理和迁移,比如通过加密来保护敏感信息,并确保在不同系统间安全属性的一致性。 4. 差异计算与去重引擎差异计算引擎负责计算和应用文件及WIM映像间的差异,实现增量更新功能。去重引擎则通过识别和消除重复的数据块,优化存储空间利用。这两部分紧密协作,确保在保持映像完整性的前提下,最小化存储和传输成本。 5. 性能与资源管理性能与资源管理模块关注于优化I/O操作、内存使用和CPU负载。这包括缓存策略、多线程或并行处理策略的实现,以加速数据处理速度,同时减少系统资源消耗。 6. API与用户接口
7. 错误处理与日志系统错误处理机制确保在操作过程中遇到任何问题时都能给出明确的错误反馈。日志系统则记录操作过程中的详细信息,对于故障排查和系统审计至关重要。 综合来看,wimlib模型通过这些层次和组件的紧密合作,提供了一个强大、高效、灵活的WIM文件处理框架,适用于从简单到复杂的各种应用场景。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
以下是
其他常见选项说明:
使用场景总结:
通过以上功能分类和命令的梳理,用户可以更清晰地了解如何使用
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
创建一个关于wimlib初级应用的大纲,旨在帮助初学者理解和掌握wimlib的基本使用方法,可以涵盖以下内容: 第一部分:wimlib介绍
第二部分:基础知识
第三部分:wimlib安装与配置
第四部分:wimlib命令行工具(wimlib-imagex)基础
第五部分:wimlib进阶操作
第六部分:wimlib应用实例与场景
第七部分:问题排查与资源
通过这个大纲,初学者可以系统地学习wimlib的基本概念、安装配置、基本操作到进阶应用,逐步掌握如何利用wimlib进行Windows系统映像的管理和维护。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
针对已经掌握了wimlib初级应用的用户,中级应用大纲将重点放在更高级的功能、优化技巧、自动化脚本编写以及问题解决上。以下是一个中级应用大纲的概览: 第一部分:高级功能与优化
第二部分:自动化与脚本编写
第三部分:跨平台高级应用
第四部分:性能与安全性增强
第五部分:故障诊断与高级问题解决
第六部分:实战案例研究
通过此中级大纲的学习,用户将能够更深入地掌握wimlib的高级功能,提升自动化操作的效率,解决复杂问题,并在实际工作中灵活运用wimlib进行高级系统映像管理与部署。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
针对wimlib的高级应用,下面的大纲将深入探讨高级特性、性能优化、自动化脚本的高级编程、安全策略、以及针对特定场景的高级问题解决与策略制定。此大纲旨在帮助用户精通wimlib,以应对复杂系统部署、大规模管理、以及高级定制化需求。 第一部分:高级特性和定制功能
第二部分:性能优化与大规模部署
第三部分:自动化与脚本编程高级技巧
第四部分:安全性与合规性
第五部分:高级问题解决与故障排除
第六部分:前沿技术与未来趋势
通过以上高级应用大纲的学习,用户不仅能掌握wimlib的高级功能,还能将其应用于复杂的系统管理、大规模部署环境,以及高度定制化和安全合规的场景中,成为wimlib领域的专家。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
专家级的wimlib应用大纲进一步深化了对wimlib的掌握,涵盖了最前沿的技术实践、性能极致优化、安全防御体系构建、以及高级脚本编写与自动化运维的策略。此大纲面向需要处理极端复杂场景、追求极致效率与安全性的专业人士。 第一部分:极限性能与优化
第二部分:安全防御与合规性深化
第三部分:自动化运维与DevOps高级实践
第四部分:高级故障排查与应急响应
第五部分:前沿技术探索与创新应用
通过专家级wimlib应用大纲的学习,您将能够站在技术前沿,解决最复杂的问题,设计和实施高度安全、高效且自动化的WIM映像管理系统,满足未来IT环境的挑战与需求。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
顶尖级wimlib应用大纲旨在为高级IT专家、架构师和研发团队领导者提供深入洞见,以应对最前沿的技术挑战、创新应用开发和优化策略,特别是在大规模部署、超大规模数据处理、以及尖端技术集成方面。以下是顶尖级应用大纲概览: 第一部分:超大规模数据与高性能计算
第二部分:未来技术融合与创新
第三部分:安全与合规性深度实施
第四部分:极限自动化与无人值守运维
第五部分:未来导向的系统设计与战略规划
通过顶尖级wimlib应用大纲的学习,您不仅能够驾驭最前沿的技术挑战,还将成为引领行业创新、制定未来标准的领航者,为企业在数字化转型、大规模IT运维、以及全球市场扩张中提供坚实的技术支撑。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
使用 WIMLIB 进行多线程 VSS 备份和还原的示例命令: 备份示例bashCopy Code
恢复示例bashCopy Code
确保以管理员权限运行这些命令,以便 WIMLIB 能够访问 VSS。 |
简介 wimlib 是一个自由开源软件,适用于类UNIX系统和Windows。这个文件提供了关于wimlib的Windows版本及其附带的命令行工具wimlib-imagex的额外信息。它并不取代通用的README文件,你也应该阅读那份文档。
Windows发行版 wimlib的Windows发行版是一个ZIP文件,包含以下项目:
wimlib-imagex.exe:一个命令行工具,用于处理WIM(.wim)、分割WIM(.swm)和ESD(.esd)文件,灵感来源于微软的ImageX和DISM。这是一个可以直接运行的可执行文件,而不是安装程序。- 非常简短的批处理脚本(例如
wimapply.cmd),它们是对应wimlib-imagex命令(例如wimlib-imagex apply)的快捷方式。 - 以DLL格式提供的库本身(
libwim-15.dll)。wimlib-imagex.exe需要这个文件才能运行。 - 文档,包括此文件、通用README以及doc文件夹中的wimlib-imagex PDF文档。
- 包含所有软件的许可文件。这些都是自由软件许可证。
COPYING.txt是主要的许可证,并且引用了COPYING.GPLv3.txt和COPYING.LGPLv3.txt。其他许可证针对的是库中包含的第三方软件。 - 开发文件位于devel文件夹中。只有在开发使用wimlib的C或C++应用程序时才需要这些文件。
请注意,对于32位i686和64位x86_64二进制文件有单独的ZIP文件。两者都完全支持,但尽可能选择64位二进制文件,因为它们可以明显更快。
wimlib-imagex wimlib-imagex支持微软ImageX的大部分功能,以及一些DISM支持但ImageX不支持的功能。wimlib-imagex还支持某些ImageX和DISM都不支持的功能。与ImageX和DISM相比,wimlib-imagex的一些优势包括:
- wimlib-imagex提供“extract”和“update”命令,允许你无需挂载即可快速处理WIM镜像。
- wimlib-imagex提供了一个易于使用的“optimize”命令,可以从WIM文件中移除浪费的空间,并可选地用更强的压缩重新压缩。
- wimlib包含了所有WIM文件中使用的压缩算法的高级实现。通常它们比微软的相应实现具有更好的性能和更高的压缩率。
- wimlib-imagex支持实体WIM文件和LZMS压缩,例如在ESD(.esd)文件中使用的。(最近的DISM版本部分支持这些,但ImageX不支持。)
- wimlib-imagex支持对活动的Windows系统进行成像。只需使用
--snapshot选项。 - 在许多情况下,wimlib-imagex比ImageX或DISM具有更简单的命令行语法。
- 尽可能地,wimlib-imagex提供了比微软软件改进的文档和信息输出。
- wimlib和wimlib-imagex是自由软件,因此你可以修改和/或审查源代码。
然而,与ImageX和DISM相比,wimlib-imagex的一些限制包括:
- 在Windows上,wimlib-imagex不支持挂载WIM镜像。
- wimlib-imagex没有意识到Windows“包”的概念。
附加说明 建议在脚本中使用wimlib-imagex,以避免交互式输入命令。但是,请注意wimlib-imagex主要是wimlib的一个命令行前端,也可以在其他前端或应用程序中使用wimlib的API。目前还没有官方图形用户界面可用。不过,Wimlib-clc是一个非官方的仅限于Windows的wimlib-imagex图形用户界面。
从源码构建 与其他开源软件一样,高级用户可以选择从源码构建wimlib,可能还会自定义它。当前,wimlib依赖于MinGW-w64来支持Windows;Visual Studio不受支持。可以在Linux上交叉编译Windows二进制文件,或者使用MSYS2或Cygwin在Windows上构建。以下指令展示了MSYS2方法。
首先,通过msys2.org上的安装程序安装MSYS2。
然后,打开任何MSYS2 shell并运行以下命令:
1pacman -Syu --noconfirm
之后,再次打开任意MSYS2 shell并运行以下命令:
1pacman -Syu --noconfirm git
2git clone https://wimlib.net/git/wimlib
注:默认情况下,git仓库将位于master分支,这是最新的开发快照。如果需要,你可以检出特定版本,例如cd wimlib && git checkout v1.14.4。对于旧版本,请参考该版本的文档,因为事情可能已经发生了变化。也可以使用发布tarball(如wimlib-1.14.4.tar.gz)代替git仓库。
最后,要实际进行构建,关闭你打开的MSYS2 shell,然后从开始菜单中打开以下之一:
- “MSYS2 MINGW64” - 对于使用gcc构建的x86_64二进制文件
- “MSYS2 CLANG64” - 对于使用clang构建的x86_64二进制文件
- “MSYS2 MINGW32” - 对于使用gcc构建的i686二进制文件
- “MSYS2 CLANG32” - 对于使用clang构建的i686二进制文件
- “MSYS2 CLANGARM64” - 对于ARM64二进制文件(实验性)
(如果不确定,使用“MSYS2 MINGW64”。)然后运行以下命令:
1cd wimlib
2tools/windows-build.sh --install-prerequisites
脚本将自动下载并在所选的MSYS2环境中安装构建wimlib所需的软件包,然后构建wimlib。输出将在类似于wimlib-1.14.4-windows-x86_64-bin的文件夹中。请注意,在MSYS2中,默认的“home”文件夹是C:\msys64\home\%USERNAME%。因此,输出文件夹的完整路径将类似于C:\msys64\home\%USERNAME%\wimlib\wimlib-1.14.4-windows-x86_64-bin。
wimlib 版本说明
版本 1.14.4
- 修复了在写入 WIM XML 数据时可能导致崩溃的问题,该问题在 v1.14.0 中引入。
- 改进了一些文档。
- 修复了 Windows 构建脚本,以避免在使用 MSYS2 MINGW32 或 MSYS2 MINGW64 构建时出现不必要的 DLL 依赖。
版本 1.14.3
- 修复了在 v1.14.0 中引入的一个错误,导致图像名称和描述中不再接受非 ASCII 字符。该错误仅影响使用 signed char 的类 UNIX 系统,例如 x86 Linux 系统。
版本 1.14.2
- 修复了在 v1.14.0 中引入的一个错误,导致 Delphi 应用程序或 Visual Studio 编译的应用程序调用库的 32 位 x86 版本时偶尔崩溃。
- 修复了一个问题,其中 wimlib 写入的某些 WIM 映像未被某些 Microsoft 软件版本接受。wimlib 写入的包含目录重解析点(例如连接点)的 WIM 映像未被某些版本的 Windows 8 安装向导接受。此外,最近版本的 DISM 停止接受包含命名数据流的目录的 wimlib 写入的 WIM 映像。
- 现在传递给 wimupdate 的标准输入命令被解释为 UTF-8 或 UTF-16LE(自动检测),与 wimcapture 配置文件和 wimextract 路径列表文件相同。之前在 Windows 上使用的是 Windows 代码页,而不是 UTF-8,这使得在 wimupdate 命令中指定非 ASCII 文件路径变得困难。相同的更改也适用于 wimcapture 源列表文件。
版本 1.14.1
- 修复了在 v1.14.0 中引入的一个错误,导致 wimlib 在较旧的 CPU 上崩溃。
版本 1.14.0
- 移除了 libxml2 和 libcrypto(OpenSSL)作为 wimlib 的依赖。还在 Windows 上移除了 winpthreads 作为 wimlib 的依赖。
- 将在 Linux 上挂载 WIM 映像的支持从 fuse2 升级到 fuse3。fuse2 不再被支持。
- 将 README、README.WINDOWS 和 NEWS 文件转换为 Markdown 格式。
- 简化了在 Windows 上构建 wimlib 的过程。请参阅 README.WINDOWS 以获取更新的说明,使用 MSYS2 而不是 Cygwin。现在还支持 Windows ARM64 构建(实验性)。
- 在 wimlib 未使用 OpenSSL 的情况下,改善了在具有 SHA-1 指令的 CPU 上的性能,例如 Windows 二进制文件。
- 修复了 wimsplit 中的一个错误,该错误导致在 Windows 和 32 位平台上不接受 4 GiB 或更大的部分大小。
- wimupdate 现在支持 --ref 选项。更新增量 WIM 时应指定此选项,以避免两个小问题。
- wimoptimize 在转换为和从固态档案时(即 WIM <=> ESD)具有更好的默认行为。现在它与 wimcapture 和 wimexport 一致。对于 WIM => ESD,wimoptimize --solid 现在有效。之前需要的命令是 wimoptimize --solid --compress=LZMS --chunk-size=128K。对于 ESD => WIM,wimoptimize --compress=LZX 现在有效。之前需要的命令是 wimoptimize --compress=LZX --chunk-size=32K。
- 移除了对 Windows XP 的支持。
- 增加了一个 GitHub Actions 工作流,用于测试 wimlib。
版本 1.13.6
- wimsplit 失败时不再打印成功消息。
- wimlib_iterate_dir_tree() 不再对尚未写入 WIM 文件的文件进行哈希。
- 减少了在 macOS 上从 WIM 映像提取文件时 wimlib 可使用的最大文件描述符数量。
- 使用 CC0 公共领域献辞的文件现在改为使用 MIT 许可证。
- 移除了一些可能未被使用的配置选项(--disable-assertions、--disable-error-messages 和 --disable-multithreaded-compression)。
版本 1.13.5
- 从 WIM 文件导出“所有”映像时,如果多个映像同名将不再失败。
- wimlib 现在在两个文件具有相同 SHA-1 哈希但大小不同的情况下发出警告,而不是中止。
- 修复了与最新版本的 MinGW-w64 相关的构建错误。
版本 1.13.4
- wimsplit 现在定期打印进度消息,而不是每个 WIM 部分只打印一次。
- 增加了数据恢复模式的支持,即使文件损坏也会被提取。选项为 wimapply 和 wimextract 的 --recover-data,以及库的 WIMLIB_EXTRACT_FLAG_RECOVER_DATA。请注意,此选项对所有类型的损坏无效;某些类型的损坏仍会导致致命错误。
版本 1.13.3
- 在 Windows 上,在某些情况下改善了捕获整个驱动器的性能。
- 在 Windows 上,修复了引用 WIM 文件时泄漏目录句柄的问题(或在调试器下触发 SEH 异常)。
- 在 Windows 上,使用 --compact 标志应用 Windows 操作系统映像时,如果 Windows 版本足够新,启动加载程序文件现在可以使用更强的压缩算法进行压缩。
- 澄清了许可证文本。
版本 1.13.2
- 由于 gcc 错误,防止在 -O3 下发生错误编译。
- 避免了 gcc 9 及更高版本的一些编译器警告。
- mkwinpeimg 脚本现在也会在 /usr/share/syslinux 中查找 syslinux 模块,以处理 openSUSE 的安装位置。
- 从源树中移除了过时的打包文件。
版本 1.13.1
修复了在 LZMS 压缩级别大于 50 和块大小大于 64 MiB 时发生的崩溃或错误输出。这影响了 wimlib v1.8.0 及更高版本。如果您以非默认的压缩设置组合使用,例如 wimcapture --solid --solid-compress=LZMS:100 --solid-chunk-size=128M,请运行 wimverify 验证您的档案数据是否完整。
版本 1.13.0
在 Windows 上,wimlib 现在支持捕获和应用扩展属性(EAs)。它与 DISM 的 /EA 选项兼容,该选项自 Windows 10 版本 1607 起可用。wimlib 的 EA 支持默认启用,并且在旧版本 Windows 上也能工作。
部分修复了一个 bug,该 bug 导致当包含目录被 [ExclusionList] 匹配时,[ExclusionException] 条目无效。现在当 [ExclusionException] 模式是绝对路径时可以正常工作。例如,即使 /dir 被 [ExclusionList] 匹配,列出 /dir/file 也能正常工作。
为 wimappend 添加了 --create 选项,如果 WIM 文件尚不存在,则会创建该文件(类似于 wimcapture)。
为各种 wimlib-imagex 命令添加了 --include-integrity 选项。--include-integrity 类似于 --check,但只会在输出 WIM 中包含完整性表,而跳过对任何现有完整性表的验证。这在避免对大 WIM 文件(例如通过 --delta-from 提供的 WIM)进行不必要的验证时非常有用。
wimextract 现在在给定 @- 作为参数时,从标准输入读取路径列表文件。
wimsplit(API: wimlib_split())现在正确处理第一个拆分 WIM 部分路径中的点,位于文件名扩展之前。
wimlib-imagex --version 现在显示实际使用的库版本(如果与 wimlib-imagex 的版本不同)。
版本 1.12.0
修复了一个 bug,该 bug 导致 LZMS 解压缩器在 GCC 7 下被错误编译(这影响了提取“固态”档案)。
Windows 10 回收站目录($RECYCLE.BIN)已添加到默认排除列表。
为 wimlib-imagex 添加了 --quiet 选项。
mkwinpeimg 脚本现在还会在目录 /usr/lib/syslinux/modules/bios 中查找 syslinux BIOS 模块。
时间戳在 1970 年之前的文件现在可以正确提取到 UNIX 风格的文件系统中,wimdir --detailed 正确显示,并在挂载的 WIM 映像中正确显示。
时间戳在 2038 年之后的文件现在在 wimlib 的 32 位 Windows 构建中正确显示。
版本 1.11.0
修复了一个数据损坏的 bug(压缩不正确),当将已经高度压缩的文件存储在块大小大于或等于 64K 的 LZX 压缩 WIM 中时。请注意,这不是默认设置,这种 WIM 不受微软 WIM 软件的支持,因此仅使用了 --chunk-size 选项的用户可能受到影响。此 bug 是在 wimlib v1.10.0 中引入的,更多详细信息请查看此论坛帖子。
在所有平台上,稀疏文件现在以稀疏形式提取。
从 UNIX 风格文件系统捕获的稀疏文件现在在生成的 WIM 映像中标记为稀疏。
添加了在 WIM 映像中存储 Linux 风格扩展属性的支持。当在 Linux 上使用 --unix-data 选项时,wimlib-imagex 现在捕获并应用扩展属性,以及已经支持的标准 UNIX 文件权限(所有者/组/模式)和特殊文件。
--delta-from 现在被 wimappend 支持。(之前仅由 wimcapture 支持。)
在 Windows 上,改进了与 Windows 数据去重功能一起捕获的文件的方式。
现在在 Windows 发行档案中包含了链接 wimlib 所需的开发文件。
wimlib.h 现在可以在 Visual Studio 中无错误地包含。
示例程序现在可以在 C++ 模式下编译,并且现在可以在 Windows 上运行。
更新了 mkwinpeimg,使其能够正确处理具有小写 "windows" 目录的映像,而不是大写 "Windows" 目录。
修复了从发布压缩包中使用 --enable-ssse3-sha1 配置时缺少文件 nasm_lt.sh 的问题。
进行了一些文档改进。
版本 1.10.0
LZX 压缩比略有改善。默认模式 LZX 级别 50 现在几乎和旧的 LZX 级别 100 一样好,同时速度几乎与之前相同。
解压性能略有提高。
文件名现在总是按 NTFS 排序顺序列出。
在类 UNIX 系统上,wimlib 现在可以处理由于存在未配对的代理字符而导致的无效 Unicode 的 Windows 文件名。
在类 UNIX 系统上,wimlib 现在始终假定使用 UTF-8 编码,并添加了代理代码点。因此,环境变量 WIMLIB_IMAGEX_USE_UTF8 和标志 WIMLIB_INIT_FLAG_ASSUME_UTF8 不再有效。
wimlib 不再依赖 iconv。
内存使用量略有减少。
当在 NTFS-3G 模式下应用 WIM 映像时,如果卷支持,安全描述符现在将以 NTFS v3.0 格式创建。
已删除对 libntfs-3g 版本 2013.1.13 及更早版本中漏洞的解决方法。建议用户升级到较新版本的 libntfs-3g。
在 Windows 上,wimlib 现在支持在底层操作系统和文件系统支持的情况下进行区分大小写的文件名提取(操作系统支持需要注册表设置)。
版本 1.9.2
在 UNIX 上,wimlib 现在可以在提取时覆盖只读文件。
在 Windows 上,修复了一个漏洞,使得 wimlib 在提取后可能会在某些现有目录上留下空的 DACL(即“无 NTFS 权限”)。
在 Windows 上,当在“WIMBoot 模式”下应用 WIM 映像且 WOF 驱动未加载时,wimlib 现在可以正确地在目标卷上注册新的 WIM 文件,当目标卷之前已经取消注册了 WIM 文件时。
添加了一个新的测试程序。
澄清了主要许可文本,并更新了某些文件的公有领域声明,以更为详尽。
版本 1.9.1
在 Windows 和 NTFS-3G 模式下,现在保存和恢复对象 ID。
导出大量 WIM 图像时,内存使用量有所减少。
非 UTF-8 区域现在正确检测。
解决了编译器警告,并默认启用了“静默”编译规则。
Windows 特定更新:
修复了提取符号链接和连接点时可能生成重复反斜杠的错误。
修复了如果 .cmd 快捷方式的完整路径包含空格时无法工作的错误。
修复了与扫描 SMB 文件系统相关的错误。
添加了有关 WindowsApps 文件夹已知问题的警告信息。
添加了在 Windows 上从源代码构建的说明。
VSS 支持不再标记为“实验性”。
添加了 libdivsufsort-lite 的缺失许可证文件。
版本 1.9.0
增加了对 Windows VSS(卷影复制服务)的实验性支持。新的 --snapshot 参数使 wimlib 在捕获 WIM 图像时自动创建和使用临时 VSS 快照。
实现了设置 Windows 特定的 XML 信息,例如架构、系统根目录和版本详细信息。在适当时,这些信息现在会自动设置在新捕获的 WIM 图像中。
改善了在 Windows 上目录树扫描的性能。
为了提高捕获性能,wimlib 现在有时按 inode 编号而非路径打开文件。这一功能适用于 wimcapture 和 wimappend,但其他应用目前需手动启用。
wimlib-imagex 在写入 WIM 文件时打印的进度消息稍作调整。
目录树扫描的进度信息现在计算所有硬链接。此外,在 Windows 上,当前路径中的 \?\ 不再被去除。
为 wimcapture、wimappend 和 wiminfo 添加了新的 --image-property 选项。该选项允许您按名称为 WIM 文件的 XML 文档中的元素分配值。
wimlib_get_image_property() 和 wimlib_set_image_property() API 函数现在支持数值索引的元素。
修复了在 Windows 上,即使指定了 --no-acls 选项,wimlib 仍会更改提取目标目录的安全描述符的错误。
版本 1.8.3
修复了自 v1.8.1 以来存在的 libntfs-3g 解压缩错误。有时,一些 Microsoft 软件无法正确识别生成的文件系统中的数据。
对压缩算法进行了小幅改进:
- LZX 压缩比略有提升。
- XPRESS 压缩比和速度略有提高。
- LZMS 压缩速度略有提高。
改善了对 WIM XML 数据的处理。wimlib 现在在导出映像时不再丢弃未识别的元素。此外,新增了两个 API 函数以便更好地访问 XML 文档中的元素:wimlib_get_image_property() 和 wimlib_set_image_property()。
新增对 WIM 文件(不安全)的就地压缩支持。
通过重用元数据资源而不是每次都重建和重新压缩,改善了映像导出的性能。
通过延迟更新 WIM 的 XML 文档,直到请求写入,改善了 wimlib_update_image() 的性能。
在 Windows 上,提取目标现在可以是重新解析点(将被取消引用)。
在 Windows 上,wimlib 现在能够正确恢复非 Microsoft 的重新解析点。不过,由于 libntfs-3g 的错误,这在 NTFS-3G 模式下仍然存在问题。
在 Windows 上,wimlib 在从 WIM 支持的文件系统归档文件时,性能得到了改善(“WIMBoot” 设置)。
对系统压缩(紧凑模式)支持进行了多项改进:
- wof.sys(或 wofadk.sys)现在在需要时自动附加到目标卷。
- 在旧版本 Windows 上,紧凑模式提取现在与 wofadk.sys 正常工作。
- 为了兼容 Windows 引导加载程序,某些文件的请求压缩格式现在被覆盖。
其他一些小错误修复。
版本 1.8.2
该版本主要包含各种小错误修复和改进,包括:
- 改善了对深层目录结构的处理。
- 修复了在 32 位系统上,如果 WIM 文件以特定方式损坏,库可能会进入无限循环的错误。
- 为 libntfs-3g 可能报告 NTFS 文件中重复流的情况添加了变通方法。
- 现在,挂载的 WIM 映像中的 Windows 符号链接和连接点会自动重写为在挂载位置有效。
- 重新解析点修复:正确处理“ReparseReserved”字段,并正确处理“空”(无数据)重新解析点。
- 在 Windows 上,wimlib 现在获取 SeManageVolumePrivilege 权限,这是使用 wofadk.sys 驱动程序创建外部备份文件所需的。
- 改善了文件名验证。
- 改进了 LZMS 解压缩速度。
- 配置脚本现在遵循替代的 pkg-config 设置。
- 链接已更新以指向新网站。
此外,还为在 Windows 10 上使用系统压缩压缩提取的文件添加了实验性支持。此功能通过新的 --compact 选项提供给 wimapply 和 wimextract 以及新的库标志。
版本 1.8.1
修复了 LZX 解压缩器中的一个漏洞:恶意输入数据可能导致越界写入内存(自 wimlib v1.2.2 起)。
wiminfo 命令的输出现在将各种布尔标志(如“相对路径连接点”)合并为一行。
现在,文件可以同时具有未命名的数据流(“文件内容”)和重新解析点流。这些文件可能是由于使用某些 Windows 功能(如离线存储,包括“OneDrive”)而存在的。wimlib 现在将在 Windows 及 NTFS-3G 模式下存储和恢复这两个流。微软的 WIMGAPI 也具有此行为。
在 Windows 上,已加密文件的命名数据流不再在 WIM 存档中重复存储。
在 Windows 上,命名数据流现在可以正确提取到现有的“只读”目录中,之前会报错。
在 Windows 上,现在可以对非独立的 WIM(如增量 WIM)进行“WIMBoot 模式”提取。
在 Windows 上,进行“WIMBoot 模式”提取时,超过 4GB 的文件不会再被提取为外部备份。这解决了微软“WOF”驱动程序中的一个错误。
已删除 --enable-verify-compression 配置选项。如果您想验证 WIM 文件,请使用 wimverify 程序。
“文件计数”、“目录计数”、“总字节数”和“硬链接字节数”等映像统计信息(存储在 WIM XML 数据中)的计算方式已略有调整。
在挂载的 WIM 映像中,每个文件提供的磁盘使用量(st_blocks)现在是压缩后的大小,而不是未压缩的大小。
NTFS-3G 和 Windows 捕获模式的性能略有提高。
在类 UNIX 系统中,目标包含反斜杠字符的符号链接现在被正确处理(无损)。
版本 1.8.0
改进了 LZX 压缩器。现在比之前快 15-20%,并提供了稍好的压缩比。
改进了 LZMS 压缩器。现在提供的压缩比略好于 WIMGAPI,同时速度更快,内存占用略少。
在使用 --solid 选项捕获或导出 WIM 文件时,固态资源中的压缩块大小现在默认为 64 MiB(67108864 字节),而不是 32 MiB(33554432 字节)。这提供了更好的压缩比,并与 WIMGAPI 使用的值相同。内存使用量比 wimlib v1.7.4 高不到 50%,且略低于 WIMGAPI 的内存使用量,但如果使用过多,仍可以选择更低的值,例如使用 --solid-chunk-size 选项。
wimlib-imagex 的 --chunk-size 和 --solid-chunk-size 选项现在接受 'K'、'M' 和 'G' 后缀。
在创建固态 WIM 文件时,文件现在按名称扩展名排序。
修复了与 Windows 上 EFS 加密文件的捕获/应用相关的各种问题。
wimdir 打印的文件列表现在按平台特定的大小写敏感设置排序,而不再始终大小写敏感。这也影响了库函数 wimlib_iterate_dir_tree()。
在 Windows 上,一些错误和警告消息得到了改进。
版本 1.7.4
Windows 二进制分发不再包含第三方 DLL。这些依赖项直接编译到 libwim DLL 中。
针对 ARM 等非 x86 架构的 wimlib 进行了更多修复。
将文件提取到 Windows PE 内存文件系统时,如果目标文件尚不存在,将不再失败。
提高了 XPRESS 压缩和 LZMS 解压缩的性能。
在 x86_64 Windows 构建中启用了 SSSE3 加速的 SHA-1 计算。它将在较新的 Intel 和 AMD 处理器上自动更快。
移除了 --with-imagex-progname 和 --enable-more-assertions 配置选项。
版本 1.7.3
修复了从固态 WIM/ESD 文件导出非常缓慢的问题。
修复了非 x86 架构(如 ARM)上的 LZX 和 LZMS 算法。
新增进度消息:WIMLIB_PROGRESS_MSG_HANDLE_ERROR。应用程序可以使用此消息将某些类型的错误视为非致命错误。
现在库允许对由只读 WIM 文件支持的 WIMStruct 进行内存更改。
针对 "WIMBoot" 提取模式(仅限 Windows)的修复:
当不使用 WOF 驱动程序时,如果包含 WIM 文件的磁盘有太多分区,提取将不再失败。
在 [PrepopulateList] 中匹配模式时,现在考虑每个文件的所有硬链接。
系统注册表文件现在自动被视为在 [PrepopulateList] 中。
添加了一种 hack,试图解决微软 WOF 驱动程序中的间歇性错误。
版本 1.7.2
对 XPRESS、LZX 和 LZMS 压缩器进行了更多改进。
对 Windows 移植进行了一些改进:
修复了设置短文件名的问题。
加快了 "WIMBoot" 提取速度。
更新并精简了依赖 DLL。
现在恢复 ACL 继承位。
强制完整性标签现在得到备份和恢复。
为解决一个罕见情况下 wimlib 创建无法被 Windows 正确读取的压缩数据流的问题,添加了一个解决方法。
库的更改:
为 WIMLIB_PROGRESS_MSG_EXTRACT_FILE_STRUCTURE 和 WIMLIB_PROGRESS_MSG_EXTRACT_METADATA 添加了文件计数进度数据。
添加了通过用户提供的进度函数测试文件排除的支持。
一些文档改进。
对 COPYING 文件中的许可文本进行了一些澄清。
版本 1.7.1
对 XPRESS、LZX 和 LZMS 压缩器进行了更多改进。
wimcapture 的默认压缩模式现在为 LZX 默认模式,与 --compress=maximum 相同。
现在可以在 --compress 选项中指定一个可选的整数压缩级别;例如 --compress=lzx:75。
对 LZMS 压缩器和解压缩器进行了小幅修改,以修复与 Microsoft 实现的不兼容问题。如果您使用 wimlib v1.7.0 或更早版本创建了 LZMS 压缩的 WIM,并在使用 wimlib v1.7.1 解压缩时报告了校验和错误,请先用 v1.7.0 解压缩,然后再用 v1.7.1 压缩。
为 wimlib-imagex 添加了 verify 子命令。
显著的库更改:
自定义压缩参数已从库中移除,改为更简单的基于级别的 API。
解压缩器参数已完全移除。
库用户现在可以指定一个自定义文件,以接收警告和错误消息,而不是默认的标准错误。
新增进度消息:WIMLIB_PROGRESS_MSG_EXTRACT_FILE_STRUCTURE、WIMLIB_PROGRESS_MSG_EXTRACT_METADATA。
新增功能:wimlib_verify_wim()。
版本 1.7.0
改善了压缩、解压缩和提取性能。
提高了与版本 3584 WIM / ESD 文件的兼容性:
增加了对每个归档读取和写入多个固态块的支持,WIMGAPI/DISM 在附加映像时可以创建这些块。
正确创建大于 4 GiB 的固态块。
添加的命令将默认替换现有的非目录文件。使用 --no-replace 选项可恢复旧行为。
库的许可证现在包含一个例外,允许在 LGPL 下使用。详细信息见 COPYING 文件。
在重新解析点修复模式下(捕获的默认模式),指向捕获树外部的符号链接和连接点不再被排除在捕获之外。
增加了对 "WIMBoot" 捕获和提取的支持。有关新选项 --wimboot 的更多信息,请参阅 wimcapture 和 wimapply 的文档。
在类 UNIX 系统上,现在可以备份和恢复设备节点、命名管道和套接字。此外,现在支持 32 位的用户和组 ID。
UNIX 数据在 WIM 文件中的存储方式已更改。如果您使用 --unix-data 选项捕获了任何 WIM,您需要使用 wimlib-imagex v1.6.2 通过 --unix-data 选项进行应用,然后使用此版本重新捕获它们。
wimlib 现在可以理解可以存储在 WIM 目录条目中的带标签元数据项,如对象 ID。
已移除 wimapply 的 --hardlink 和 --symlink 选项,因为我认为它们并不太有用,并且影响了代码的改进。
重建 WIM 时(例如通过 wimoptimize),WIM 将保留其 GUID。
mkwinpeimg 脚本现在支持将 ISO 镜像写入标准输出。
WIM XML 数据中的 <ARCH> 元素现在正确导出。
在 Windows 上,提取的文件不再设置稀疏文件属性。有趣的是,这在某些情况下实际上节省了磁盘空间。
在 UNIX 上,使用 --disable-xattr 或 --enable-xattr 的配置不再受支持。挂载 WIM 镜像现在始终需要扩展属性支持。使用 --without-fuse 禁用挂载 WIM 镜像的支持;这也会禁用对扩展属性支持的需求。
使用 --enable-ssse3-sha1 现在可以正确工作。
共享库版本已升级。主要的不兼容性有:
WIMLIB_COMPRESSION_TYPE_XPRESS 现在为 1,WIMLIB_COMPRESSION_TYPE_LZX 现在为 2(与 WIMGAPI 相同)。
用户提供的进度函数现在使用单独的函数 wimlib_register_progress_function() 注册。许多函数中的 progress_func 参数不再存在。
用户提供的进度函数的返回值现在具有重要意义。
已向用户提供的进度函数的原型添加了上下文参数。
struct wimlib_capture_config 已被移除。库现在直接接受配置文件的路径。这影响到 wimlib_add_image()、wimlib_add_image_multisource() 和 wimlib_update_image()。不过,传入 NULL 值保持相同含义。
移除已弃用的函数:某些(解)压缩函数、wimlib_extract_files() 和 wimlib_print_metadata()。
移除提取标志:WIMLIB_EXTRACT_FLAG_HARDLINK、WIMLIB_EXTRACT_FLAG_SYMLINK、WIMLIB_EXTRACT_FLAG_FILE_ORDER 和 WIMLIB_EXTRACT_FLAG_SEQUENTIAL。
移除了一些进度消息:WIMLIB_PROGRESS_MSG_APPLY_TIMESTAMPS、WIMLIB_PROGRESS_MSG_EXTRACT_DIR_STRUCTURE_BEGIN 和 WIMLIB_PROGRESS_MSG_EXTRACT_DIR_STRUCTURE_END。编号保持不变。
移除了一些错误代码。编号保持不变。
用 WIMLIB_UNMOUNT_FLAG_FORCE 替换了 WIMLIB_UNMOUNT_FLAG_LAZY。
传递给进度函数的 WIM 路径现在以斜杠开头。
版本 1.6.2
对包含 UTF-16 编码点(高于 32767)的字符串(如文件名)进行的大小写不敏感比较现在已正确执行。
修复了在 Mac OS X 上的构建失败。
wimunmount 现在提供 --new-image 选项,将对可读写挂载镜像的更改作为新镜像提交,而不是更新挂载镜像。(相应的新库标志为 WIMLIB_UNMOUNT_FLAG_NEW_IMAGE。)
LZMS(“恢复”)压缩块大小或“字典大小”现在最多可达 1 GiB(1,073,741,824 字节)。
LZX(“最大”)和 LZMS(“恢复”)压缩在大块大小下的性能略有提升。
版本 1.6.1
大小恰好为 4 GiB(4,294,967,296 字节)的存储文件现在已正确解压缩。
修复了在 v1.5.3 中引入的 LZX 压缩器的一个 bug。该 bug 在不太可能的情况下发生,由于有效性检查,它不会影响成功创建的归档。
修复了 LZMS 压缩器和解压缩器的小兼容性问题。此压缩类型不是默认类型,仅在 v1.6.0 中引入。如果您在 v1.6.0 中创建了 LZMS 压缩的 WIM,并在使用 v1.6.1 应用时报告校验和错误,请先使用 v1.6.0 解压缩,然后用 v1.6.1 进行压缩。
LZMS 和 LZX 压缩的内存使用量已减少。
wimextract 现在允许在命令行中指定路径时使用通配符。此外,--strict-wildcards 选项已被删除,替换为反向选项 --nullglob。有关更多详细信息和更改,请参见 wimextract 文档。
wimlib_extract_files() 函数现在被视为弃用,推荐使用 wimlib_extract_paths()。
修复了在 Windows 上提取文件时的更多权限问题。
wimapply 和 wimextract 新增了 --no-attributes 选项。库标志为 WIMLIB_EXTRACT_FLAG_NO_ATTRIBUTES。
在更改 WIM 的压缩类型时(例如使用 wimoptimize),默认块大小现在设置正确。
wiminfo 的 --metadata 选项已被 --detailed 选项替换,适用于 wimdir。
在相关的 wimlib-imagex 命令中,--solid 现在可以作为 --pack-streams 的别名使用。
版本 1.6.0
增加了对提取和更新新版本 3584 WIM 文件的支持。这些 WIM 文件通常将多个流(“文件”)打包成一个单一的压缩资源,从而节省空间。这虽然降低了随机访问性能(如在挂载镜像时的访问),但已经对提取进行了优化。这些新 WIM 文件通常使用新的压缩格式(LZMS),该格式与 LZMA 类似,提供的压缩比优于 LZX。可以使用 wimcapture 命令结合 --compress=lzms --pack-streams 选项创建这些新 WIM 文件。注意:这种新 WIM 格式由 Windows 8 的网络下载器使用,但原始 .esd 文件的重要部分是加密的,因此在解密之前,wimlib 无法提取这些文件。
wimlib 现在支持基于包含提取路径列表的“列表文件”从 WIM 镜像中提取文件和目录。对于 wimextract,语法为指定 @LISTFILE 而不是路径;对于库本身,新 API 为 wimlib_extract_pathlist() 和 wimlib_extract_paths()。支持包含通配符字符的路径模式。
在搜索 WIM 文件时,wimlib 现在支持可配置的大小写敏感性。Windows 上的默认设置仍为不区分大小写,而类 UNIX 系统上仍为区分大小写,但可以通过 wimlib_global_init() 的标志在任一平台上覆盖。对于 wimlib-imagex,环境变量 WIMLIB_IMAGEX_IGNORE_CASE 可以设置为 1 或 0,以分别实现不区分大小写或区分大小写的行为。
增加了对大于默认 32768 字节的压缩块大小的支持。较大的块大小通常能提供更好的压缩比。然而,MS 的实现似乎不兼容所有块大小,特别是在 LZX 压缩下,因此默认设置保持不变,新的 LZMS 压缩 WIM 文件默认使用较大的块大小。
wimlib 导出的压缩/解压缩 API 已被更改。现在一组函数处理所有支持的压缩格式。
wimcapture 和 wimappend 现在将显示扫描目录树以捕获的进度,以及写入 WIM 的数据进度。--verbose 选项不再有任何效果。对此的库 API 更改是向 struct wimlib_progress_info_scan 中添加了多个成员,以便于进度回调使用。
mkwinpeimg 现在正确处理当启动脚本不在工作目录时的 --start-script 选项。
顺序提取,之前通过使用 WIMLIB_EXTRACT_FLAG_SEQUENTIAL 请求,现在成为默认行为。可以使用 WIMLIB_EXTRACT_FLAG_FILE_ORDER 来获取旧的默认行为(按文件顺序提取)。
版本 1.5.3
在 v1.5.2 中新增的 LZX 压缩器已得到改进,默认启用,除非在未使用 --compress 选项的情况下运行 wimcapture 或 wimappend,此时将使用更快的 LZX 压缩器(与之前相同)。这种行为与默认使用“快速”(XPRESS)压缩的 ImageX 一致。在这些情况下,使用 --compress=maximum 明确捕获使用新 LZX 压缩器的 WIM 映像(虽然较慢但效果更好)。
--compress-slow 选项仍然存在于 wimlib-imagex optimize 中,但新行为是进一步调整新的 LZX 压缩器,以获得更好的压缩比,但需要花费更多的时间进行压缩。
wimlib-imagex optimize 现在支持 --compress=TYPE 选项,可使用指定的压缩类型重新压缩 WIM 文件。用于此目的的新库 API 函数是 wimlib_set_output_compression_type()。
新增了 wimlib_get_xml_data() 函数,允许库客户端在需要时轻松检索 WIM 文件中的原始 XML 数据。
修复了一个错误,该错误可能导致在写入包含 <WINDOWS> 元素的 XML 数据时返回错误代码不正确。
已挂载的 WIM 映像现在将正确显示默认文件流,即使它出现在相应 WIM 目录条目的替代数据流条目中。
版本 1.5.2
新增了一种实验性 LZX 压缩器,可以通过传递 --compress-slow 给 wimlib-imagex capture 或 wimlib-imagex optimize 来启用。(后者仅适用于 WIM 已经 LZX 压缩并且给定了 --recompress 选项时。)实验性压缩器速度较慢,但压缩效果略好——目前通常与 WIMGAPI/ImageX 的结果相差不到百分之一。
已添加兼容性修复,以解决错误解释启动 WIM 中的替代数据流条目的 WinPE 版本的问题。
修复了导致某些版本中 LZX 解压缩器崩溃的对齐错误。
wimlib 现在尝试在恢复未能成功更新的 WIM 的先前状态时清除 WIM 头中的 WIM_HDR_FLAG_WRITE_IN_PROGRESS 标志。
添加了一个解决方法,以避免在替换被其他进程打开的 WIM 文件时出现访问被拒绝的错误。
版本 1.5.1
wimlib 现在可以打开 WAIK v2.1 的 WinPE WIM,处理了其中的一个特例。
修复了 --update-of=[WIMFILE:]IMAGE 选项中负 IMAGE 索引解释的错误,适用于 wimlib-imagex capture 和 wimlib-imagex append。
添加了一个解决方法,以在使用 NTFS-3G 2013.1.13 或更早版本的 NTFS-3G 应用模式时成功应用空 DACL 的安全描述符。
wimlib-imagex capture 现在可以多次接受 --delta-from 选项。
版本 1.5.0
新增对“可管道”WIM 的支持。可管道 WIM 允许将镜像捕获到标准输出,并从标准输入应用镜像,但与微软的软件不兼容,默认情况下不会创建。有关更多信息,请参见 wimlib-imagex capture 的 --pipable 标志文档。
为了更好地支持增量备份,新增支持将镜像声明为另一个镜像的修改形式。请参见 wimlib-imagex append 和 wimlib-imagex capture 的 --update-of 选项文档。
新增对“增量”WIM 的支持。有关更多信息,请参见 wimlib-imagex capture 的 --delta-from 选项文档。
库对管理分割 WIM 的支持已更改,以支持其他安排,例如增量 WIM,并且更易于使用。此更改在 wimlib-imagex 中可见,现在它还可以多次接受 --ref 选项,并且支持上述的“增量”WIM。
wimlib 现在默认保留 WIM 完整性表,即使未指定 WIMLIB_WRITE_FLAG_CHECK_INTEGRITY。这改变了 wimlib-imagex 的行为,每当被操作的 WIM 包含完整性表且未指定 --check 选项时。
wimlib-imagex capture 现在默认创建 LZX 压缩的 WIM(当未指定 --compress 时)。这提供了最佳的压缩比,这通常是所需的,尽管会牺牲一些速度。
wimlib-imagex 现在支持以 wimCOMMAND 的形式调用,其中 COMMAND 是 wimlib-imagex COMMAND 中的命令;例如,可以作为 wimapply 调用,替代 wimlib-imagex apply。在 wimlib-imagex 的 UNIX 安装中会创建适当的硬链接,而在 Windows 发行版中,则生成模拟该行为的批处理文件。
现在安全描述符在 Windows 上正确提取。
修复了在 NTFS-3G 捕获模式下归档 DOS 名称的错误。
提取代码已重写,现在将更容易支持所有支持的后端(当前为 Win32、UNIX 和 NTFS-3G)上的新功能。例如,硬链接提取模式(--hardlink)现在在所有后端上都受支持,而不仅限于 UNIX。
mkwinpeimg 现在支持从 WAIK 附加包中抓取文件,而不是从 WAIK 本身。
wimlib_global_init() 现在默认尝试在 Windows 上获取额外权限,因此库客户端无需执行此操作。
此更新将共享库版本号提升至 9,因为它与以前版本不兼容。
版本 1.4.2
修复了 wimlib-imagex export 中的错误,使得无法从文件系统级别为只读的 WIM 导出镜像。
在尝试列出分割 WIM 的非第一个部分的文件时,返回错误代码,而不是出现段错误。
现在合并 WIM 时将保留 RP_FIX 和 READONLY 标志。
版本 1.4.1
在 Windows 上,传递给 wimlib-imagex 的路径现在不区分大小写。
改进了对无效文件名的处理;特别是在 Windows 上,wimlib-imagex 在提取时将省略(可通过选项覆盖此默认行为)仅在大小写上不同的文件名或包含 Windows 上无效字符的文件名。
在 Windows 上,wimlib 现在支持捕获和提取超长路径(超过所谓的 MAX_PATH)。
在 Windows 上,wimlib-imagex 更新现在在以管理员身份运行时会获取适当的权限。
当尝试更新多图像 WIM 时,如果未指定任何图像,wimlib-imagex 更新将会发出警告。
wimlib-imagex 更新现在支持使用 --command 选项直接在命令行上指定单个更新命令。
wimlib-imagex 将根据需要处理的数据量选择不同的进度消息单位。
如果未指定名称且默认名称已存在于 WIM 中,wimlib-imagex append 现在将生成唯一的 WIM 图像名称。
wimlib 现在允许创建无名的 WIM 图像,这些图像只能通过索引引用。
wimlib 现在允许您通过提供 WIMLIB_OPEN_FLAG_WRITE_ACCESS 标志给 wimlib_open_wim() 显式声明您希望对 WIM 具有写入权限。
wimlib 现在尊重在 WIM 头中设置的 WIM_HDR_FLAG_READONLY 标志。
在 wimlib 的 wimlib_update_image() 函数中添加了进度回调。
向库中添加了 wimlib_get_wim_info()、wimlib_set_wim_info()、wimlib_iterate_dir_tree() 和 wimlib_iterate_lookup_table() 函数。
NTFS-3G 捕获现在仅对先前被视为错误的两种情况发出警告。
修复了在 Windows 上使用 wimlib-imagex 处理 UDF 文件系统时的几个问题。
wimlib 现在能够正确检测并返回在读取具有循环目录结构的 WIM 图像时的错误。(趣事:这样的 WIM 会导致微软的软件崩溃。)
版本 1.4.0 为 wimlib-imagex 添加了新的“提取”和“更新”子命令,以及库中的相关 API。这些命令主要用于 Windows,但也可以在 UNIX 上使用。
进行了许多文档改进。
修复了 Windows 版本中的一个错误,导致相对符号链接在重解析点修复模式下未被捕获。
修复了 Windows 版本中的一个错误,导致文件句柄未关闭,导致 wimlib-imagex 优化在某些情况下失败。
修复了 Windows 版本中的一个错误,导致 globbing 分割的 WIM 部件可能导致程序崩溃。
修复了一个错误,显示 WIM 图像的创建时间而非最后修改时间。
在 Windows 版本中,现在可以在非管理员身份下恢复包含符号链接的 WIM;但会收到无法提取符号链接的警告。
版本 1.3.3 由于改进了操作系统缓存的使用,并尽量避免重复读取文件,现在捕获 WIM 图像的速度在大多数情况下显著提升。
Windows 版本现在应在 Windows XP 上正常工作。
Windows 版本现在支持捕获和恢复隐藏、压缩、稀疏和加密的文件。
Windows 版本现在支持从非 NTFS 文件系统捕获和应用 WIM 图像(功能有所减少)。
Windows 版本现在正确提取短名称。
添加了对“重解析点”修复的支持(即符号链接的修复)。请参见 wimlib-imagex capture 和 wimlib-imagex apply 的 --rpfix 和 --norpfix 标志的文档。
分割和合并 WIM 的性能有所改善。
LZX 和 XPRESS 压缩和解压缩函数现在已从库中导出。
版本 1.3.2 对 Windows 版本进行了改进和错误修复。
添加了 --strict-acls 选项。
修复了 wimlib 确定 WIM 中图像顺序的方法。
版本 1.3.1 由于 wimlib 现在可以在 Windows 上使用,wimlib 的 ImageX 实现已更名为 wimlib-imagex,以避免与微软的 ImageX 实现(同名文件 imagex.exe)混淆。如果你不喜欢这个名字,可以通过 --with-imagex-progname 选项在配置时选择不同的名称,或者自己重命名二进制文件(前者会配置手册页使用所选名称)。
Windows 版本修复了各种错误,主要与在特殊情况下正确捕获和恢复备用数据流、打开文件时请求正确权限有关。同时,wimlib-imagex capture、append 和 apply 添加了 --noacls 选项。
Windows 版本再次更新:FindFirstStreamW() 和 FindNextStreamW() 现在动态加载,这可能使库与 Windows XP 兼容(但可能仍然存在其他问题)。
版本 1.3.0 增加了对原生 Windows 构建的实验性支持。二进制文件可从 SourceForge 页面下载。
imagex capture 和 imagex append 添加了 --source-list 选项。
对不同字符编码的支持更好。
版本 1.2.6 现在可以使用 imagex capture 和 --unix-data 标志在 WIM 图像中存储 UNIX 文件的所有者、组和模式。
进行了小幅错误修复和文档修正。
版本 1.2.5 NTFS 捕获:修复了捕获重复重解析点的错误。
NTFS 捕获:如果存在多个未命名流,捕获第一个未命名流(打印警告而非错误)。
允许多个测试用例并发执行(例如,使用 make -j2 check)。
版本 1.2.4 向 mkwinpeimg 脚本添加了 --arch 选项,以支持从 WAIK 获取 AMD64 WinPE。
更新以支持 ntfs-3g 版本 2013.1.13。
版本 1.2.3 修复了在读写挂载的 WIM 图像上截断文件到更短但非零长度的问题。
进行了各种代码清理和小幅文档修正。
版本 1.2.2 LZX 和 XPRESS 解压缩进行了额外优化,现在速度更快。(尽管它们已经相当快——远快于典型的 I/O 速度。)
修复了 v1.2.1 中引入的一个错误,该错误可能导致包含硬链接的目录树在某些情况下被错误捕获。
版本 1.2.1 默认情况下,使用 imagex unmount --commit 卸载读写挂载的 WIM 时,将在原地更改 WIM,而无需重新写入整个 WIM。使用 imagex unmount --commit --rebuild 可恢复旧行为。
imagex unmount 不再有 10 分钟的硬编码响应时间限制。现在每秒会检查一次守护进程是否仍然存活,如果是则继续等待,否则将终止并返回错误。
在读写挂载的 WIM 上使用 imagex unmount --commit 现在会打印有关新流或修改流写入进度的信息,类似于捕获或附加 WIM 时的输出。
XPRESS 压缩进行了小幅改动,压缩比略有提高。
对在 NTFS 卷上应用 WIM 图像时的性能进行了可能的小幅提升。
微软的软件中引入了更多错误,现在 Windows 8 的 WIM 对某些流的引用计数不正确(过低)。这不安全,因为这些流实际上仍被 WIM 中的其他图像引用。wimlib 现在会通过修复流的引用计数来解决此问题。这仅在调用 wimlib_delete_image()(imagex delete)或使用 WIMLIB_MOUNT_FLAG_READWRITE 调用 wimlib_mount_image()(imagex mountrw)时进行。请注意,这需要读取 WIM 中所有图像的元数据,因此在具有多个图像的 WIM 上,这些操作会明显变慢。
其他各种错误修复。
版本 1.2.0 现在默认情况下,向 WIM 附加图像时,无需重新构建整个 WIM。使用 --rebuild 标志可以恢复到旧行为(即在附加新图像时重新构建整个 WIM)。
新增命令 imagex optimize 可手动重建因重复附加而浪费空间的 WIM。
进度信息得到了改进,现在可以使用任意回调函数来显示 WIM 操作的进度。
修复了更改 WIM 启动图像时可能出现的错误。
现在进行了一些建议锁定,以防止两个进程同时修改 WIM(但仅在某些情况下)。例如,不能同时从一个 WIM 读写挂载两个图像。
一些函数已重新组织:
wimlib_mount()重命名为wimlib_mount_image()。wimlib_unmount()重命名为wimlib_unmount_image()。wimlib_overwrite_xml_and_header()被移除,因为wimlib_overwrite()现已足够。wimlib_apply_image_to_ntfs_volume()被移除,因为wimlib_extract_image()现已足够。wimlib_add_image_from_ntfs_volume()被移除,因为wimlib_add_image()现已足够。
之前,libwim.so 的 soname 为 0.0.0,尽管进行了许多接口更改。soname 现已更新为 1.0.0,并将在每次发布时更新。
版本 1.1.0 资源现在默认使用多线程进行压缩(适用于 imagex capture、imagex append 和 imagex export)。
在挂载的 WIM 中进行了一些性能改进。
在捕获 WIM 时显示更多进度信息。
版本 1.0.4 进行了大量小修复、代码清理和一些文档更新。没有特别值得注意的内容。
版本 1.0.3 改进了 LZX 和 XPRESS 压缩。
修正了 WIM 的目录计数、文件计数、总字节数和硬链接字节数的计算。
版本 1.0.2
-
修复了在捕获具有多个命名数据流的NTFS文件时的错误。
-
内部我们现在使用inode结构,即使这些不会直接出现在WIM文件中。这简化了一些代码(主要是针对WIM挂载)并且可能修复了一些问题,尽管还需要更多的测试。
版本 1.0.1
- 修复了从XPRESS压缩格式导出到LZX压缩WIM或反之的问题。
版本 1.0.0
-
足够多的变化以称其为版本1.0.0!
-
现在支持直接从NTFS卷捕获WIM以及将WIM直接应用到NTFS卷上。
-
对硬链接和符号链接的支持有了很大的改进。它们现在被支持用于WIM捕获、WIM应用以及挂载的WIMs(你甚至可以在读写挂载的WIMs上创建它们)。
-
通过xattr或Windows风格的流接口,在挂载的WIMs上现在支持备用数据流。此外,在从NTFS捕获WIM或将WIM应用到NTFS时也支持备用数据流。
-
分割WIMs得到了更好的支持。你现在可以直接从分割的WIM应用镜像,以只读方式挂载来自分割WIM的镜像,或者从分割的WIM导出镜像。
-
现在支持使用捕获配置文件(但尚未完全实现)。
-
在更多地方检查SHA1消息摘要,以确保应用和捕获的数据是正确的。
-
手册页已经更新并进行了整合。
版本 0.7.2
- 修复了解除挂载只读WIM时的段错误。
版本 0.7.1
- 支持合并和分割WIMs。
- 默认情况下现在保留安全数据。
版本 0.6.3
- 现在可以使用较旧版本的gcc和系统头文件进行构建,例如在CentOS 5上。
版本 0.6.2
- 修复了在读写挂载时无法覆盖文件的错误。
版本 0.6.1
- 在WIM XML数据前写入字节顺序标记。(imagex.exe要求此处存在字节顺序标记。)
wimlib(意味着所有程序、脚本、库、文档和其他作为wimlib项目一部分的文件——不仅仅是“libwim”库)可以在GNU通用公共许可证(GPL)的条款下重新分发和/或修改;可以是许可证的第3版,或者(根据您的选择)任何后续版本。该许可证的副本可以在COPYING.GPLv3文件中找到。
此外,在第三方软件许可不禁止的情况下,libwim(wimlib的库部分)可以在GNU较宽松通用公共许可证(LGPL)的条款下重新分发和/或修改;可以是许可证的第3版,或者(根据您的选择)任何后续版本。该许可证的副本可以在COPYING.LGPLv3文件中找到。这是作为一个“双重许可”提供的,意味着您可以选择这个LGPLv3+选项或是上面提到的GPLv3+选项。
在任一情况下,法律允许的最大范围内,没有提供任何保证。
注意!对于libwim的LGPL选项附加了“当第三方软件许可未禁止时”的条件,原因是libwim可以选择链接到第三方库“libntfs-3g”,而该库是基于GPL许可的。通常GPL被解释为,任何使用GPL库的二进制文件也必须基于GPL许可,而不是例如LGPL。
因此,如果您构建的libwim链接到了libntfs-3g,则您不能选择LGPL选项。对于Windows上构建的libwim,由于它们不会链接到libntfs-3g,您可以选择LGPL选项。同样地,对于使用./configure --without-ntfs-3g配置选项构建的UNIX上的libwim,也可以选择LGPL选项。

浙公网安备 33010602011771号