码迷,mamicode.com
首页 > Windows程序 > 详细

普通windows版本安装winServer的特色功能 以dedup功能为展示点

时间:2017-05-07 12:53:03      阅读:1324      评论:0      收藏:0      [点我收藏+]

标签:efault   nan   mat   pch   sel   组成   dos   知识库   line   

安装 Windows 功能角色

 

 

1、选择安装源

在 Windows 8.1 系统上不存在重复数据删除功能,需要从对应的服务器版本,即 Windows Server 2012 R2 上提取相关文件。

2、提取文件

安装源中的目录和文件很多,我们只需要要三个目录:
\WINDOWS\servicing\Packages,包文件;
\WINDOWS\winsxs:程序集文件。除了程序集子目录之外,其他的子目录不需要;
\WINDOWS\winsxs\Manifests:清单文件。

把这三个目录中的子目录和文件到复制一个目录下。假设全部文件、目录都复制到 s:\4\Packages 中。

3、增量压缩

增量压缩:Delta Compression
为什么要说到增量压缩呢?是因为复制到 s:\4\Packages 中的文件许多都是经过增量压缩的,如果用记事本打开,能看懂的只有开头的 DCN PA30 之类的内容,其余部分都是些乱码。
再说说文件标识。
DC,应该就是增量压缩的缩写,N 表示某种类型的压缩;除 DCN 外,还有 DCD、DCM。PA30 应该是增量压缩的版本,表示这种压缩是使用 msdelta.dll 作为引擎的,解压缩也使用 msdelta.dll ;还有一种版本 PA19,使用 mspatchc.dll 进行压缩,使用 mspatcha.dll 进行解压缩(解压缩又称为应用,apply)。

4、安装前的准备

禁用 Hash 测试。
因为默认的程序集文件应该是未压缩的,但是,我们从安装光盘中提取的文件是经过压缩的,在安装包时,系统要对程序集文件进行 Hash 测试,肯定无法通过测试。为此,必须关闭 Hash 测试的功能。需要在注册表中添加一个属性 DisableFileHashVerification,类型为 DWORD,值为 1,位置在 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Configuration。

5、安装包

安装包使用的命令:Dism
Dism /online /Add-Package /PackagePath:包文件的路径
重复数据删除是文件服务角色中的一项功能,它依赖文件服务的某些基础功能,即 Microsoft-Windows-FileServer-Package 包。
Dism /online /Add-Package /PackagePath:Microsoft-Windows-FileServer-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum
Dism /online /Add-Package /PackagePath:Microsoft-Windows-FileServer-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum
Dism /online /Add-Package /PackagePath:Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum
Dism /online /Add-Package /PackagePath:Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum

6、启用功能前的准备

这一步非常关键,因为几乎所有的出错都与这里的设置有关。如果提取的文件是未经过压缩的原始文件,这一步可以跳过。
前面说过,重复数据删除功能涉及到十个程序集,其中有三个系统已经安装。
在包的安装过程中,注册表中的内容是应该自动写上的,但不一定。如果功能无法启用,可以参照附表对相关注册表值进行设置。注册表的位置为 HKLM\COMPONENTS\DerivedData\Components,文件为 \Windows\System32\Config\Components。
需要注意的是,通常情况下,HKLM\COMPONENTS 并不加载,需要加载以后,才能进行后续的操作。

7、启用功能

Enable-WindowsOptionalFeature -Online -FeatureName File-Services
Enable-WindowsOptionalFeature -Online -FeatureName CoreFileServer
Enable-WindowsOptionalFeature -Online -FeatureName Dedup-Core

8、验证

如果安装成功完成,下面的命令就可以运行了。
查看有关有关重复数据删除的命令:get-command dedup
启用对磁盘的重复数据删除:Enable-DedupVolume T:
扫描磁盘,计算重复数据删除后的状态:Update-DedupStatus T:
返回重复数据删除后的状态:Get-DedupStatus

 

 

 

我们想要介绍的是如何安装在当前 Windows 版本中没有的功能。

 

我们知道,同一个版本号(version)的Windows,有不同的版本类型(edition),比如,标准版、专业版、企业版,以及对应的服务器版本类型(到底有多少类型的版本,可以看看\Windows\servicing\editions 下的文件)。如果我们安装了企业版以后,发现还想使用专业版的某些功能,如媒体中心,是重装系统吗?看过本文以后,你可能会多一个选择。本文以Windows 8.1为例,介绍如何安装Windows Server 2012 R2 的重复数据删除功能。

 

一、系统的组成

 

Windows 是操作系统,那么,这个完整的体系又是由什么组成的呢?从安装功能角色的角度来看,大体可以分成这样几级:系统、角色、功能、包、程序集和清单。即:

系统是由多个角色组成;

一个角色由一个或多个功能组成;

一个功能由一个或多个包组成,一个包也可能包含多个功能;

一个包由一个或多个程序集和清单组成,一个程序集对应一个清单(这样说,不严谨,但不影响结果)。

这一思想应该是从 Windows Vista开始就有了,只是在不同的版本之间,概念上会有所变化,具体操作的命令也不尽相同。

系统、角色、功能是逻辑上的概念,且功能与角色并无本质区别,真正物理存在的是包、程序集和清单。

包文件,\WINDOWS\servicing\Packages

程序集文件,\WINDOWS\winsxs

清单文件,\WINDOWS\winsxs\Manifests

 

下面就分别作一点简单介绍。

 

1、系统是由多个角色组成

 

这一点不言而喻的。

 

2、一个角色由一个或多个功能组成

 

对应于服务器版本上的选择角色界面。

比如 Hyper-V 角色,由这样一些功能组成:

Get-WindowsOptionalFeature-Online -FeatureName *hyper-v* | select FeatureName

Microsoft-Hyper-V

Microsoft-Hyper-V-Offline

Microsoft-Hyper-V-Online

RSAT-Hyper-V-Tools-Feature

Microsoft-Hyper-V-Management-Clients

Microsoft-Hyper-V-Management-PowerShell

前面的命令表明,角色这一层纯粹是逻辑上的;且在非服务器版本的系统上,就没有选择角色的界面。

功能之间有依赖关系。通过下面的命令,可以知道,Dedup-Core 功能要依赖 File-Services 功能。

Get-WindowsOptionalFeature-Online -FeatureName Dedup-Core

Feature Name      : Dedup-Core

Display Name      : 数据删除重复

Description       : 通过应用区块级别删除重复和压缩来减少数据所需的物理存储量。

Restart Required  : Possible

State             : Enabled

Custom Properties :ServerComponent\Description : 重复数据删除为卷上的相同数据存储单一副本,从而节省了磁盘空间。

                    ServerComponent\DisplayName:数据删除重复

                    ServerComponent\Id : 436

                    ServerComponent\Parent: File-Services

                    ServerComponent\Type :RoleService

                    ServerComponent\UniqueName :FS-Data-Deduplication

                   ServerComponent\NonAncestorDependencies\ServerComponent\UniqueName :FS-FileServer

                   ServerComponent\Deploys\Update\Name : Dedup-Core

                    ServerComponent\SystemServices\SystemService\DefaultMonitoring: false

                   ServerComponent\SystemServices\SystemService\Name : ddpsvc

 

3、一个功能由一个或多个包组成,一个包中也可能包含多个功能

 

重复数据删除(Dedup-Core)是文件和存储服务角色中的一个功能,是由两个功能包和对应的语言包组成:

Microsoft-Windows-Dedup-ChunkLibrary-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum

Microsoft-Windows-Dedup-ChunkLibrary-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum

Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum

Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum

文件名太长,是看这种文章(或日志文件)的困难之处,一会儿眼就花了。

每一个包文件,还有一个对应的证书文件,扩展名为 .cat。因为包文件是纯文本文件,有了证书文件,可以保证在图形界面下,包文件是不能修改的;在非图形界面(即WinRE环境)下是可以修改的。

为什么选择用这个功能进行演示呢?大体有这样几个原因,一是实用,启用重复数据删除以后,可以节省大量的磁盘空间。有了虚拟机以后,我们会发现,再大的磁盘也不够用,启用了重复数据删除功能以后,节省磁盘空间的效果非常明显;二是这个功能具有代表性,三是相对简单。

现在就说说它的代表性,重复数据删除功能有两个包:

这两个包是两种类型,第一个包Microsoft-Windows-Dedup-ChunkLibrary-Package,是系统自动安装的,在客户机和服务器版本上都有;第二个包Microsoft-Windows-Dedup-Package,只在服务器版本上才有。另外,从 Windows8.1 开始,增加了组件的增量压缩功能。

 

4、一个包由一个或多个程序集和清单组成,一个程序集对应一个清单

 

程序集也称为组件。

Microsoft-Windows-Dedup-ChunkLibrary-Package包对应了三个程序集:

amd64_microsoft-windows-dedup-chunklibrary_31bf3856ad364e35_6.3.9600.16384_none_b739226fcac7b86b

amd64_microsoft-windows-dedup-common_31bf3856ad364e35_6.3.9600.16384_none_24924b7b049f1064

amd64_microsoft-windows-dedup-common.resources_31bf3856ad364e35_6.3.9600.16384_zh-cn_735de6f4f3c9bf01

Microsoft-Windows-Dedup-Package包对应了七个程序集:

amd64_microsoft-windows-dedup-service_31bf3856ad364e35_6.3.9600.16384_none_bfb8b8d13d6b64ec

amd64_microsoft-windows-dedup-pipeline_31bf3856ad364e35_6.3.9600.16384_none_4a1a2e1b94c17293

amd64_microsoft-windows-dedup-backup_31bf3856ad364e35_6.3.9600.16384_none_082618006d52d13d

amd64_microsoft-windows-dedup-vsswriter_31bf3856ad364e35_6.3.9600.16384_none_6a34e1622afa6abc

amd64_microsoft-windows-d..p-service.resources_31bf3856ad364e35_6.3.9600.16384_zh-cn_ef122ebc772ca755

amd64_microsoft-windows-dedup-filter_31bf3856ad364e35_6.3.9600.16384_none_f8cff29f2baf02c3

amd64_microsoft-windows-fsdm-hostprocess_31bf3856ad364e35_6.3.9600.16384_none_1dcf65c39dce3a7c

每个程序集对应于磁盘上的一个目录,在目录下有若干文件,还可能有子目录,包安装时,会从安装源复制到\Windows\Winsxs目录下;每个程序集还有一个清单文件,名字与目录名相同,扩展名为manifest,复制到\Windows\Winsxs\Manifests目录下。启用功能时,组件对应的文件会复制到系统目录,必要时,还会创建服务等。从 Vista 开始,管理系统是以组件为单位了,不再基于 INF 了。

两个包对应的分发清单文件:

amd64_microsoft-windows-d..klibrary-deployment_31bf3856ad364e35_6.3.9600.16384_none_586b9e5d057f82e3.manifest

amd64_microsoft-windows-dedup-deployment_31bf3856ad364e35_6.3.9600.16384_none_417674c644d0189e.manifest

 

 二、提取文件与增量压缩

 

1、选择安装源

 

在 Windows 8.1 系统上不存在重复数据删除功能,需要从对应的服务器版本,即 Windows Server 2012 R2 上提取相关文件。

客户机与服务器对应表

客户机

服务器

主版本号

Windows 8.1

Windows 2012 R2

6.3

Windows 8

Windows 2012

6.2

Windows 7

Windows 2008 R2

6.1

Windows Vista

Windows 2008

6.0

 

在 Windows Server 2012 R2光盘上的 Soures 目录下找到 install.wim 文件,用新版本的压缩软件打开,会看到有1、2、3、4这样的目录,分别对应标准版核心、标准版、数据中心版核心、数据中心版。其中数据中心版的功能最全,但对于我们演示的重复数据删除功能来说,这四个版本没有区别。没有正式版本的光盘也不要紧,完全可以从微软站点上下载试用版本;另外,不要用新版本的光盘,最好用最原始版本,因为新版本上会有更多的文件被压缩,给操作带来不必要的麻烦。

如果从正常运行的系统中提取文件,应该使用启用了相关功能,且未打过补丁的系统。

 

2、提取文件

 

安装源中的目录和文件很多,我们只需要要三个目录:

\WINDOWS\servicing\Packages,包文件;

\WINDOWS\winsxs:程序集文件。除了程序集子目录之外,其他的子目录不需要;

\WINDOWS\winsxs\Manifests:清单文件。

 

把这三个目录中的子目录和文件到复制一个目录下。由于文件和目录有几万个,复制的过程很漫长而无聊。以前在DOS年代,有一个命令 append可以把目录拼接在一起,相当于在一个目录中操作,现在反而没有了;另外,安装包的命令 dism只能指定一个安装源,因此,再无聊也得复制了。

假设全部文件、目录都复制到 s:\4\Packages中。

 

3、增量压缩

 

增量压缩:Delta Compression

远程差分压缩:Remote Differential Compression

单实例存储:Single Instance Store

重复数据删除:Data Deduplication

 尽管这些概念都提到了压缩,但是,其核心思想不在于压缩,而在于单实例存储,即,相同的部分只保存一份,只是有的在文件级别,有的在磁盘级别。

为什么要说到增量压缩呢?是因为复制到s:\4\Packages 中的文件许多都是经过增量压缩的,如果用记事本打开,能看懂的只有开头的 DCN PA30 之类的内容,其余部分都是些乱码。

增量压缩,是根据两个文件的差进行的,以其中的一个版本(通常为最新版本)为基准,暂时不需要的版本(通常为老版本)就保存了相对基准文件的差。

同一个文件不版本之间的差别通常不大,有的甚至完全相同,因此,增量压缩可以显著节省磁盘空间。

有两种情况下会发生增量压缩:一是功能尚未启用,暂时用不到的文件就以压缩的形式保存(但不是立即进行压缩),一旦启用某个功能,与之相关的文件会自动解压;二是安装了某个程序集的新版本补丁,新版本文件以未压缩的形式保存,被取代的版本以增量压缩的形式保存,如果卸载了新版本,老版本的文件会自动解压缩。

执行任务计划,会强制进行压缩。

schtasks.exe /Run /TN"\Microsoft\Windows\Servicing\StartComponentCleanup"

再说说文件标识。

DC,应该就是增量压缩的缩写,N表示某种类型的压缩;除 DCN外,还有 DCD、DCM。PA30应该是增量压缩的版本,表示这种压缩是使用 msdelta.dll作为引擎的,解压缩也使用 msdelta.dll;还有一种版本 PA19,使用mspatchc.dll进行压缩,使用 mspatcha.dll进行解压缩(解压缩又称为应用,apply)。

 

压缩类型

文件标识

注册表值

有基准的压缩

DCD

CF:10;f!XXX:3

有 CTS 和 DV

无基准的压缩

DCN

CF:200

f!XXX:21

清单文件的压缩

DCM

CF:c

未压缩

 

CF:0;f!XXX:1

由于这方面的资料太少,上面内容猜测成分较多,不足全信。想详细了解文件标识的内容,可参考 Windows SDK中的 msdelta.h 文件。

 

三、安装包

 

1、安装前的准备

 

禁用 Hash 测试

因为默认的程序集文件应该是未压缩的,但是,我们从安装光盘中提取的文件是经过压缩的,在安装包时,系统要对程序集文件进行Hash测试,肯定无法通过测试。为此,必须关闭 Hash 测试的功能。需要在注册表中添加一个属性 DisableFileHashVerification,类型为 DWORD,值为 1,位置在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Configuration。

 

2、安装包

 

安装包使用的命令:Dism

Dism /online /Add-Package/PackagePath:包文件的路径

前面说过,重复数据删除是文件服务角色中的一项功能,它还依赖文件服务的某些基础功能,即 Microsoft-Windows-FileServer-Package包。

Dism /online /Add-Package /PackagePath:Microsoft-Windows-FileServer-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum

Dism /online /Add-Package /PackagePath:Microsoft-Windows-FileServer-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum

Dism /online /Add-Package /PackagePath:Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum

Dism /online /Add-Package /PackagePath:Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum

 

3、启用功能前的准备

 

这一步非常关键,因为几乎所有的出错都与这里的设置有关。如果提取的文件是未经过压缩的原始文件,这一步可以跳过。

前面说过,重复数据删除功能涉及到十个程序集,其中有三个系统已经安装。

在包的安装过程中,注册表中的内容是应该自动写上的,但是,安装了若干次,只有一两次是正确的,大部分都是不成功的,具体原因不详。如果注册表中的设置不正确,就不能正常解压缩,功能就无法启用。

如果功能无法启用,可以参照附表对相关注册表值进行设置。注册表的位置为HKLM\COMPONENTS\DerivedData\Components,文件为\Windows\System32\Config\Components。

需要注意的是,通常情况下,HKLM\COMPONENTS并不加载,需要加载以后,才能进行后续的操作。

 

 

4、启用功能

 

Enable-WindowsOptionalFeature-Online -FeatureName File-Services

Enable-WindowsOptionalFeature-Online -FeatureName CoreFileServer

Enable-WindowsOptionalFeature-Online -FeatureName Dedup-Core

 前面两条命令说明,一个包(FileServer)包含了两个功能,后面一条命令说明,两个包组成一个功能。

 

5、验证

 

如果安装成功完成,下面的命令就可以运行了。

查看有关有关重复数据删除的命令:get-command *dedup*

启用对磁盘的重复数据删除:Enable-DedupVolumeT:

扫描磁盘,计算重复数据删除后的状态:Update-DedupStatusT:

返回重复数据删除后的状态:Get-DedupStatus

这可能是系统最慢的命令了,执行以后不会立即看到效果,看到效果一般要等到两天之后。

 

四、排错

 

常见的错误有以下几个:

1、无法读取配置注册表项

enable-WindowsOptionalFeature: 无法读取配置注册表项。

这是由于没有正确安装并启用 FileServer,参见前面的内容。

2、组件的文件跟组件清单中的验证信息不匹配

这是由于没有禁用Hash 测试,参见前面的内容。

3、0x800f0922

Enable-WindowsOptionalFeature: Enable-WindowsOptionalFeature失败。错误代码 = 0x800f0922

这是由于在启用重复数据删除功能时,没有正确设置注册表中相关增量压缩的值,参见前面的内容。

但需要注意的是,如果已经启用过重复数据删除功能,虽然没有成功,那么,有可能部分文件已经成功解压缩了。这时,已经解压缩的文件就不能再设置为21了;如果设置为 21,就表示还需要解压缩,肯定要出错。

4、0x8056530b、0x80565306

Enable-DedupVolume :MSFT_DedupVolume.Volume=‘c:‘ - HRESULT 0x8056530b,不支持指定的卷类型。固定的、支持写入的NTFS数据卷以及由NTFS 数据卷提供支持的CSV 支持重复数据删除。

这是由于不能对系统卷、网络路径进行重复数据删除。

5、0x800f0830

指定的映像不再可用,可能已损坏。

请放弃修改后的映像。然后重新开始。

这个错误真的很小,找到注册表HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ComponentBased Servicing,删除属性Unserviceable,或改成 0 即可,但微软居然就让我们放弃,不知是何原因。

另外,还有几个错误有必要提一下,但限于篇幅,只略作提示。如果不能理解,就说明没有碰到,直接忽略。

1、找不到引用的汇编

缺少 HKLM\Components\DerivedData\Components\Identity

2、参照的程序没有安装在系统上

缺少 HKLM\Components\DerivedData\VersionedIndex\XXX (winblue_rXXX)\ComponentFamilies\ComponentsFamily中的V!XXX

缺少HKLM\Components\DerivedData\Components\Identity

 3、组件存储已损坏

缺少程序集或清单文件

缺少 HKLM\Components\DerivedData\VersionedIndex\XXX (winblue_rXXX)\ComponentFamilies\ComponentsFamily

4、一个或多个事务不存在

缺少 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\Winners

错误是列举不完的,最终还需要自己看日志。主要有两个:

1、\Windows\Logs\CBS\CBS.log

这个文件的内容非常丰富,只是刚开始可能不容易看得懂,可以参考微软的一篇文章《可选组件安装日志诊断程序》。

尽管 dism 命令提示出错要看DISM 日志文件,\WINDOWS\Logs\DISM\dism.log。但这个文件在图形界面下几乎没有用处,可以不看,只有在 WinRE 环境下才需要看这个文件。

2、\Windows\Inf\setupapi.dev.log

涉及到安装驱动程序,提示不能完成更新的,一定要看看这个文件。

 

最后要说的,看到本文,微软会不会不高兴?

 

附表:重复数据删除组件的注册表值

 

amd64_microsoft-windows-dedup-common_31bf3856ad364e35_6.3.9600.16384_none_24924b7b049f1064

CF = 200

f!ddp_ps.dll_549a992a3c8616e4= 21

f!ddputils.dll = 21

f!ddptrace.dll = 21

f!ddp.mof = 21

amd64_microsoft-windows-dedup-common.resources_31bf3856ad364e35_6.3.9600.16384_zh-cn_735de6f4f3c9bf01

CF = 200

f!ddp.mfl = 1

f!ddputils.dll.mui = 21

amd64_microsoft-windows-dedup-vsswriter_31bf3856ad364e35_6.3.9600.16384_none_6a34e1622afa6abc

CF = 200

f!ddpvssvc.dll = 21

amd64_microsoft-windows-dedup-service_31bf3856ad364e35_6.3.9600.16384_none_bfb8b8d13d6b64ec

f!dedupfilemetadata.cdxml= 1

f!ddpsvc.dll = 21

f!deduplication.psd1 = 1

f!ddpeval.exe = 21

f!dedupjob.cdxml = 21

f!ddpwmi.dll = 21

f!ddpcli.exe = 21

f!dedupmetadata.cdxml = 1

f!deduplication.types.ps1xm_9ba49f296646713d= 21

f!dedupstatus.cdxml = 1

f!dedupschedule.cdxml = 21

f!dedupvolume.cdxml = 21

f!deduplication.format.ps1x_74de558af5a08661= 21

f!deduplicationprovider.mof= 21

CF = 200

amd64_microsoft-windows-dedup-pipeline_31bf3856ad364e35_6.3.9600.16384_none_4a1a2e1b94c17293

CF = 200

f!ddppipeline.dll = 21

f!ddpscan.dll = 21

f!ddpstore.dll = 21

amd64_microsoft-windows-dedup-backup_31bf3856ad364e35_6.3.9600.16384_none_082618006d52d13d

CF = 200

f!ddpbackup.dll = 21

amd64_microsoft-windows-d..p-service.resources_31bf3856ad364e35_6.3.9600.16384_zh-cn_ef122ebc772ca755

CF = 200

f!ddpsvc.dll.mui = 21

f!deduplicationprovider.mfl= 21

f!ddpwmi.dll.mui = 21

amd64_microsoft-windows-dedup-filter_31bf3856ad364e35_6.3.9600.16384_none_f8cff29f2baf02c3

CF = 200

f!dedup.sys = 21

amd64_microsoft-windows-dedup-chunklibrary_31bf3856ad364e35_6.3.9600.16384_none_b739226fcac7b86b

CF = 200

f!ddpchunk.dll = 21

amd64_microsoft-windows-fsdm-hostprocess_31bf3856ad364e35_6.3.9600.16384_none_1dcf65c39dce3a7c

CF = 200

f!fsdmhost.exe = 21

注:这是以从光盘中提取文件为基准的设置值。

普通windows版本安装winServer的特色功能 以dedup功能为展示点

标签:efault   nan   mat   pch   sel   组成   dos   知识库   line   

原文地址:http://www.cnblogs.com/qiaoyanlin/p/6820224.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!