培训
模块
Maintain disks and volumes - Training
This module explores file system fragmentation and the tools that you can use to reduce fragmentation. Students will learn how Windows can compress files to take up less space on the hard disk.
将文件写入磁盘时,有时无法在连续群集中写入文件。 非连续簇会减缓文件的读取和写入过程。 由于硬盘驱动器的读取/写入头移动所需的时间,非连续簇在磁盘上相距越远,问题就越严重。 具有非连续群集的文件已碎片化。 若要优化文件以便快速访问,可以对卷进行碎片整理。
碎片整理是移动磁盘上文件部分以对文件进行碎片整理的过程,即在磁盘上移动文件群集以使它们连续的过程。 有关详细信息,请参阅以下各节:
在简单的单任务操作系统中,碎片整理软件是唯一的任务,没有其他进程会读取或写入磁盘。 但是,在多任务操作系统中,在有进程正在对硬盘驱动器进行碎片整理时,某些进程可以读取和写入硬盘驱动器。 技巧是避免写入正在进行碎片整理的文件,这样就不会长时间停止写入进程。 解决此问题并非小事,但有可能解决。
为了在无需详细了解文件系统磁盘结构的情况下进行碎片整理,系统提供了一个含三个控制代码的代码集。 控制代码提供以下功能:
控制代码还会透明地处理禁止和允许其他进程在移动期间读取和写入文件的问题。
可以执行这些操作,而不会禁止其他进程运行。 但是,正在对磁盘驱动器进行碎片整理时,其他进程响应时间会较慢。
若要对文件进行碎片整理,请执行以下操作:
备注
如有必要,移动其他文件,以创建足够大的位置。 理想情况下,在文件的第一个盘区之后具有足够的未分配群集,可以将后续盘区移到第一个盘区之后的空间中。
使用 FSCTL_GET_RETRIEVAL_POINTERS 控制代码获取磁盘上文件的当前布局的映射。
浏览 FSCTL_GET_RETRIEVAL_POINTERS 返回的 RETRIEVAL_POINTERS_BUFFER 结构。
使用 FSCTL_MOVE_FILE 控制代码在遍历结构时移动每个群集。
备注
可能需要续订位图或检索结构,或者在其他进程写入磁盘时在各个时间同时续订这两者。
碎片整理进程中使用的两个操作需要卷的句柄。 只有管理员才能获取卷的句柄,因此只有管理员才能对卷进行碎片整理。 应用程序应检查尝试运行碎片整理软件的用户的权限,如果用户没有适当的权限,则不会允许用户对卷进行碎片整理。
在对 FAT 或 FAT32 文件系统卷进行碎片整理期间,使用 CreateFile 打开目录时,指定 GENERIC_READ 访问掩码值。 不要指定 MAXIMUM_ALLOWED 访问掩码值。 如果这样做,则拒绝目录访问。
不要尝试在超出群集舍入文件大小的 NTFS 文件系统中移动分配的群集,因为结果是错误。
可以对 NTFS 文件系统卷中的重解析点、位图和属性列表进行碎片整理、打开以便读取和同步,同时可以使用 file:name:type 语法进行命名;例如 dirname:$i30:$INDEX_ALLOCATION、mrp::$DATA、mrp::$REPARSE_POINT 和 mrp::$ATTRIBUTE_LIST。
对 NTFS 文件系统卷进行碎片整理时,允许对超出文件分配大小的虚拟群集进行碎片整理。
如果可能,以 16 千字节 (KB) 增量移动块中相互对齐的数据。 这可减少启用卷影副本时写入时复制开销,因为在发生以下情况时会增加卷影复制空间且会降低性能:
移动增量是源块开始和目标块开始之间的字节数。 换句话说,如果 X 减 Y 的绝对值为 16 KB 的偶数倍数,则可以将从偏移 X(磁盘上)开始的块移到开始偏移 Y。 因此,假设有 4 KB 的簇,从簇 3 移动到簇 27 会被优化,但从簇 18 移动到簇 24 则不会。 请注意,mod(3,4) = 3 = mod(27,4)。 选择 Mod 4,因为四个各自为 4 KB 的群集相当于 16 KB。 因此,格式化为 16 KB 群集大小的卷将导致优化所有移动文件。
有关卷影副本的详细信息,请参阅卷影复制服务。
虽然可以使用 FSCTL_MOVE_FILE 控制代码移动大多数文件,但并非所有文件都可以移动。 下面是 FSCTL_MOVE_FILE 支持的文件、流和流类型(也称为属性类型代码)的列表。 FSCTL_MOVE_FILE 不支持其他文件、流和流类型。
支持任何文件或目录的流类型。
Windows 7、Windows Server 2008 R2、Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:::$EA 和 ::$LOGGED_UTILITY_STREAM 在 Windows 8 和 Windows Server 2012 之前不受支持
任何目录都支持的流类型。
以下是采用“filename:streamname:$typename”格式的 FSCTL_MOVE_FILE 支持的系统文件、流和流类型。
培训
模块
Maintain disks and volumes - Training
This module explores file system fragmentation and the tools that you can use to reduce fragmentation. Students will learn how Windows can compress files to take up less space on the hard disk.