在复制大量文件时,通常会使用 RoboCopy 的多个线程(/MT[:n] 选项)。这会导致目标驱动器出现碎片吗?有时我会使用 Beyond compare 复制文件结构以最大限度地利用网络/HDD 带宽。这也是一种创建多个线程的方式。这两种方式都会导致碎片吗?
答案1
如果您不确定,您可以简单地检查复制的文件是否有碎片,如果是,则检查有多少个碎片。
要检查文件,您可以使用 Microsoft/Mark Russinovich 的“Contig”,它允许使用开关检查碎片-a
contig -a <filename>
http://technet.microsoft.com/en-us/sysinternals/bb897428.aspx
答案2
(这不是答案,但作为新用户,我似乎无法直接评论以前的答案。)
回应 music2myear,不预先分配空间的多线程复制确实会导致极端碎片化。
场景如下:文件 A 开始复制到磁盘上的块 N。文件 B 开始复制到磁盘上的块 N+1。文件 C 开始复制到磁盘上的块 N+2。文件 A 需要另一个块,因此复制到 N+3。文件 B 需要另一个块,因此复制到 N+4。依此类推……直到每个文件都完全碎片化,没有两个块是连续的。文件 A 最终位于块 N、N+3、N+5、N+10、N+13 上,而不是 N、N+1、N+2、N+3、N+4 上。
好吧,这有点极端;它可能不会完全碎片化。但它说明了多线程复制实用程序不预先分配空间的问题。话虽如此,我刚刚尝试了 Server 2008R2 附带的 robocopy 来复制大量大小不一的文件,但没有成功似乎造成过多的碎片。(以前版本的 robocopy 已知会导致极端的碎片。)需要进行更多测试。
答案3
它不应该造成比单线程复制操作更多的碎片,单线程复制操作在复制时寻找第一个可用空间,然后寻找下一个,依此类推。
任何具有高读/写频率和较大或混合大小文件的驱动器都应该定期进行碎片整理,除非您使用的文件系统可以防止碎片化。
如果您非常担心碎片化问题,那么您应该考虑使用多线程所获得的好处(对于大量文件来说好处极大,对于少量较大文件来说好处较少)与可能因碎片化而遭受的性能损失。
答案4
我见过这样的情况:
- 将 E: 重新格式化为 FAT32(格式 M: /FS:FAT32 /Q),因此其上没有任何内容
- 列表 E: (dir /AE:) 上没有任何内容
- 仅将一个文件从 D: 复制到 E: 而不执行任何其他操作,直到结束
- 列表 E: (dir /AE:) 并且只有这样的文件
- 查看 E: 的碎片,非常糟糕,文件开始位于分区的中间,并且有很多碎片(超过 10 个)
我也尝试过使用 robocopy,但没有成功,仍然将其分割开来。
如果我在复制后尝试进行碎片整理,则什么也不会发生。
如何避免?我通过执行一些额外步骤...并使用 XCOPY /J 命令...解决了此问题...
我通过这样做得到了它:
- 将 E: 重新格式化为 FAT32(格式 M: /FS:FAT32 /Q),因此其上没有任何内容
- 列表 E: (dir /AE:) 上没有任何内容
- 仅将一个文件从 D: 复制到 E:,无需执行任何其他操作,直到结束 (XCOPY /JD:\TEMP\TheFile.TheExtension E:\AAA),是的,同时将其重命名为 AAA
- 将其重命名为其真实名称(REN E:\AAA TheFile.TheExtension)
- 列表 E: (dir /AE:) 并且只有这样的文件
- 查看 E: 的碎片,文件只有一个碎片,根本没有碎片
我曾尝试使用“copy”和“robocopy”,但没有成功。
我曾尝试使用“XCOPY /J ... ”并且成功了!
为什么?我不知道...但至少使用“XCOPY /J ... ”并且在目标名称更改时可以工作!
当目标名称是某种特殊名称时,Windows 似乎正在做一些不正常的事情。
要了解我所提到的内容,只需尝试使用 FAT32 4113MB 分区来保存 4095MB pagefile.sys!!! 并尝试将其放在一个片段上!!! 正常情况下无法做到这一点!!! 但是,嘿,如果您从控制台重新格式化分区并使用 XCOPY /J pagefile.sys E:AAA 然后重命名它...它就会保留在一个片段中!!!
希望这可以帮助其他人!