下载/复制文件是否会同时促进碎片化?

Jon*_*han 10 performance defragment partitioning

同时向硬盘分区写入多个文件是否会导致碎片化?这些文件会隔行写入硬盘吗?

例子:

  • 从网络同时下载多个文件
  • 将不同来源的文件复制到同一个分区
  • 下载几个种子

这在各种操作系统之间有区别吗?为整个文件先验分配空间是应用程序特定的功能吗?

Sys*_*138 7

这在很大程度上取决于正在使用的文件系统,在某种程度上取决于操作系统,以及打开文件的程序。创建新文件时由应用程序请求正确的存储量,操作系统和文件系统功能会影响这些应用程序在不知道有多少空间时遵循的打开和扩展行为索要。

如果程序要求操作系统提供 4.2GB 的文件,操作系统会找到一大块 4.2GB 的可用空间。如果失败,它将为程序提供足够的自由空间片段来保存文件。这里有一些变量,这是简化的。

如果程序要求操作系统提供 4KB 文件,操作系统会提供。如果程序不断请求新的连续 4KB 段(您正在下载文件,而程序不知道它有多大),直到获得 4.2GB 的空间,操作系统将很乐意提供空间。这是文件系统和操作系统产生差异的情况。

例如,XFS 是基于盘区的,因此添加的空间将是连续的,直到无法连接为止。此外,XFS 可以配置为预先分配具有一定空间量的新文件,这可以进一步减少碎片(在虚拟机存储卷以及 DVD ISO 卷上很有用)。

EXT2/3、NTFS 和我相信 Reiser 会分配连续的,直到不能再分配为止。然后它会开始新的片段。不过,每个片段的大小可能为 4KB。

让我们采取最坏的情况。两个并行的 4.2GB 文件一次并行保存 4KB,到同一个目录。“同一目录”是最坏情况的一部分,因为某些 OS/FS 组合试图将文件放在彼此靠近的同一目录中。对于某些 OS/FS 组合,这将导致两个文件在磁盘上完全交错。对于试图将新打开的文件保存在不同空闲段上的其他人来说,可能根本没有或很少有碎片。

对 XFS 有点了解(我认为 ext4 和 btrfs 也可以做到这一点)。在这种情况下,交错不会是 4KB,它将是您在安装卷时设置的分配大小值。将其设置为 256MB,您将获得一个 4.2GB 的文件,其中包含 17 个片段而不是超过 100 万个片段。适用于存储大文件的卷,如媒体服务器。对于存储大量小文件和一些大文件的卷没有用。

正因为如此,Bittorrent 客户端要么在开始新下载时打开稀疏文件,要么在开始之前只分配指定的总大小。

当从同一个分区的不同部分(或者甚至从其他分区)复制文件时,复制过程理论上知道复制的文件有多大,因此从一开始就从操作系统请求适当大小的空间;无需为新文件追加分配。